1 引言
CAN(Controller Area Network,控制器局域网)总线是一种有效支持分布式控制或实时控制的串行通信网络,是现场总线的一种。CAN总线具有通信速率高、开放性好、纠错能力强和系统成本低等优点,现已在机械工业、机器人、医疗器械等各种领域中得到了广泛的应用。
然而由于受到CAN收发器的限制,在一个CAN总线网络中最多只能有110个CAN节点,最大只能达到10 km的通信距离,所以当所需CAN总线网络规模超出以上限制时就必须进行CAN总线网络的扩展。目前一般的扩展方式是加入CAN总线中继器。CAN中继器的主要任务是在两个CAN网段之间实现数据的转发,他具有过滤通信量,扩大通信距离,增加节点的最大数目,允许各个网段使用不同的通信速率,提高可靠性,改善网络性能等优点,是CAN组网的关键设备之一。在稍大型的CAN总线网络中经常会用到中继器。
通常CAN中继器都是基于两片独立的CAN控制器实现的。这样的CAN中继器虽然可以扩大通信距离、增加节点的最大数目,但是由于他的数据存储转发要通过CPU的内部缓存中转,使得CPU与CAN控制器之间的数据交互过多,从而造成通信系统的时延增加,实时性能变差,CPU的负担变重。同时当网络负担较重时,还会因为CPU的内部缓存容量有限,造成帧丢失现象,使系统可靠性变差。然而,实时性和可靠性对通信系统而言是非常重要的。
针对上述中继器在实时性和可靠性上的缺点,我们采用独立双CAN控制器作为两路CAN接口的控制器来设计CAN中继器。利用独立双CAN控制器的内置FIFO和网关的特性,使两个CAN节点共享双CAN模块的资源,允许在两个单独的CAN节点之间直接通过FIFO进行数据交换,而不使用CPU内部缓存中转,这样减少了CPU与控制器之间的数据交互,优化了CAN总线的传输,大幅度减少了CPU的负荷,改善了整个系统的实时性和可靠性。
2 独立双CAN控制器简介
独立双CAN控制器包括两个全CAN功能节点。但他并不是这两个CAN节点简单的组合,而是这两者既可以独立使用,又可以通过双CAN控制器的网关功能,设计出可以大幅度减轻CPU负担的中继器的设备。除此之外,双CAN控制器还具有节电功能、更多的中断功能和增强的滤波功能等,他与微控制器的信息交换通道也有串行和并行两种选择。
独立双CAN控制器的结构框图。他由CAN节点A/B、报文对象缓冲器、双CAN控制模块、端口控制、总线接口、中断控制等模块构成。
端口控制模块实现CAN节点A/B收发数据;总线接口模块用于接收来自CPU的片选、时钟、地址、读写信号等信息,实现与CPU的信息交互;中断控制模块负责整理中断源信息,向CPU发出中断信号;双CAN控制模块是一个全局控制接口,他包括初始化逻辑、全局控制和状态逻辑以及中断请求接收器;报文缓冲单元包含报文缓冲区、FIFO缓冲区管理、网关控制逻辑以及一个基于中断请求发生单元的报文。CAN节点A/B分别又包括位流处理器、位定时控制单元、错误处理逻辑、中断请求产生单元和节点控制逻辑。其中CAN节点A/B、报文对象缓冲器、双CAN控制模块等模块构成了独立双CAN控制器的核心。
3 基于独立双CAN控制器的中继器设计
独立的双CAN控制器支持在两个单独CAN总线之间的信息自动传输,他的网关功能是通过两个单独的CAN节点共享的CAN报文对象存储器来实现的,使报文转发不用CPU的干预。通过对报文配置寄存器中的报文对象CAN节点选择位的设置,使每一个存储在报文存储器中的报文对象关系到节点A或节点B。两个节点之间的信息交换可以通过联结两个报文对象(正常网关模式)或通过共享一个共同的报文对象(共享网关模式)来实现。本文中以共享网关模式来设计一个CAN中继器。
所设计的中继器可以实现CAN节点A将与他相连的数据源所连续发送的数据帧通过CAN节点B自动发送到目标方的CAN总线上,反之亦然。
3.1 CAN中继器的硬件设计
CAN中继器主要由微控制器和两路CAN控制器接口组成。现在这个中继器的微控制器(CPU)由89C52来充当,他负责整个中继器的监控任务。两路CAN控制器接口使用独立双CAN控制器82C900、光电耦合电路和CAN总线驱动器82C250组成。两路CAN接口的CAN总线驱动器都采用带隔离的DC/DC模块单独供电。这样不仅实现了两路CAN接口之间的电器隔离,也实现了CAN中继器与总线之间的隔离。采取隔离措施,可以使故障局限在某一网段内,而不至于影响其他网段,既便于维护又保证了系统的安全。
除了上述的器件,该CAN中继器的硬件还包括:LED指示灯、E2PROM、Watch Dog等部分。在这里共使用了7个LED灯:1个用于上电指示,4个用于两路CAN接口的接收和发送指示灯,另外2个用于两路CAN接口的通信故障指示。通过这些LED指示灯就可以基本了解整个系统的当前运行状态。在复位电路设计中,采用了3种复位方式,即上电复位、手动复位和软件复位。上电后,89C52、82C900 等即可复位;另外还可以通过手动开关强制复位;软件复位主要是由看门狗Watch Dog(MAX1232)进行控制,当软件运行出现死循环时,看门狗发送复位信号,对系统复位以保证软件的顺利运行,这样设计便于调试和处理整个系统运行时出现的问题。E2PROM采用具有1 kB容量的24LC08,他用于保存CAN中继器的配置参数等信息,以便于系统的灵活配置。
3.2 CAN中继器的软件设计
在该中继器中独立双CAN控制器的工作状态。接收数据帧的节点为源方,而经过中继器发送数据帧的节点为目标方。一个共享报文对象设置为源方的接收对象,当数据帧发送位GDFS置为1(即设为对应的数据帧自动发送)时他接收到一个数据帧,通过对报文对象节点选择位NODE(0表示该报文对象分配给CAN节点A,1表示该节点分配给CAN节点B)和报文对象方向控制位DIR(0为接收对象,1为发送对象)取反,报文对象发送请求位置位,该报文对象转为目标方的一个发送对象,同时发送相关的数据帧,而不需要任何CPU的干预。在报文对象发送成功后,报文对象发送请求位复位,共享报文对象返回到作为与源方关联的接收对象的初始功能。
对于CPU而言,由于通信对时间的要求,进行软件设计时要求做到转发数据的时间尽量短,因此CPU在接收数据时都是采用中断方式。
CAN中继器的软件设计主要包括以下几部分:初始化程序、主监控程序、中继器功能中断子程序等。
在初始化程序中,89C52初始化是对芯片的I/O和堆栈等进行初始设定,使其能正常工作;双CAN控制器初始化主要是指设置模式、总线时序、中断使能、屏蔽码和ID号等,这些设置是通过配置82C900芯片内部寄存器来实现的。
主监控程序负责监控整个系统,当发现中断时调用相应的中断服务程序。当主监控程序接收到某一节点的接收报文中断时,调用中继器功能中断子程序。中继器功能中断子程序会实现图4中所示的接收、转发报文的过程,实现中继器功能。
3.3 两种CAN中继器性能比较
基于两片独立的CAN控制器的CAN中继器在进行存储转发时,是先将一个CAN节点接收到的数据帧从其控制器FIFO中读出并存储到CPU的内部缓存中,再由CPU的内部缓存将数据帧写到另一个CAN节点控制器的FIFO中并发送。
基于独立双CAN控制器的CAN中继器利用独立双CAN控制器中特有的网关功能,以及他的两个CAN节点共享FIFO的特性,所以在工作时只要通过配置双CAN控制器相应寄存器的值(如报文对象的报文配置寄存器、报文对象的网关控制寄存器)就可以实现将一个节点接收到的数据帧存于共享FIFO中,再由另一个节点直接从共享FIFO中读出并发送。
由于报文不需要在CPU的内部存储空间中转,使用独立双CAN控制器的CAN中继器CPU与控制器之间的数据交互要远少于基于两片独立的CAN控制器的CAN中继器,最大程度上减少了数据存储转发的时间,缩小了通信时延,提高了系统的实时性。
同时基于独立双CAN控制器的CAN中继器由于存储转发时不使用CPU内部存储空间,也就避免了在通信任务较重时,因为CPU内部存储空间有限而造成的帧丢失现象,极大地提高了系统的可靠性。
通过以上分析,我们可以发现基于独立双CAN控制器的CAN中继器在实时性和可靠性上都优于基于两片独立的CAN控制器的CAN中继器。
4 结 语
基于独立双CAN控制器的CAN中继器由于利用双CAN控制器本身的内置FIFO和网关功能的特性,避免了受到CPU内部存储空间的限制,最大限度地减少了CPU对处理报文的负担、缩小通信时延,改善了通信系统的实时性和可靠性。实践证明,该中继器工作时性能稳定,实时性和可靠性都有明显提高,但是他的软件设计比较复杂,希望以后能找到更好的软件算法。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』