简单地讲 CAN 总线就如上图中两根粗黄线,其通讯原理:好比开一个电话会议,要保证这个电话会议的有序高效地进行,那么我们需要有一些约定俗成的规定或协议,大家都遵守。
汽车上之所以大量使用 CAN 总线通讯,是因为 CAN 通讯具有以下优势:
-
简单且成本低:ECU 通过单个 CAN 系统进行通讯,而不是直接复杂的模 拟信号线通讯,减少了错误、重量、接线和成本。
-
完全集中:CAN 总线提供了一个进入点们可以于所有网络 ECU 进行通讯 ——支持集中真的,数据记录和配置。
-
极其坚固:CAN 总线具有强大的抗电干扰和电磁干扰能力,非常适合对安 全要求严格的应用(例如车辆)
-
非常高效:通过 ID 对 CAN 帧进行优先级排序,以便有些级最高的数据可 以立即访问总线而不会引起其他帧的中断)
通讯协议 ISO-11898:2003 标准介绍网络上的设备间信息是如何传递的,以及符合开放系统互联参考模型(OSI)的哪些分层项。
实际通讯是在连接设备的物理介 质中进行,物理介质的特性由模型中的物理层定义。ISO11898 体系结构定义七层, OSI 模型中的最低两层作为数据链路层和物理层。
CAN 总线协议是一种 ISO 国际标准化的串行通信协议,有 ISO-11898 和 ISO-11519 两个系列:
-
ISO-11898 定义了通信速率为 125 kbps ~1Mbps 的高速 CAN 通信标准, 属于闭环总线,传输速率可达 1Mbps,总线长度 ≤ 40 米。
-
ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于 开环总线,传输速率为 40kbps 时,总线长度可达 1000 米。
两种 CAN 总线结构都由各个电控节点 CAN 收发器、数据传输终端 以及数据传输线组成。其中 CAN_H 和 CAN_L 线是以双绞形式缠绕,每个节点都有 CAN 收发器和 CAN 控制器,CAN 收发器和 CAN 控制器可能集成在芯片,也可能是独立于芯片。
要传递数据信息,我们通常采用十进制来表达,对应的在 CAN 总线上,采用二 进制表达,CAM 信号表现为电压形式,通过 CAN_H 和 CAN_L 线上的电位差来表示 CAN 信号,分为显性电平和隐性电平两种类型,具体解析规则如下:
-
CANH 与 CANL 线压差小于 1.5V 以下,认为是隐性电平,为逻辑 1
-
CANH 与 CANL 线压差在 1.5V-2.5V 范围,认为是显性电平,为逻辑 0
当 CAN_H 和 CAN_L 的电压均为 2.5v,两者电压差为 0,就规定 CAN 信号为隐性电平;当 CAN_H 的电压为 3.5v,CAN_L 的电压为 1.5v,两者电压 差为 2V,就规定 CAN 信号为显性电平。
CAN 总线是一种广播类型的总线,可支持线形拓扑、星形拓扑、树形拓扑和环形拓扑等。CAN 网络中至少需要两个节点设备才可进行通信,无法仅向某一个特定节点设备发送消息,发送数据时所有节点都不可避免地接收所有流量。但是,CAN 总线硬件支持本地过滤,因此每个节点可以设置对有效的消息做出反应。
在不破线情况通常可以从 OBD 口采集整车数据,商用车通用 ODB 定义:
CAN 故障概述 正常情况下,当 CAN 总线唤醒后,CANH 对地电压约为 2.656V,CANL 对地 电压约为 2.319V,而且两者相加为 4.975V
CAN 通讯故障主要是指 CAN 网络中某个或多个节点数据传输异常,控制器之 间无法正常通讯。
由于 CAN 网络节点中众多,当出现 CAN 通讯故障时往往会出现 多种奇怪的故障现象,如仪表板显示异常,车辆无法启动,启动后无法熄灭,车辆 动力性能下降,某些电控系统功能失等。这是因为相关数据或信息是通过CAN总线传输的,如果传输失败,那么会产生多种连带故障,甚至造成整个网络系统瘫痪。
CANH 和 CANL 短路故障
故障现象:当 CAN H 与 CAN L 短路时,CAN 网络会关闭,无法再进行通信,CAN 电压 电位置于隐性电压值(约 2.5V)。实际测量两条 CAN 导线的电压,会发现始终在 2.5V 左右,基本不变化,波形及电压如下所示。
故障排除方法:通过插拔 CAN 总线上的控制模块(节点),可以判断是由节点引起的短路还是 导线连接引起的短路。再逐个断开节点,若电压恢复正常,则说明该节点有问题。若断开所有节点后电压还没有变化,则说明线路短路。
CANH 对电源短路故障
故障现象:当出现 CAN H 对电源(正极)短路这种故障时,根据 CAN 总线的容错特性, 可能出现整个 CAN 网络无法通信的情况,以对 12V 电源短路为例,此时 CAN H 电 压电位被置于 12V,CAN L 线的隐性电压被置于大约 12V。
故障排除方法:如果不是 CANH 导线对外部电源短路引起的,那么这种故障就有可能是控制模 块内部的 CAN 收发器损坏造成的。通过插拔 CAN 总线上的每个控制模块(节点), 可以判断是由节点引起的还是导线连接引起的。再逐个断开节点,若电压恢复正常, 则说明该节点有问题。若断开所有节点后电压还没有变化,则说明线路短路。