程序员开发实例大全宝库

网站首页 > 编程文章 正文

CAN总线通讯原理、报文信号解析与测量方法讲解

zazugpt 2025-03-19 18:27:28 编程文章 15 ℃ 0 评论

一、CAN总线

CAN总线应用最多的是汽车领域,CAN是Controller Area Network的首字母缩写,意思是控制器局域网。局域网(Local Area Network,简称LAN)是指在小范围内连接计算机和其他设备的网络,例如若干计*算机与路由器建立连接后,这些电脑之间就可以实现通讯。



CAN和这个也类似,这里的控制器(Controller)在汽车中的专业术语叫ECU(Electronic Control Unit,电子控制单元)。它可以看做一台超小型的计算机,它内部集成了供电系统、单片机、驱动系统,是汽车里面最小的控制模块。



为了能让ECU之间进行通讯,设计了CAN协议,CAN总线在最开始是为了减少铜线的长度而开发的。



而如果不使用CAN总线,那将使用数倍长的铜线,而且线束还非常杂乱。



而通过CAN,ECU只需要挂载到CAN总线上,就可以组成局域网通讯了,大大的减少了线束的长度。

二、CAN总线是如何通讯的?

要进行CAN通讯,需要专门的CAN收发芯片。



它的逻辑1是高电平,逻辑0是低电平,这种普通逻辑我们很好理解。



经过CAN收发器后普通信号就会转换成差分信号。差分线用两根线表示一个信号。



如果给它发一个低电平,它的两根线分别输出3.5V和1.5V,它们的电压差是2V,这是显性电平,表示逻辑0;如果给它发一个高电平,它的两根线输出的都是2.5V,压差是0V,表示逻辑1;这就是差分电平



同样的,CAN收发器也可以把接收到的差分信号转化成普通电平信号,然后在发送给单片机。



那么差分信号有什么好处呢?如果是普通信号,它只有一根线,当某一点收到干扰,它的电平就会发生跳变,这样就会导致传输出现错误,所以不能进行长距离传输。而CAN通讯采用的差分信号是两根线共同作用,而且是双绞线缠绕,这样即使是受到干扰,也是两根线同时受到干扰,他们的压差保持不变,这样就能保证传递的信息不受干扰。



三、CAN通讯到底在传递什么?



起始位:第一位是起始位,它一定得是逻辑0

识别位:接下来的11位是识别码,根据这11位的识别码就能知道这一帧信息是发给哪一个设备的。



RTR位:接下来的一位是用来区分数据帧或远程请求帧,如果是远程请求帧,这一位是1,如果是数据帧,这一位是0。

控制码:控制接下来的6位是控制码,它是控制数据长度的。第一位IDE位,用来区分标准格式和拓展格式,在标准格式中有11位识别码,IDE位是0;而在拓展格式中,它的识别码有29位,IDE位是1。



下面一位是预留位,它是逻辑0,接下来的四位是DLC位,DLC即数据长度代码,它的二进制编码是0-8。



如果DLC是1,后面的数据位只有1个字节,8位;如果它的数字是8,后面的数据位有8个字节,64位。



CRC码:接下来是16位的CRC码,即循环冗余校验位,它是为了确保数据的准确性而设置的。首先是15位CRC校验码,设备接收端会根据数据计算出它的CRC位,如果计算出来的和接收到的CRC不一致,说明数据存在问题,就会重新发送一遍数据帧。第16位是CRC界定符,它是逻辑1,目的是为了把后面的信息隔开。

ACK码:第一位是ACK确认槽,发送端发送的是逻辑1,接收端回复逻辑0来表示应答;第二位是ACK界定位,它是逻辑1,目的是为了把后面的数据隔开。

结束位:最后7位是结束位,这7位都是逻辑1,表示数据帧传输结束,这就是一串标准数据帧。

如果用差分信号表示,它的电平是这样的。



因为CAN总线上挂载了很多设备,如果是两个设备同时发送信息,此时哪一个设备发送的信息优先呢?



这就要看11位识别码,它不仅是设备的身份号码,而且还代表了优先级。当总线上同时出现逻辑0和逻辑1的时候,总线会被置为逻辑0,另一个数据就不会再发送了。



四、终端电阻

是指连接在CAN总线双绞线两端,用于改善总线通信质量和稳定性的电阻。



终端电阻的作用:

①提高抗干扰能力;

②快速从"显性"转到"隐性";(CAN总线可以看做电路,存在寄生电容,终端电阻可以快速消耗能量)



③防止数据在线端被反射。

五、CAN总线的测量

5.1 电阻值测量

(1)测试工具

a.万用表

b.示波器

(2)测试内容及方法

A.终端电阻

a.将小电池正极断开(不断小电池阻值会受影响),整车断电;

b.万用表调到电阻档200欧量程;

c.将万用表的两个表笔连接到诊断接口引脚6(CAN_H)和引脚14(CAN_L)两端,测量PCAN的电阻值,若电阻值为60±10欧,则测试通过;若电阻值为0欧,CAN_H和CAN_L短路。



5.2 电压测量

①万用表红表笔接CAN_H,黑表笔接车身搭铁或地线上。

a.U=3.0±0.5V 标准值;

b.U=0V 与地短路;

c.U>4V 与5V或12V电源短路。

①万用表红表笔接CAN_L,黑表笔接车身搭铁或地线上。

a.U=2.0±0.5V 标准值;

b.U=0V 与地短路;

c.U>4V 与5V或12V电源短路。

六、示波器CAN通信报文信号解析

①使用差分探头(设置为50倍),将差分探头的红表笔接在CAN_H,黑表笔接在CAN_L,差分探头的另一端连在示波器上。



②接好后,点到示波器通道其他设置里,先设置探头的衰减比,设置到X50,设置完成后,示波器点击AUTOSET,测到的波形为CAN总线波形。



③将波形调至合适位置,点击总线,选择总线类型为CAN总线,信号类型选择差分类型,CAN标准选择CAN2.0,通道选择所接通道,设置临界值穿过波形,显示格式设置为总线和波形。

位速率(每一个bit的速率):将时间间隔调小一点,暂停选择当前波形(一个脉冲就是一个bit),测量一个bit的时间间隔,推算出速率。

最后点运行,就可以解码出来波形上携带的信息。示波器无法显示完整的信息量时,可以选择结果表,选择总线解码,点击添加,上面可以显示它的结果表。



解码出来的数据对应于下图:



七、CAN总线报文的信号解析

ECU发出的一帧CAN报文中一般会含有多个信号:

信号分布在CAN报文的数据域中;

协议规定一帧CAN报文的数据域最多8个字节;

企业在设计报文时,一般都固定设置为8个字节。



比如100ms发送一帧CAN报文,每一次发送的这一帧CAN报文中可能有多个信号,信号是从属报文里面的,信号在数据域中。信号的本质就是一些bit,例如有a,b,c三个信号,a信号占1个bit,b信号占4个bit,c信号占3个bit。

这8个字节中每一个信号代表的含义?如何换算成真正的业务数据的值?

主机厂制定信号在数据域中的分布、信号值的换算

信号矩阵表:报文ID、报文的发送周期、信号起始位、信号位的长度、信号值的换算、单位等;

信号矩阵是车企中非常重要资源,比较保密。



CAN报文数据域&字节的二维布局(8字节):

企业信号矩阵表中的起始位怎么理解?

每一行为1个字节,每字节中有8个bit,每个格子代表一个bit。对每一个bit进行编号



报文187中车速信号的位置应该怎么布局?



为什么从车速信号从起始位40往上走?

该企业矩阵表的信号在整个数据域中的布局方式用的是MoTorola的一种字节序,它跟Intel序相反。

使用CAN工具捕获到的8个字节数据如下,为什么是90km/h呢?



06在Byte4,40在Byte5正好对应于二维布局中车速信号的位置。把16进制 00 00 00 00 06 40 00 00变为二进制,填进二维布局中。



最终怎么表示车速值呢?

根据蓝色箭头的方向,Byte4最左边的数据代表数据最高有效位(MSB),而起始位代表数据最低有效位(ISB)。换算的时候,要把它从最高有效位到最低有效位排列,就组成了二进制车速的原始值:



将二进制转化为十进制,得到的数值为1600。该车速信号存在系数和偏移量。

物理量=原始值*系数+偏移量

经计算1600*0.05625+0=90km/h

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表