网站首页 > 编程文章 正文
一、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
猜你喜欢
- 2025-03-19 使用拷贝机如何确认数据正确?(使用拷贝机如何确认数据正确性)
- 2025-03-19 从今天起,你就是CAN专家!(从今天起你就是我的darling)
- 2025-03-19 8 校验码(校验码百科)
- 2025-03-19 变频器的Modbus通讯控制(一)(变频器modbus地址计算)
- 2025-03-19 正点原子STM32F4/F7水星开发板资料连载第三十四章 CAN 通讯实验
- 2025-03-19 物联网设备的固件远程升级方案以及软件代码
- 2025-03-19 欧姆龙CJ2M PLC使用SCU模块与温控器实现协议宏通讯
- 2025-03-19 CRC-16-modbus循环校验方法(modbus crc校验错误怎么处理)
你 发表评论:
欢迎- 最近发表
-
- 90岁老人科目三一把过火爆网络!考驾照、爱美甲……这群“90后”比年轻人潮
- DNF:遗忘之地任务流程,适用于新手起小号,装备修理白漂
- dnf手游:“首款流拍宝珠”,6位玩家眼睁睁看着500万泰拉丢失!
- dnf手游:小熊卡正式升级!可附魔到工会勋章,千万别卖!
- dnf手游:首张“涨抗魔”粉卡火了!以前3万没人要现在准备断货!
- dnf手游:团本币增加!3月26号打团有坑提前避开,浪费门票?
- dnf手游:涨价20倍!曾经没人要的,如今已是妥妥的T0材料!
- dnf手游:“官方鼓励回归”火了,白送玩家+20装备和王子卡等!
- dnf手游:无根之源千万别用!竞拍系统一定要抢否则错过崛起机会
- dnf手游:DNF手游各职业技能加点攻略、装备推荐!小白一看就会
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)