CAN总线多节点通信异常分析及解决
Posted hancui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAN总线多节点通信异常分析及解决相关的知识,希望对你有一定的参考价值。
一、CAN物理层特征
CAN收发器的作用是负责逻辑电平和信号电平之间的转换。即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。
市场上常用的收发器(例如: VP230、TJA1040、TCAN337等)多为ISO 11898标准。在此标准中,对于CAN的信号逻辑1和0的产生:当CAN_H为3.5V,CAN_L为1.5V,差值为2V左右时为显性(dominant)电平表示,而两者相等为2.5V左右时为隐性(recessive)电平表示1。
可以看到上图中的当第一段为隐性,CAN_H和CAN_L电平几乎一样,也就是说CAN_H和CAN_L电平很接近甚至相等的时候,总线表现隐性的,而两线电位差较大时表现为显性的,按照定义的:
- CAN_H - CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。
- CAN_H - CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。
CAN总线采用的"线与"的规则进行总线冲裁。即1&0=0;所以0为显性。这句话隐含的意思是,如果总线上只要有一个节点将总线拉到低电平(逻辑0),即显性状态,总线就为低电平(逻辑0),即显性状态,而不管总线上有多少节点处于传输隐性状态(高电平或是逻辑1),只有所有节点都为高(隐性),总线才为高,即隐性。
CAN总线终端的两个120Ω的终端电阻的作用是使阻抗连续,消除反射。
二、CAN总线三节点通讯异常现象
测试工具:
1.PC端:利用USB转CAN模块将PC机作为一个节点挂载到CAN总线,收发器型号采用TI公司的VP230;
2.ECU:此处使用TI公司的MSP432单片机,由于其电路板没有CAN收发器,所以此处外接收发器VP230;
3.ARM开发板:开发板上已经内嵌了两个CAN通道,收发器采用的是恩智浦的TJA1040。
问题1:ARM用户板(节点1,收发器:tcan337)与ECU(节点2,收发器:vp230)两节点可以正常进行CAN通信,但是当总线上加入第3个节点PC端(节点3,USB转CAN模块,收发器:vp230)后,通信出现异常,节点1和节点3均可以正常发送和接收总线数据,但是节点2可以收到总线数据,却无法发送数据。
针对问题1,使用ARM开发板、ECU、PC分别进行了两节点测试和三节点测试,测试结果证明,PC与ARM、ECU之间的两节点通信均无任何问题;使用两个PC端与ARM、ECU之间分别构成3节点通信也均正常;使用ARM开发板上的两个CAN通道与PC端构成3节点通信也正常;使用两个ECU与PC构成3节点通信也正常。但是,当ARM开发板与ECU同时挂载到CAN总线上时,就会出现通信异常。
问题2:ARM开发板(节点1,收发器:TJA1040)与MCU(节点2,收发器:vp230)两节点进行CAN通信时,节点1发送一次数据后,总线将一直处于占用状态,此后节点1无法发送和接收总线数据,而节点2将一直读取总线数据。
问题3:当PC与ECU两节点通信时,通信正常,但是当总线接入关机状态下的ARM开发板时,总线通信出现异常,ECU将无法收到来自PC端的数据;而当总线接入工作状态下的ARM开发板时,总线异常情况与问题1相同。
三、CAN总线三节点通信异常问题成因分析与解决措施
通过了解CAN物理层特征可知,CAN_H、CAN_L在隐性状态时的对地电压均为2.5V左右,经实际测量, ARM端CAN总线隐性对地电压约为2.3V,PC端CAN总线隐性对地电压约为2.2V,而ECU端CAN总线的隐性对地电压约为1.5V,由于总线电压的差异,CAN总线的对地电压被强制拉低,导致CAN控制器无法正常识别总线数据。
当ECU端的收发器VP230的供电由3.3V更改为5V后,其总线隐性对地电压约等于2.3V,此时ARM、ECU、PC间的任意两节点、三节点通信均正常。
四、CAN总线4、5节点通信测试
为了进一步了解多节点CAN总线通信,将总线上的节点数增加至4节点和5节点,在实际测试中,利用ARM开发板上的2个CAN通道(NXP公司的TJA1040收发器)、2个 USB转CAN模块(TI公司的VP230)、1个ECU(TI公司的VP230)分别进行了各式组合,构成4节点CAN通讯均正常,但是任意5节点通信均出现异常情况,分别由各个节点发送数据,总存在一些节点无法接收到数据。
通过对CAN总线的物理层分析,认为造成这种现象可能有两个原因,一是不同型号的CAN收发器之间通信匹配的问题,二是CAN总线的驱动能力不足造成的。
为了进一步验证上述问题,利用两块ARM开发板上4个CAN通道(NXP公司的TJA1040收发器)进行测试,测试结果发现3个CAN通道可正常通信,但是4节点出现通信异常,异常现象和5节点通信时的问题相同。
由此分析可知,不同收发器的驱动能力会有一些差异,但是这并不是造成此现象的原因。而对CAN总线物理层结构特性进一步了解,总线需要在终端连接两个120欧电阻,但是通过对所有测试点的电路检测可知,每个节点收发器的CAN_H与CAN_L之间均连接了1个120欧电阻,而CAN通信时仅需在总线终端各加1个电阻即可。
将总线中多余的120欧电阻去掉,而只保留两个节点的电阻,通过测试发现,此时的4节点、5节点通信均正常。
那为什么只在物理上最远的两个节点加这个匹配电阻,而不是在所有的节点都加上匹配电阻?
高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。对于低频信号则不用。
CAN总线两端必须连接终端电阻才可以正常工作,终端电阻应该与通讯电缆的阻抗相同,典型值为120欧姆。终端电阻的作用,一方面就是吸收信号反射及回波,而产生信号反射的最大来源便是阻抗不连续以及不匹配。另一方面,如果是加在单独的两根线上,相当于一个开环的状态,根据产生信号反射的来源,也就是说这种连接方式会导致单线上阻抗更加不连续,在末端突然变为0,会导致反射成倍增加。高速CAN所加的两个120欧的电阻实际上模拟的是线束连接无穷远的时候在传输线上产生的特性阻抗(而不是实际阻抗),这是个典型经验值,具体值取决于所采用的线束类型。CAN低速之所以不加终端电阻,是因为不同的频率时,同样的连接方式所产生的信号反射和回波差异很大,频率越高,反射和回波就会越强烈。另外不同的频率下,传输线的特性阻抗是不同的。第三方面,当一个显性位发送到至少包含一个CAN驱动处于开启状态的网络上时,意味着有电流经过终端电阻,因此,CAN_H和CAN_L具有了不同的电压值。也就是说,在显性状态时,终端电阻会稳定并增强差分电压,当去掉一个或两个终端,通过示波器可以明显看到一是信号不稳,二是差分电压会有变化,缺少终端或没有终端电阻时所测到的电压是单纯由CAN驱动器所产生的,离发送端越远,电压差异越大。
以上是关于CAN总线多节点通信异常分析及解决的主要内容,如果未能解决你的问题,请参考以下文章