戴培骏 张登军
(1.大陆汽车系统有限公司,上海 201807;2.广东博观科技有限公司,广东 珠海 519080)
CAN (Controller Area Network) 即控制器局域网络,是ISO国际标准化的串行通信协议。因其具有低开发成本、高传输速率、高可靠性等特点,CAN被广泛应用于汽车、机器人、数控机床、自动化仪表等领域。
在当前的汽车产业中,各种电子控制系统之间通信所用的数据类型,及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。出于安全性、舒适性、方便性、低公害、低成本的要求,1986年德国BOSCH公司开发出面向汽车的CAN通信协议。此后,CAN通信协议通过ISO11898及ISO11519进行了标准化,目前在欧洲已是汽车网络的标准协议。
CAN通信协议最初由德国BOSCH公司,为解决现代汽车内部大量的控制系统与传感器、执行机构之间的数据交换而开发的一种串行数据通信协议。目前汽车上的CAN网络分为一条传输速率为500Kbps的高速CAN,主要连接发动机、刹车系统、动力总成等系统;以及另一条传输速率为 100Kbps的低速 CAN,主要连接汽车灯光、车窗及门锁、空调、组合仪表等系统。
CAN总线以目前技术条件较成熟的ISO/OSI模型为基础,覆盖了ISO/OSI基本参照模型中的传输层、数据链路层及物理层。与其它网络相比,具有以下特点:
(1)CAN是一种多主总线系统,任意节点均可在总线空闲时发送报文;
(2)CAN协议对数据块进行编码,使网络节点数在电气特性的限制下最多可达110;
(3)CAN节点的信息分成不同的优先级,可满足不同通信的实时要求;
(4)CAN采用非破坏性总线仲裁技术,极大地节省了总线冲突仲裁时间;
(5)CAN报文不包含源地址或目标地址,仅用标识符来指示功能信息、优先级信息。通过报文滤波可实现点对点、一点对多点及全局广播等几种方式进行数据通信;
(6)CAN采用短帧结构,数据传输时间短,受干扰的概率低;
(7)CAN节点在错误严重的情况下自动关闭总线,不影响其它节点;
(8)CAN协议采用CRC检验并提供相应错误处理功能,保证了数据通信的可靠性。
CAN通信协议主要由CAN控制器完成,SJA1000主要由CAN核心模块和接口管理逻辑模块组成。CAN核心模块控制CAN总线帧的发送和接收,接口管理逻辑模块提供 SJA1000与微处理器或其它设备的连接。SJA1000结构框图如图1所示。
图1 SJA1000结构框图
通过正确的配置,SJA1000能自动完成CAN总线物理层和数据链路层的所有功能,对于单片机来说,可以把它看成一个基本的I/O设备。SJA1000的主要特性如下:
(1)标准帧和扩展帧信息的接收和传送。
(2)扩展的接收缓冲器(64字节FIFO)。
(3)在标准和扩展格式中都有单/双验收滤波器(含屏蔽和代码寄存器)。
(4)支持多种微处理器接口。
CAN Bus通信节点接口电路如图2所示,主要由CAN收发器PCA82C250、CAN控制器SJA1000、主控制器89C51单片机及物理总线接口电路组成。
当CAN节点处于CAN Bus网络终端时,需要在CAN_H和CAN_L之间增加阻值为120Ω的终端电阻。终端电阻对于匹配CAN物理总线的特征阻抗具有重要的作用,无终端电阻会使CAN通信的抗干扰性及可靠性大大降低,甚至无法进行正常通信。
图2 CAN Bus通信节点接口电路图
89C51单片机是整个CAN Bus接口电路的主控制器,负责 SJA1000的初始化,并且控制 SJA1000完成 CAN通信。SJA1000作为CAN协议转换的控制器,通过对片内寄存器的读、写操作,89C51单片机能够设置CAN通信模式,实现数据的发送与接收。
PCA82C250提供对物理总线的差动发送能力和对CAN控制器的差动接收能力,与ISO11898标准兼容。在运动环境中,具有抗瞬变、抗射频和抗电磁干扰性能,内部的限流电路具有电路短路时对传送输出级进行保护的功能。
SJA1000的多路地址/数据总线AD0~AD7连接89C51单片机的输入/输出端口 P0,89C51单片机通过此地址可对SJA1000片内寄存器执行相应的读、写操作,完成相应的通信功能。SJA1000的发送/接收口 TX0和 RX0分别连接PCA82C250的TX0和RX0,接收或发送CAN报文。SJA1000 RST连接89C51单片机的输入/输出端口,通过其软件程序来控制SJA1000完成复位操作。
CAN Bus通信系统要有效、实时地完成通信任务,系统的软件设计是关键。系统软件的设计主要包括CAN节点初始化、CAN报文接收以及CAN报文发送。
SJAl000的内部寄存器是作为89C51单片机的片外寄存器工作的,89C51单片机与SJAl000间状态、控制和命令的交换都是通过在复位模式或工作模式下对寄存器进行读、写操作来完成的。
在初始化CAN Bus内部寄存器时,必须使各节点的位速率一致,而且收、发双方必须同步。报文的接收主要有中断和查询两种接收方式。为提高通信的实时性,采用中断接收方式,这样也可保证接收缓冲器不会出现数据溢出现象。
CAN节点初始化主要是设置 SJA1000的通信参数,SJA1000初始化流程如图3所示。SJA1000初始化在复位模式才可进行,在主控制器发送信息到SJA1000的控制段后,清除复位模式/请求标志位,通过循环读标志位确认是否进入工作模式才能进行下一步操作。
图3 SJA1000初始化流程图
CAN报文发送由SJA1000独立完成,发送流程如图4所示。89C51将要发送的数据根据CAN通信协议封装,传送到空闲的发送缓冲器,然后将命令寄存器中的发送请求标志位置位,SJA1000将自动向CAN Bus发送数据。若正在发送报文,发送缓冲器就被写锁定。
图4 CAN报文发送流程图
CAN报文接收由SJA1000独立完成,接收流程如图5所示。CAN Bus并不是总在通信,为了提高通信效率,采用中断接收方式。SJA1000接收的报文数据放在接收缓冲器内,同时将状态寄存器的接收缓冲器状态位RBS和接收中断标志位RI置位,并向89C51发送接收中断,启动中断接收服务程序,89C51通过执行中断接收服务程序,从SJA1000的接收缓冲区读取报文数据,并存储到单片机的内存单元,然后释放接收缓冲器。
图5 CAN报文接收流程图
设计完成了基于89C51单片机和CAN控制器SJA1000的CAN Bus通信节点接口电路。CAN Bus通信系统结构简单、适应性和可扩展性强,CAN Bus以其分时多主、非破坏性总线仲裁和自动检错重发的技术特点有效地提高了通信的可靠性,从而使现场调试更加方便,缩短了开发周期。实践证明,CAN Bus具有很高的可靠性和的性价比,是目前较为理想的现场总线之一。
[1] 邬宽明.CAN 总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2006.
[2] 饶运涛,邹继军.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2007.
[3] 贾智平,张瑞华.嵌入式系统原理与接口技术[M].北京:清华大学出版社,2005.