1 引 言
在20世纪80年代初,德国的BOSCH公司提出了用CAN总线(Controller Area Network,控制器局域网)来解决汽车内部的复杂硬件信号接线。CAN总线以其低成本、高可靠性、实时性、抗干扰能力强等特点得到了广泛的应用,1993年ISO正式颁布了ISO11898CAN高速应用标准和ISO11519CAN低速应用标准,这为CAN总线的标准化、规范化铺平了道路。CAN总线主要具有以下特性:
(1)CAN采用多主方式工作,网络上任意节点均可以在任意时刻主动地向网络上的其他节点发送信息而不分主从,通讯方式灵活且无需站地址等节点信息。
(2)CAN网络上的信息可分成不同的优先级,满足不同的实时性要求;高优先级的数据最多可在134μm内得到传输。
(3)CAN的直接通信距离最远可达10 km(速率5 kb/s以下);通讯速率最高可达1 Mb/s(此时通信距离为40 m)。
(4)CAN只需通过报文滤波即可以实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”。
(5)CAN采用非破坏性总线裁决技术(CSMA/CD),在多个节点对总线发送信息出现冲突时,低优先级的节点会主动退出发送而保证高优先级的节点的信息传输,因此大大节省了总线冲突裁决时间,最重要的是在网络负载很重的情况下也不会出现网络瘫痪情况(以太网则可能)。
(6)CAN协议废除了传统的站地址编码,而对通讯数据块进行编码,使网络中的节点个数在理论上不受限制。
(7)CAN总线具有极好的检错效果,CAN的每帧信息都具有CRC校验和其他检错措施,保证了错误的输出率极低。
(8)CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线以上其他节点的操作不受影响。
2 基本硬件介绍
本文所涉及的通信系统相关工业控制系统框图如图1所示。
其中,CAN总线通过PC适配卡与上位机相连,各CAN节点都可与上位机通信,同时互相之间也可以通信。考虑到系统的可靠性与安全性,建议上位机采用工控机,当然在要求可靠性与安全性相对较低的场合也可以考虑采用PC机。CAN总线控制器是以在一块可编程芯片上的逻辑电路的组合来提供与微处理器的物理线路的接口。通过对他的编程,CPU可以设置他的工作方式,控制他的工作状态,进行数据的发送和接收,把网络应用层建立在他的基础之上。CAN控制器目前主要有两大类:一类是独立控制器,如PHILIPS公司的PCA82C200,SJA1000,INTEL公司的82526,82527等;另外一类是内部带有CAN控制器的微处理器,如P8XC591等。我们采用的是PHILIPS公司的SJA1000控制器以及TJA1050总线驱动器。
2.1 SJA1000特性及内部结构
SJA1000是一种独立控制器,是PHILIPS公司的PCA82C200的替代产品。他增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特点的CAN 2.0B协议。SJA1000主要具有如下特点:
(1)与PCA82C200独立CAN控制引脚和电气兼容;
(2)仍然具有PCA82C200模式(即默认的BasicCAN模式);
(3)扩展的接收缓冲器(64 B FIFO);
(4)同时支持11位和29位标识符且与CAN 2.0B兼容;
(5)位速率可达1 Mb/s;
(6)具有详细位号(bit position)的仲裁丢失中断;
(7)只听模式(无确认、无激活的出错标志);
(8)可编程的CAN输出驱动器配置;
(9)可以和不同处理器接口。
2.2 TJA1050特性
TJA1050是PHILIPS公司生产的,用以替代PCA82C250的高速总线收发器。该器件提供了CAN控制器与物理总线之间的接口以及对CAN总线的差动发送和接收功能。TJA1050的主要特性如下:
(1)与ISO11898标准完全兼容;
(2)总线与电源及地之间的短路保护;
(3)优化了输出信号CANH和CANL之间的耦合,大大降低了信号的电磁辐射;
(4)具有强电磁干扰下,宽工模范围的差动接收能力;
(5)未上电节点不会干扰总线(对此类节点性能做了优化);
(6)总线至少可连接110个节点。
3 CAN节点硬件电路设计
3.1 CAN节点硬件电路设计的原理
图2为硬件电路设计的原理框图。其中主控制器选用ATMEL公司的ATmega128单片机,总线收发器为TJA1050。其中ATmega128为ATMEL公司生产的基于RISC结构的高性能低功耗的新一代8位单片机,其主要功能如下:
(1)具有先进的RISC结构,具有预取指令功能,大多数指令可在一个时钟周期内完成;
(2)内置128 kB可擦写10 000次以上的可编程FLASH;
(3)具有独立锁定位,可选择的启动代码区具有多重密码保护锁死功能;
(4)内置模拟比较器,具有8路10位ADC,I/O口可做AD转换用;
(5)内部有标定的RC振荡器,同时具有独立片内震荡器的可编程看门狗定时器;
(6)6种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式以及扩展的Standby模式;
(7)有2个异步串行通讯口UART,不占用定时器和SPI传输功能;
(8)具有多个片内/外中断源。
3.2 节点硬件设计的部分说明
(1)SJA1000选用PeliCAN模式,与微控制器连接后,其片选地址即操作SAJ1000内部寄存器的基址用户可以自行设定。
(2)TJA1050采用了最新的EMC技术,比PCA82C250/251的抗电磁干扰能力提高了20 dB。引脚S用于选定TJA1050的工作模式。有两种工作模式可以选择:如果引脚S接地,则TJA1050进入高速模式。当S端悬空时,其默认工作模式也是高速模式。高速模式是TJA1050的正常工作模式,也是我们所选用的模式。如果引脚S接高电平,则TJA1050进入静音模式,该模式可防止由于CAN控制器失控而造成的网络阻塞,同时由于TJA1050支持的CAN信号有良好的对称性,所以不像前代产品需要专门的斜率控制模式。
(3)在CAN控制器和总线驱动器的物理输出输入线路中,可根据情况适当加入保护电路,以增加数据传输的稳定性。
4 CAN节点软件设计流程
CAN应用节点的程序设计主要分为3部分:SJA1000初始化子程序、发送子程序、接收子程序。可以说所有CAN通信程序设计都是遵循这3个基本步骤的,所以熟练掌握这3部分子程序的设计对于应用CAN总线的工程技术人员来说是非常有必要的。下面就这3个子程序分别加以说明。
4.1 SJA1000初始化子程序
微控制器和SJA1000之间状态、控制和命令信号的交换都是在控制段中完成的。初始化加载后,寄存器的接收代码、接收屏蔽、总线定时寄存器0和1以及输出控制就不能改变了。SJA1000共有2种工作模式:复位模式和工作模式。当硬件复位或控制器掉电时会自动进入复位模式,只有在复位模式下才可以对SJA1000进行初始化。初始化主要包括工作方式的设定、接收屏蔽寄存器和接收代码寄存器的设定、总线时序寄存器的设置、输出模式寄存器和中断使能寄存器的设置等。在初始化完成以后,CAN总线就可以开始进行数据的接收与发送工作,其初始化流程图见图3。
4.2 发送与接收子程序
首先与CAN控制器连接的微处理器必须将要发送的数据从其数据存储区中取出,与主机的ID地址一起组成信息帧按CAN报文结构发送到发送缓冲器中,并置位命令寄存器中的发送请求标志,接收到发送请求后发送过程由CAN控制器自动完成。在检测到接收缓冲器中存在有效报文后,接收程序将接收缓冲器中的内容读入CPU的数据存储区。接收完毕后检查总线状态及溢出情况等并做相应处理,发送与接收程序流程图见图4。