干货知识!CAN详解,错误数据格式坑&优先级&电阻&报文数量!
什么是CAN(控制器局域网)
控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。CAN创建在基于信息导向传输协定的广播机制(Broadcast Communication Mechanism)上。其根据信息的内容,利用信息标志符(Message Identifier,每个标志符在整个网络中独一无二)来定义内容和消息的优先顺序进行传递,而并非指派特定站点地址(Station Address)的方式。因此,CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。
优势及特点
特点:
1.CAN是一个用于连接电子控制单元(ECU)的多主机串行总线标准。电子控制单元有时也被称作节点。CAN网络上需要至少两个节点才可进行通信。节点的复杂程度可以只是简单的输入输出设备,也可以是包含有CAN交互器并搭载了软件的嵌入式组件。所有节点通过两根平行的总线连接在一起。两条电线组成一条双绞线,并且接有120Ω的特性抗。
2.数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序。
3.多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞。
4.通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M)。
5.CAN总线传输介质可以是双绞线,同轴电缆,CAN总线适用于大数据量短距离通信或者长距离小数据量,实时性要求比较高,多主多从或者各个节点平等的现场中使用。
优势:
1.可在各节点之间实现自由通信:CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。采用这种方法的优点可使网络内的节点个数在理论上不受限制,数据块的标识符可由11位或29位二进制数组成,因此可以定义2或2个以上不同的数据块,这种按数据块编码的方式,还可使不同的节点同时接收到相同的数据,这一点在分布式控制系统中非常有用。
2.结构简单:只有2根线与外部相连,并且内部集成了错误探测和管理模块。
3.数据纠错:采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作,每帧数据都有CRC校验及其他检错措施,保证了数据传输的高可靠性,适于在高干扰环境下使用。
4.完成对通信数据的成帧处理:CAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
5.节点在错误严重的情况下,具有自动关闭总线的功能,切断它与总线的联系,以使总线上其他操作不受影响,可以点对点,一对多及广播集中方式传送和接受数据。
CAN总线的数据格式与基本工作原理
数据格式:
1.CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔。
2.数据帧:结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。标准帧为11位,扩展帧为29位。这也是我们在使用中接触最多的格式。
3.远程帧:与数据帧相比没有数据段,结构上由7个段组成。当你需要总线上的一个节点向你发送数据,使用次节点的ID,发送一帧远程帧。
4.错误帧:虽然CAN总线是可靠性很高的总线,但是依然会出错:CAN总线上会出现5种错误。
5.过载帧和帧间隔:过载帧:当某个节点没有做好接收下帧数据将发送过载帧通知节点。帧间隔:只存在于数据帧与远程帧之间,用于帧之间的分离。
基本工作原理:
跟其他总线一样,CAN总线的通信也是通过一种类似于“会议” 的机制实现的,只不过会议的过程并不是由一方(节点)主导,而 是,每一个会议参加人员都可以自由的提出会议议题(多主通信模式),二者对应关系如下:
仲裁与优先级
假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是
结论:从该分析过程得出结论是:帧ID值越小,优先级越高,对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理。
CAN总线上的电平
CAN2.0A/B标准规定:总线空闲:CAN_H和CAN_L上的电压为2.5V
传输数据: 显性电平(逻辑 0):CAN_H 3.5V,CAN_L 1.5V
隐性电平(逻辑 1):CAN_H 2.5V,CAN_L 2.5V
CAN收发器:
照BOSCH CAN总线标准将0或1逻辑信号转换为标准中规定的电平,同时有反馈功能。
CAN总线的硬件抗干扰:
(1)在电路中增加共模电感。
(2)使用更高精度的电阻。
注意:并不是每个节点都需要增加电阻,只需要在总线相聚最远的两个节点使用电阻即可。
电阻也不是固定的120欧姆,根据导线的材质有关。
CAN总线负载率计算
计算例子:
假设CAN总线波特率为250Kbit/s,总线报文发送时间间隔为10ms, 报文为数据帧(8个字节数据),那么10ms内总线能够支持的最大报文数量为多少?
第一步:根据通信波特率计算10ms总共可以发送多少bit (250000/1000)*10 = 2500bit
第二步:计算最长的一帧报文有多少个bit
1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data
+ 16crc + 2ack + 7eof = 128bit
第三步:计算10ms内可以支持的报文数目
2500/128 ≈ 19
结论:
由上面的计算可知,当10ms间隔的报文数量超过19条时,就会出现丢帧,总线饱和。计算报文数量也是设计CAN网络所要考虑的,可以查阅相关文献看负载率在多少时合适!