1. CAN总线基础与物理层信号特性

各位工程师朋友,咱们直接进入正题。CAN总线这东西,搞嵌入式的基本都绕不开。但说实话,很多人调了一两年CAN,遇到丢包还是只会抓波形、看ID、数CRC。物理层那点事儿,反而成了最容易被忽略的坑。

我个人习惯是,不管上层协议多复杂,先把手伸到物理层摸一遍。因为CAN总线80%的疑难杂症,根子都在差分信号和终端电阻上。你信不信?

1.1 差分信号:为什么CAN要用两根线?

CAN总线用两根线——CAN_H和CAN_L——传输一个信号。这不是浪费引脚,而是为了抗干扰。

说白了,差分信号就是“你高我低,你低我高”。发送端把逻辑1和0变成一对相反的电压,接收端拿CAN_H减去CAN_L,得到差分电压Vdiff。外部噪声同时耦合到两根线上,一减就抵消了。这就是共模抑制。

关键指标:

  • 显性位(逻辑0):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,Vdiff ≈ 2.0V
  • 隐性位(逻辑1):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,Vdiff ≈ 0V

我在项目里遇到过一件事:某次整车CAN通信间歇性丢包,示波器一挂,发现CAN_H波形正常,CAN_L波形上有个0.3V的毛刺。一查,是线束接头处CAN_L的压接端子松了。差分信号的优势,恰恰成了它的软肋——只要一根线出问题,整个通信就崩。

我的调试习惯:遇到丢包,先不急着看协议栈。拿万用表量一下CAN_H对地、CAN_L对地、CAN_H对CAN_L的电阻。三组数据能告诉你80%的物理层问题。

1.2 CAN_H/CAN_L电平标准:别被“5V”骗了

很多人以为CAN是5V逻辑,其实不是。CAN总线是“差分电压逻辑”,不是“对地电压逻辑”。

咱们来看ISO 11898-2标准定义的显隐性电平:

信号状态 CAN_H电压 CAN_L电压 差分电压Vdiff 逻辑值
显性(Dominant) 3.5V 1.5V 2.0V 0
隐性(Recessive) 2.5V 2.5V 0V 1

注意:显性位“覆盖”隐性位。也就是说,只要有一个节点发送显性位,总线就是显性。这是CAN总线仲裁的基础——谁先发0,谁赢。

嗯,这里要注意一个坑:有些廉价CAN收发器,在空载时CAN_H和CAN_L的共模电压会漂。我见过一个案例,某国产收发器隐性时CAN_H只有2.3V,CAN_L有2.7V,差分电压-0.4V。虽然理论上还是隐性,但接收器的阈值裕量被吃掉了,长距离传输就容易误判。

避坑指南:我曾经因为收发器选型不当,导致总线在高温下频繁丢包。后来换成TI的SN65HVD230,问题解决。收发器的共模输入范围、延迟时间、驱动能力,这三个参数一定要看datasheet。

1.3 终端电阻:为什么必须是120Ω?

终端电阻的作用,说白了就两个:

  1. 阻抗匹配——防止信号反射
  2. 提供回流通路——让显性位有足够的电流

CAN总线的特性阻抗大约是120Ω(双绞线)。根据传输线理论,如果终端电阻不等于特性阻抗,信号到达末端就会反射回来,叠加在原信号上,造成波形畸变。畸变严重了,接收器就会误判位电平,丢包就来了。

为什么是120Ω?因为CAN总线设计时,双绞线的特性阻抗就定在120Ω左右。你想想看,如果换成50Ω或者1kΩ,反射系数就不是0了,波形会变成什么样?

终端电阻的黄金法则:

  • 标准CAN(1Mbps以下):总线两端各一个120Ω电阻
  • 低速CAN(125kbps以下):可以只用单端电阻,但我不建议
  • CAN FD(更高速度):终端电阻必须精确,甚至要用可调电阻

我遇到过最典型的故障:一个节点内部已经焊了120Ω终端电阻,但设计者不知道,又在总线两端各加了一个120Ω。结果三个电阻并联,等效电阻只有40Ω。显性位时电流过大,收发器过热保护,通信时断时续。查了两天才找到原因。

快速检查方法:断电状态下,用万用表量CAN_H和CAN_L之间的电阻。如果总线两端各有一个120Ω,且没有其他负载,你应该量到60Ω。如果量到120Ω,说明只有一端有电阻;如果量到40Ω,说明有三个电阻并联。这个数值能帮你快速定位终端电阻配置问题。

1.4 知识结构总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作调试时的检查清单。

CAN总线物理层知识结构图 CAN总线物理层核心知识结构 差分信号 CAN_H/CAN_L电平 终端电阻 共模抑制 抗干扰强 显性/隐性 仲裁机制 阻抗匹配 防反射 调试检查清单 ① 量CAN_H对地 ② 量CAN_L对地 ③ 量CAN_H对CAN_L电阻 ④ 挂示波器看差分波形 万用表初检 示波器抓波形 定位故障点 调试流程:从万用表到示波器,逐步缩小故障范围 电阻/电压 波形/时序 根因分析 物理层健康 → 数据链路层稳定 → 应用层可靠

1.5 本章小结

物理层是CAN总线的地基。差分信号给了你抗干扰能力,但也要求两根线必须同时健康。终端电阻看似简单,但配置错了就是灾难。电平标准你得记牢,示波器上一眼就能看出显隐性是否正常。

我个人建议,每次拿到一个新项目,先花10分钟把CAN物理层测一遍。这10分钟,能帮你省下后面几天的调试时间。你想想看,是不是这个道理?