CAN总线与CANOpen协议
一CAN总线简介
1.1 引言
在20世纪90年代的汽车研究领域,采用总线分布式控制获得了很大的成功。用户要求汽车的控制系统具有优越的性能以保证汽车的安全性和舒适性,因此越来越多的具有超强计算能力的电子设备加载在汽车上。这就要求不同的电子设备之间能够进行通信和数据交换,以达到信息共享协调工作的目的。德国的博世公司(Bosch)率先将CAN总线(Controller Area Network)应用于汽车电子控制系统,解决了控制系统的部件之间的以及控制系统与测试设备主机的数据交换问题,替代了原有网络(用于车体控制的LIN网络、用于厂内环境控制的MOST 网络及原有车内通信的Flecray网络等)实现的功能。由于其独特的设计思想和高可靠性,在不同总线标准的竞争中获得了广泛的认可,并逐渐成为汽车最基本的控制网络,广泛应用于火车、机器人、楼宇控制、机械制造、数字机床、医疗器械、自动化仪表等领域。
图1.1 早期的ECU(汽车电子控制单元)通信
CAN总线是一种串行通信协议,具有较高的通信速率的和较强的抗干扰能力,可以作为现场总线应用于电磁噪声较大的场合。由于CAN总线本身只定义ISO/OSI模型中的第一层(物理层)和第二层(数据链路层),通常情况下CAN 总线网络都是独立的网络,所以没有网络层。在实际使用中,用户还需要自己定义应用层的协议,因此在CAN总线的发展过程中出现了各种版本的CAN应用
层协议,现阶段最流行的CAN应用层协议主要有CANopen、DeviceNet和J1939等协议。
图1.2 基于总线(CAN)的ECU通信
1.2 CAN总线的特点
CAN总线并不采用物理地址的模式传送数据,而是每个消息有自己的标识符用来识别总线上的节点。标识符主要有2个功能:消息滤波和消息优先级确定。节点利用标识符确定是否接收总线上的传送的消息当有2个或更多节点需要传送数据时,根据标识符确定消息的优先级。总线访问采用多主原则,所有节点都可以作为主节点占用总线。CAN总线相对于Ethernet具有非破坏性避免总线冲突的特点(CSMA/CA协议,与CSMA/CD协议相似),这种方式可以保证在产生总线冲突的情况下,具有更高优先级的信息没有被延时传输。
其物理传输层详细和高效的定义,使得CAN总线具有其它总线无法达到的优势,注定其在工业现场总线中占有不可动摇的地位,CAN总线通信主要具有如下所示的优势和特点:
(1)CAN总线上任意节点均可在任意时刻主动的向其它节点发起通信,节点没有主从之分,但在同一时刻优先级高的节点能获得总线的使用权,在高优先级的节点释放总线后,任意节点都可使用总线;
(2)CAN总线传输波特率为5Kbps~1Mbps,在5Kbps的通信波特率下最远传输距离可以达到10Km,即使在1Mbps的波特率下也能传输40m的距离。在1Mbps波特率下节点发送一帧数据最多需要134μs;
(3)CAN总线采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术。在节点需要发送信息时,节点先监听总线是否空闲,只有节点监听到总线空
闲时才能够发送数据,即载波监听多路访问方式。在总线出现两个以上的节点同时发送数据时,CAN协议规定,按位进行仲裁,按照显性位优先级大于隐性位优先级的规则进行仲裁,最后高优先级的节点数据毫无破坏的被发送,其它节点停止发送数据(即逐位仲裁无破坏的传输技术)。这样能大大的提高总线的使用效率及实时性;
(4)CAN总线所挂接的节点数量主要取决于CAN总线收发器或驱动器,目前的驱动器一般都可以使同一网络容量达到110个节点。CAN报文分为两个标准即CAN2.0A标准帧和CAN2.0B扩展帧,两个标准最大的区别在于CAN2.0A 只有11位标识符,CAN2.0B具有29位标识符;
(5)CAN总线定义使用了硬件报文滤波,可实现点对点及点对多点的通信方式,不需要软件来控制。数据采用短帧发送方式,每帧数据不超过8字节,抗干扰能力强,每帧接收的数据都进行CRC校验,使得数据出错机率极大限度的降低。CAN节点在错误严重的情况下具有自动关闭的功能,避免了对总线上其它节点的干扰;
(6)CAN总线通信介质可采用双绞线、同轴电缆或光纤,选择极为灵活。可大大节约组网成本。
1.3 CAN总线的物理连接和电平特性
CAN总线采用差分信号传输,通常情况下只需要两根信号线(CAN-H和CAN-L)就可以进行正常的通信。在干扰比较强的场合,还需要用到屏蔽地即CAN-G(主要功能是屏蔽干扰信号),CAN协议推荐用户使用屏蔽双绞线作为CAN总线的传输线。在隐性状态下,CAN-H与CAN-L的输入差分电压为0V(最大不超过0.5V),共模输入电压为2.5V。在显性状态下,CAN-H与CAN-L的输入差分电压为2V(最小不小于0.9V),其物理连接和电平特性如下图所示:
图1.3 CAN总线物理连接
图1.4 CAN总线的基本结构
图1.5 CAN总线的电平特性
1.4 CAN总线的数据格式
CAN协议有以下5中不同类型的帧格式:
表1 帧的种类及用途
帧帧用途
数据帧用于发送单元向接收单元传送数据的帧
远程帧用于接收单元向有相同ID的发送单元请求数据的帧错误帧用于当检测出错误时向其他单元通知错误的帧
过载帧用于接收单元通知尚未做好接收准备的帧
帧间隔用于数据帧及远程帧与前面的帧分隔开来的帧
CAN2.0B总线规范定义了2种不同的数据格式(标准帧和扩展帧),其主要区别在于标识符的长度不同:标准帧有11位的标识符,扩展帧有29位的标识符。CAN总线的标准帧数据长度是44~10位,而扩展帧的长度是64~128位。根据数据流代码的不同,标准帧可以插入32位的填充位,扩展帧可以插入28为的填充位。因此标准数据帧最长为131位,扩展帧最长为156位。
图1.6 数据帧
图1.7 远程帧