>
CAN总线技术特点
CAN总线是一种串行数据通信总线,在CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对数据的成帧处理。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点是使网络内的节点个数在理论上不受限制,数据块的标示码可由11位或29位二进制组成,因此可以定义211或229个不同的数据块,这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据。CAN总线的数据通信具有突出的可靠性、实时性和灵活性。其特点可概括如下:
* CAN为多主工作方式,网络上任一节点均可在任意时刻主动向网络上的其它节点发送信息,而不分主从,通信方式灵活,且无需站地址等节点信息。利用这一特点可方便的构成多机备份系统。
* CAN网络上的节点信息分成不同的优先级,可满足不同的实时要求,高优先级的数据最多可在134ms内得到传输。
* CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其在网络负载很重的情况下,也不会出现网络瘫痪的情况(以太网则可能)。
* CAN只需通过报文滤波即可实现点对点、点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”。
* CAN的直接通信距离最远可达10km(速率<5Kbps);通信速率最高可达1Mbps(此时通信距离最远为40m)。
* CAN上的节点数主要取决于总线驱动电路,目前可达110个;报文标识符可达2032种(CAN2.0A技术规范),而扩展标准(CAN2.0B技术规范)的报文标识符几乎不受限制。
* 采用短帧结构,数据段的长度最多为8个字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8个字节的数据长度不会占用过长的总线时间,从而保证了通信的实时性。另外,传输时间短,受干扰的概率低。
* CAN的每帧信息都有CRC校验及其它措施,保证了数据出错率极低。
* CAN的通信介质可为双绞线、同轴电缆或光纤,选择灵活。
* CAN节点在错误严重的情况下具有自动关闭的功能,以使总线上其它节点的操作不受影响。
CAN总线电平如图1所示。
CAN总线控制通信系统
的实现
CAN的网络一般有3种实现方式:微控制器+CAN控制器+CAN收发器;集成CAN控制器的微控制器+CAN收发器;CAN的串行I/O器件+CAN收发器。只要符合CAN总线规范的单元都可以通过CAN接口接入CAN总线。CAN总线得到了Intel、Motorola、Philips、Siemens等众多大公司的支持,提供了许多可以实现CAN总线协议的芯片来供用户选择。另外,CAN协议是完全公开的,这些都给CAN总线的开发设计带来很大的方便。CAN控制器有Philips公司的82c200、SJA1000,Intel公司的82526、82527等。集成了CAN控制器的微控制器也很多,如Philips公司的P8XC592/598,Intel公司的196CA/CB,TI公司的TMS320LF2407(DSP)等。CAN的串行I/O芯片可以采用Philips的82c150。CAN的收发器有Philips的82c250,TI的SN65HVD230等。这些芯片一般都兼容最新的CAN2.0A/B协议。
基于DSP芯片的嵌入式控制器CAN节点实现
TI公司推出的TMS320LF240X系列、TMS320LF28X系列芯片是专门针对控制领域的应用而设计的DSP芯片。这类芯片内部不但集成有丰富的控制类单元,而且也集成CAN控制器(兼容CAN2.0A/B),因此可以很方便地将基于DSP芯片的嵌入式控制系统设计CAN总线上的一个CAN节点接入,并且只占用DSP的两根I/O口线(CAN的发送和接收端与I/O是复用的)。图2(基于CAN的第2种实现方式)是采用TMS320LF2407作为微控制器的CAN节点实现。它不但完成各类控制律,而且完成总线的通信功能。
可以看到,这个CAN节点主要是在DSP的基础上增加了一个CAN发送器PCA82C250。需要注意的是:2407采用低功耗设计,3.3V供电,而CAN发送器PCA82C250是5V供电,假如直接相连,2407肯定无法承受。采用两路光耦6N137不仅起到隔离DSP和CAN总线的作用,而且在保护DSP芯片的同时又可以进行电平转换。当然进行电平匹配,还可以采用专门的电平转换芯片,或者CPLD芯片。CAN节点的通信有三种通信模式:高速模式、斜率控制模式、等待模式。三种模式的选择是通过PCA82C250端子的接法来实现的。高速模式下要求接一个0 ~1.8kW的电阻到地;斜率控制模式下要求接一个16.5kW~140kW的电阻到地;等待模式下要求RS接到高电平,至少保证RS的端电压大于0.75VCC。显然图2采用的是斜率控制模式。至于CAN总线的终端匹配电阻的选择并不是固定的,这与所设计的CAN网络的节点个数,采用的传输介质等都有关系。终端电阻主要起到吸收信号的作用,对于较大型的CAN网络,一般在CAN总线的两端各接上一个几百欧的电阻,对于只有几个节点的试验系统,可以在每个节点的接口处接上一个几百欧或稍大一些的电阻都是可以的。
CAN控制器并不一定需要接CAN发送器才可以接到CAN上的。图3中CAN控制器通过采用一些分立的元件直接连到总线上,这种方法的不足在于必须很细致地调节电阻参数,使其满足在显性和隐性情况下,CANH与CANL的电平满足图1的形式。在隐性情况下,VCANH与VCANL被固定于平均电平下,Vdiff近似为零。在显性情况下以差分形式表示,这样可以达到抗共模干扰的作用,而且这样的连接形式只能下挂30个节点。加上CAN收发器后,不仅可以提供对总线的差动发送和接收的功能,同时也大大增强了总线的驱动能力,通信速率可达最高1Mbps,还可最大挂接110个节点。
CAN节点发送数据的程序流程图如图4所示。
CAN节点在接收数据的操作首先也是对CAN寄存器进行配置,接收到报文后,CAN控制器先进行报文滤波,假如符合要求就产生报文接收中断,DSP处理中断服务子程序将mailbox中的数据接收进来,进行处理。
基于51单片机和SJA1000 CAN控制器的CAN节点实现
由于DSP具有很强的数字信号处理能力,因此,基于DSP芯片设计的CAN节点常被用于处理信息量较大的场合。另外,在工控系统中,没有大量数据需要处理,在只要实现简单控制的场合,为了降低成本也常采用单片机开发CAN节点。采用片内带CAN控制器的单片机设计CAN节点,与上述的基于DSP的CAN节点设计类似。图5(基于CAN的第1种实现方式)就是采用AT89C52(普通单片机,不带CAN控制器)、SJA1000(CAN控制器)和PCA82C250设计的CAN节点。单片机和SJA1000 CAN控制器都需要时钟信号(SJA1000的时钟还是比较关键的,因为这将关系到以后总线波特率的设定,假如晶振太小,CAN节点就无法在高速模式下运行),这里使用24MHz的晶振,51单片机的时钟采用SJA1000的CLKOUT输出。采用集成了CAN控制器的单片机或DSP芯片设计CAN节点,可以减小系统的复杂度,提高系统的可靠性,同时也方便设计者的开发,而在价格上却并不一定会比非集成的方案高。
基于串行I/O器件的CAN节点实现
为了提高微控制器的I/O能力,降低线路数量和复杂性,进一步降低成本,Philips等公司还提供了CAN的串行智能I/O器件。这些I/O器件支持由端口输入管脚上变化引起的自动发送,时钟振荡器不要求外部器件,从而大大降低了CAN链路的成本。图6(基于CAN的第3种实现方式)是采用82c150串行连接I/O器件设计的CAN节点实现。
整个CAN通信系统的实现
图7显示的一个比较完整的CAN网络,这个网络还可以通过单片机或DSP的串口与其它网络系统通信,或通过CAN网络上PC节点的以太网接口等其它通信接口接入上层的网络中,从而形成一个更大的网络体系。基于PC机的CAN节