谈谈CAN总线

随笔4周前发布 冰冰
21 0 0

CAN总线是汽车领域广泛使用的一种总线。汽车上的各种电子设备通过CAN总线实现互相之间的通讯。汽车上的大部分数据都通过CAN总线传输,因此通过采集CAN总线的数据,可以掌握车辆的故障信息,甚至故障原因。而且诊断仪等专用诊断设备,也是通过特殊的CAN数据,来对车辆进行诊断,因此掌握CAN总线是非常必要的。在CAN总线的基础上衍生出了1939,OBD,UDS等协议类型,但这些协议都是基于CAN的细分,因此CAN总线是一切其他车用协议的基础。

 

知识点1. 汽车上的设备如何通过CAN总线相连

CAN总线采用两根信号线完成连接,这两根信号线被称为CANH和CANL,根据这两根信号线之间的电压差的不同,来确定总线上的数据。正常情况下,CANH和CANL的电压会在2.5V附近,当CAN总线上有数据的时候,CANH和CANL的电压是波动的,因此通过万用表去测量电压,会看到电压值在跳动。

CAN总线属于网络总线,也就是说,一根信号线上可以挂接许多电子设备,电子设备只要把自己的CANH和CANL引脚连接到总线上,就可以和总线上其它设备通讯。CAN总线在车上的布局可以用下图来表示:

谈谈CAN总线

图中SG1,SG2表示总线上的电子设备,可以看到,许多电子设备仅通过一条CANH和一条CANL连接在一起。我们注意到图上在左右两侧各有一个120欧姆电阻,这两个电阻需要安装在整个总线中距离最远的两个设备上,目的是提高CAN总线的抗干扰能力和传输可靠性。这两个电阻具体安装在哪个电子设备上,需要根据整车线束的情况来确定。

整车CAN总线除了连接车上的电子设备之外,也会将CANH和CANL接口引出到驾驶舱,这样就可以通过将检测设备连接到驾驶舱的CAN接口,来读取电子设备发出的总线报文,从而进行故障诊断。

 

知识点2. CAN总线的报文

电子设备通过CAN总线传输的数据叫做CAN报文,也叫CAN帧。CAN报文有这么几个参数:波特率,传输频率,帧ID,数据。

帧ID和数据,每一个CAN报文大体上由两部分组成,一部分叫做帧ID,一部分叫做数据。除去这两个部分外,CAN报文还有其余部分,但这些不需要我们关心。

帧ID位于数据之前,分为标准帧和扩展帧,标准帧的帧ID由11bit组成,扩展帧的帧ID由29bit组成,反映到总线采集软件上(如CANTEST),是8个16进制数,目前车用的设备均采用扩展帧。帧ID表征了CAN报文的种类,发送设备等信息,每一种CAN报文都有一个唯一的帧ID。数据采集软件可以根据帧ID选择只接收特定ID的帧,这样为故障排查提供方便。

数据是CAN报文中具体的信息,最多包含8个字节,不同的CAN报文中的数据有不同的含义,通过查阅厂商提供的CAN报文文档,就能知道数据的具体含义。

波特率:指的是CAN总线的基本速率,可以类比成我们家用宽带的带宽,有10M, 100M等等。但是CAN的波特率比较低,我们的产品的波特率是250k和500k。在进行CAN数据采集之前,需要设定正确的波特率,才能采集到数据。

传输速率:CAN报文大部分是周期定时发送的,每个CAN报文都有自己的发送周期,例如我们的喷射报文18ffdf00,它的发送周期是200ms。也就是说每隔200ms就会在总线上采集到一个18ffdf00。根据这个原理,我们的产品和ECU可以判断通讯故障,例如我们已知PCU反馈给DCU的报文18ffde3d的周期也是200ms,那么在对于DCU来说,收到上一个18ffde3d后,再等待200ms,如果没有新的18ffde3d报文出现,那么DCU就可以认为出现了通讯故障。

 

知识点3.  CANTest的使用

3.1 软件基本操作

CANTest是用来采集总线报文的软件,建议使用最新版本,其基本用法比较简单,打开软件后,选择所使用的CAN设备,并设置好波特率后,就可以进入采集界面。

谈谈CAN总线

谈谈CAN总线

谈谈CAN总线

谈谈CAN总线

 

点击左上角的“启动”按钮,此时可以在屏幕上看到总线上传输的报文,点击“停止”按钮后,报文便不再刷新显示。采集完成后,点击“保存”按钮,便可以将采集的全部报文保存为txt文件。

默认情况下,CANTest总共可以采集3000条报文,对于长时间跟车试验来说,3000条报文数量过少,因此需要增加采集报文数量,这时需要点击“显示帧数”按钮,点击该按钮后,会弹出一个对话框,可以修改采集的报文数量。

3.2 滤波设置

默认情况下,CANTest会采集总线上所有的报文,但如果我们仅仅需要观察其中的某一个报文,这时就需要对报文ID进行滤波。点击左上方的“滤波设置”按钮,会弹出滤波设置对话框,在滤波模式选择中,选择“扩展帧 单滤波(仅ID,自由设定)”。接下来根据需要采集的报文ID,设置滤波器。

谈谈CAN总线

“滤波器”是按照二级制的方式对帧ID进行过滤,滤波其中的ID28~ID00分别表示帧ID的高位至低位,通过点击设置区的按钮,可以让该位的滤波器过滤1,0或X,X表示不过滤,如果ID28~ID00全部设为X(默认状态),那么表示接收总线上的全部报文。

如果我们想要只接收18ffde3d报文,需要按如下步骤:

1. 将18ffde3d转化为二进制11000111111111101111000111101

2. 按照二进制的数据,从ID00开始点击设置区按钮,设置完毕如下图

谈谈CAN总线

 

3. 点击确定,此时软件中仅会出现18ffde3d报文

如果我们想同时检测两种或多种报文,则需要用到设置区的X功能,例如,我们想要同时观测18ffde3d和18ffdf00,那么我们需要按如下步骤

1. 将需要观测的两个报文均转化为二进制

   11000111111111101111000111101 18ffde3d

   11000111111111101111100000000 18ffdf00

2. 对于两个报文中相同的位,设置为相应的1或0,对于两个报文中不相同的位,设置为X。设置结果如下:

谈谈CAN总线

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...