物理层基础:差分信号、电平定义与终端电阻

各位同学,咱们今天聊聊CAN总线的物理层。说实话,很多工程师做CAN开发好几年,遇到总线通信异常时,第一反应还是去查软件。但我个人的经验是——八成以上的CAN通信问题,根源都在物理层。

物理层搞懂了,你排查故障的思路会清晰很多。咱们从最核心的差分信号讲起。

为什么CAN要用差分信号?

你想想看,汽车里是什么环境?发动机点火、电机启停、各种继电器吸合……电磁干扰(EMI)简直是无处不在。如果CAN像UART那样用单端信号(一根信号线对地),干扰信号叠加在线上,接收端根本分不清原始电平。

差分信号就不一样了。它用两根线——CAN_H和CAN_L——来传输一路信号。发送端让这两根线上的电压变化方向相反,接收端只看它们的差值。

核心公式:Vdiff = VCAN_H − VCAN_L

外部干扰同时叠加在两根线上,差值基本不变。这就是差分信号的抗干扰能力。

我记得有一次在台架上调试,发动机一启动,CAN通信就丢帧。示波器一挂上去,发现CAN_H和CAN_L上都有明显的共模噪声,但差分波形依然干净。嗯,这就是差分信号的价值。

CAN_H与CAN_L的电平定义

CAN总线定义了两种总线状态:显性(Dominant)和隐性(Recessive)。咱们直接看电平值:

状态 CAN_H电压 CAN_L电压 差分电压
隐性(逻辑1) 2.5 V 2.5 V ≈ 0 V
显性(逻辑0) 3.5 V 1.5 V ≈ 2 V

说白了,总线空闲时,两根线都维持在2.5V,差分电压接近0,这叫隐性。当某个节点要发送数据时,它把CAN_H拉到3.5V,CAN_L拉到1.5V,产生约2V的差分电压,这叫显性。

避坑指南:我曾经遇到过一批ECU,在低温环境下CAN_H电压只有3.2V,CAN_L却有1.8V。差分电压只有1.4V,低于接收器的阈值(通常1.2V左右),导致通信时断时续。排查了三天,最后发现是收发器的参考电源精度不够。所以,别只看逻辑,要测实际电平。

显性电平与隐性电平的仲裁机制

这里有个关键点:显性电平会覆盖隐性电平。

为什么?因为CAN总线是“线与”逻辑。多个节点同时发送时,只要有一个节点输出显性(CAN_H高、CAN_L低),总线就被拉成显性。隐性状态只有在所有节点都输出隐性时才成立。

这个特性直接支撑了CAN的无损位仲裁机制——多个节点同时发送,ID小的节点(显性位更多)赢得总线控制权。咱们后面章节会细讲,但物理层是基础。

总线终端电阻的作用

终端电阻,通常是120Ω,放在CAN总线的最两端。为什么需要它?

  1. 消除信号反射:高速信号在总线末端如果遇到阻抗突变,会产生反射,导致波形畸变。120Ω匹配了CAN总线的特征阻抗(约120Ω),吸收能量,防止反射。
  2. 提供差分负载:显性状态下,收发器需要驱动电流流过终端电阻来产生差分电压。没有终端电阻,显性电平根本建立不起来。
  3. 确定隐性电平:终端电阻配合收发器的偏置电路,把总线维持在2.5V的隐性电平。

重要提醒:终端电阻必须且只能放在总线的最两端。我见过有人把两个120Ω电阻都放在同一个节点上,结果总线中间节点信号反射严重,通信距离直接砍半。正确的做法是:总线两端各一个120Ω电阻,中间节点不加。

如果你用示波器测量CAN_H和CAN_L之间的电阻(总线断电时),正常值应该是60Ω左右——因为两个120Ω并联。如果测到120Ω,说明只有一个终端电阻;如果测到接近0Ω,说明有短路;如果测到无穷大,说明电阻开路或总线断开。

知识结构总览

下面这张图把物理层的核心逻辑串起来了:

CAN物理层核心知识结构 差分信号传输 CAN_H / CAN_L 电平 显性 vs 隐性 终端电阻 120Ω 隐性:2.5V / 2.5V 显性:3.5V / 1.5V 显性覆盖隐性 线与逻辑 消除反射 提供负载 关键测量验证 总线断电时测 CAN_H 与 CAN_L 之间电阻 → 正常约 60Ω 总线工作时测差分电压 → 隐性 ≈ 0V,显性 ≈ 2V

实际项目中的几个要点

  • 终端电阻位置:用万用表量一下总线两端的电阻,确认是60Ω。如果只有一端有120Ω,赶紧补上。
  • 共模电压范围:CAN收发器通常支持-2V到+7V的共模电压(ISO 11898-2)。在强干扰环境下,共模电压可能漂移,导致收发器失效。我建议在CAN_H和CAN_L对地各加一个100nF的电容,滤除高频共模噪声。
  • 线缆选择:双绞线是必须的,绞距越密,抗干扰越好。我习惯用AWG 22或AWG 24的屏蔽双绞线,屏蔽层单点接地。
  • 节点数量:标准CAN最多支持110个节点(取决于收发器驱动能力)。节点越多,总线负载越重,终端电阻可能需要调整。但一般项目里,30-50个节点很常见,120Ω标准电阻完全够用。

个人习惯:每次做CAN网络设计,我都会先画一张物理拓扑图,标出每个节点的位置、终端电阻的位置、线缆长度。然后拿着万用表和示波器去实车验证一遍。别嫌麻烦——物理层的问题,越早发现,成本越低。

好了,物理层的基础就这些。差分信号、电平定义、显性隐性、终端电阻——这四个概念是CAN总线的地基。地基稳了,后面的协议解析、网络管理、诊断通信才能立得住。