在前文一文读懂CAN总线(一)中我们简单介绍了CAN通讯协议,讲了标准CAN和扩展CAN以及CAN消息类型,在本文中将继续为大家深入讲解CAN总线的位填充机制、错误检测和故障界定、网络拓扑、终端匹配、电缆与接线、差分信号电压幅值。
位填充机制
定义及机制形式
帧起始、仲裁域、控制域、数据域以及CRC校验和域,均通过位填充方法编码。
位填充是指:
无论何时,发送器只要检测到位流中有5个连续相同逻辑的位,便会自动在位流中插入一个补码位。
举例来说,如果连续5个显性位,则在5个显性位之后自动插入1个隐性位,接收器会自动删除这个插入的填充位。
数据帧或远程帧的剩余位域(CRC界定符、应答域和帧结尾域)形式固定,不填充;错误帧和过载帧也不填充。
作用
1.CAN网络同步需要足够多的上升沿,这是CAN协议规定位填充的目的之一。
2.确保数据帧不会被当作错误帧(由6个连续的显性或隐性位组成)、确保正确识别帧结束标志(7个连续隐性位)。
错误检测和故障界定
CAN总线具有很高的“健壮性”,这是因为CAN具有多种错误检查机制。
CAN协议制定了5种错误检测方法,3种位于报文层,2种位于位流层。
如果一个数据帧出现错误,那么这个帧会被丢弃,并且接收节点还会发送一个错误帧。这会强制发送节点重复发送出错的报文,直到接收节点正确接收;如果同一个报文重复出错,达到一定次数后,发送节点可以关闭发送功能以降低对总线的影响。
报文层错误检测
报文层的错误检测包括CRC和ACK。
CRC域包含15位校验、1位界定符;ACK域包括1位应答位、1位界定符。
CRC校验错误
CRC校验错误很好理解,它对数据域以及数据域之前的位生产CRC校验。由于一帧CAN报文数据流很小(最多8个用户数据),所以15位CRC的侦错能力非常优秀。
ACK校验错误
ACK域是怎么起作用的呢?
这是由CAN协议规定的,即发送节点发送一帧数据后,接收节点必须向发送节点应答,如果发送节点没有收到接收节点的应答信号,就会认为自己发送失败,从而重传数据。
报文层的第三种错误检查方法是
格式检查
。这种检查会监控报文中那些一定为隐性位的域,如果这些域中出现显性位,则检测到格式错误。这些域包括SOF、EOF、ACK的界定符和CRC的界定符。
位流层错误检测
位错误
位流层的错误检测之一是发送到总线上的每一个数据位,都会被监视,如果发现发送的位和总线上的位不相同时,产生位错误。
这种监视机制并不会监视仲裁域的位,这是因为多个节点同时竞争总线时,优先级高的节点可能会覆写总线上的仲裁域位。
位填充规则
位流层的另外一个错误检测机制是位填充规则:5个连续相同逻辑位之后,如果第6个位的逻辑还和前五个相同,则产生位填充错误。
网络拓扑
CAN使用差分信号,需要一对信号线,推荐使用双绞线,网络拓扑如下图所示。
CAN总线网络拓扑结构图
使用差分信号可以抑制共模干扰、能够增加系统可靠性,允许使用更高的速率。
高速ISO11898标准规定了CAN传输最高速率为1Mbps,在这个速率下,传输距离最长40米(挂接30个节点,CAN信号不隔离)。推荐节点分支长度最大为0.3米、使用带屏蔽或不带屏蔽的双绞线,线缆特性阻抗为120欧姆。
终端匹配
终端匹配电阻大小等于传输电缆特性阻抗,传输电缆特性阻抗由电缆供应商提供,一般近似为:
Z=√(L/C)
其中L为电缆单位长度感抗,C为电缆单位长度电容。
由于CAN收发器结构,从隐性变成显性由晶体管驱动,所以都是很陡的,但是从显性回到隐性,却需要终端电阻来放电,否则就会由于导线分布电容,缓慢放电,导致位宽错误。
所以所谓的近距离、低波特率CAN总线不加终端电阻的做法,都是错误的。
RS485与CAN总线不同,由于RS485收发器中一般都内置失效保护电路,在近距离、低波特率下允许不加终端匹配电阻。
电缆与接线
CAN总线采用差分信号传输,如果使用带屏蔽双绞线,屏蔽层应单点接地。
带单屏蔽层的CAN电缆剖析与连接线示范
通常电缆截面积越小,其分布电容、分布电感和直流电阻越大。当通讯距离较远时,电容、电感和直流电阻会引起信号衰减,波形失真和抖动。
一般情况下,电缆供应商会提供信号衰减图表。
24-AWG电缆衰减和频率的关系
差分信号电压幅值
CAN电平幅值
如上图所示,两条信号线CAN_H和CAN_L静态时均为2.5V左右,此时状态表示逻辑1,称作隐性;CAN_H比CAN_L高表示逻辑0,称为显性,此时通常CAN_H电压3.5V、CAN_L电压1.5V。
差分电压幅值与电平极性关系
CAN标准规定,CAN总线上的差分电压>0.9V才能被识别成显性电平,<0.5V才能被识别成隐性电平,0.5~0.9之间的电平不能确定电平极性。如上图所示。
终端匹配电阻数目与差分电压幅值关系
在实际项目布线时,容易漏加或者多加终端匹配电阻。我们可以通过测量CAN差分电压幅值来评估是否漏加或多加终端匹配电阻。
如果不计导线电阻,终端电阻固定为120欧姆,单节点CAN总线差分电压如上图所示。
全部0条评论
快来发表一下你的评论吧 !