1. CAN总线物理层基础:差分信号、CAN_H/CAN_L电平特性、终端电阻作用与测量方法

各位同学,咱们今天聊点实在的。CAN总线物理层,说白了就是信号在线上怎么跑、怎么不跑偏的问题。我刚开始接触CAN的时候,总觉得物理层嘛,不就是两根线加个电阻?结果第一次在现场排查故障,示波器一挂上去,波形乱七八糟,折腾了一下午才发现是终端电阻焊错了位置。嗯,从那以后我再也不敢小看物理层了。

1.1 为什么CAN要用差分信号?

你想想看,汽车发动机舱里,火花塞点火、发电机整流、各种电机启停,电磁干扰多得跟过年放鞭炮似的。要是用单端信号(一根信号线加一根地线),干扰一上来,电平一抖,数据就全乱了。

CAN总线用的是差分信号——两根线,CAN_H和CAN_L,信号靠它们之间的电压差来传递。干扰来了?没关系,两根线上感应的噪声基本一样,一相减,噪声就抵消了。这就是差分信号的抗干扰能力。

核心要点:差分信号传递的是电压差,不是绝对电压。干扰是共模的,差分是差模的,共模干扰不影响差模信号。

我在一个农机项目上遇到过,CAN线跟大功率电机线绑在一个线束里走了三米,单端信号早就废了,但CAN通信愣是没丢一帧数据。差分信号,就是这么硬气。

1.2 CAN_H和CAN_L的电平特性

CAN总线有两种逻辑状态:显性(Dominant)和隐性(Recessive)。这个命名很有意思——显性就是“我说了算”,隐性就是“大家都不说话”。

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

注意看,隐性状态时两根线都是2.5V,差分电压为0。显性状态时CAN_H拉到3.5V,CAN_L拉到1.5V,差分电压2V。这就是CAN收发器干的事——把逻辑电平翻译成总线电平。

调试小技巧:用万用表测CAN_H和CAN_L对地电压,如果总线空闲,两根线都应该在2.5V左右。如果CAN_H只有2.0V、CAN_L有3.0V,说明总线被某个节点一直拉着显性——这就是常见的“总线锁死”故障。

为什么会锁死?我遇到过一回,某个ECU的CAN收发器坏了,TX引脚一直输出低电平,收发器就一直发显性位,其他节点根本抢不到总线。拔掉那个节点,通信立刻恢复。排查这种问题,万用表量一下CAN_H和CAN_L的静态电压,基本就能定位。

1.3 终端电阻——为什么是120Ω?

终端电阻,说白了就是防止信号反射的。信号在线上跑,遇到阻抗不连续的地方就会反射,反射波跟原信号叠加,波形就畸变了。CAN总线要求线缆的特性阻抗是120Ω,所以在总线两端各接一个120Ω电阻,让信号走到头被吸收掉,不反射回来。

我个人的习惯是:终端电阻必须接在总线的最远两端,不是随便找个地方焊上去就行。曾经有个同事,为了省事,把两个120Ω电阻并排焊在了一个节点上,结果信号反射得一塌糊涂,通信距离从500米缩到了不到50米。

重要提醒:终端电阻不是匹配电阻,是吸收电阻。它的作用是让信号能量在终端被消耗,而不是反射回总线。所以位置比阻值更关键——必须放在物理拓扑的最远端。

1.4 终端电阻的测量方法

怎么测终端电阻?很简单,但要注意方法。

  1. 断电测量:把总线上的所有节点断电,用万用表电阻档测CAN_H和CAN_L之间的电阻。
  2. 正常值:如果总线两端各有一个120Ω电阻,测出来应该是60Ω(两个120Ω并联)。
  3. 异常值:
    • 测出120Ω:说明只有一个终端电阻,缺一个。
    • 测出40Ω:说明有三个或更多终端电阻并联。
    • 测出0Ω:说明CAN_H和CAN_L短路了。
    • 测出无穷大:说明总线断路,或者终端电阻都没接。

实战经验:我建议你在项目调试阶段,每次连接新节点之前,先量一下总线电阻。养成这个习惯,能省掉大量排查时间。有一次我在现场,客户说通信时好时坏,我上去一量——电阻在60Ω和120Ω之间跳变,最后发现是一个节点的CAN接口接触不良,导致终端电阻时接时不接。

1.5 知识结构总览

下面这张图把CAN物理层的核心知识点串起来了,你可以对照着理解整个体系。

CAN总线物理层知识结构 CAN物理层 差分信号传输 CAN_H / CAN_L 电平 终端电阻匹配 抗共模干扰 电压差传输 显性 / 隐性 2.5V / 3.5V / 1.5V 120Ω × 2 = 60Ω 共模噪声抵消 → 信号完整 总线仲裁:显性位覆盖隐性位 消除信号反射 调试核心:万用表测静态电压 + 测终端电阻 = 快速定位物理层故障 CAN_H≈2.5V / CAN_L≈2.5V → 总线空闲;CAN_H≈3.5V / CAN_L≈1.5V → 显性占用

1.6 常见物理层故障速查

最后,我把自己这些年踩过的坑整理成一张表,你调试的时候可以直接对照排查。

故障现象 可能原因 排查方法
通信完全中断 CAN_H/CAN_L短路、总线断路、缺少终端电阻 万用表测CAN_H与CAN_L电阻,正常应为60Ω
通信时断时续 终端电阻接触不良、线缆过长、节点过多 示波器看波形,检查上升沿/下降沿是否平滑
总线锁死 某个节点一直发显性位、收发器损坏 逐个拔节点,测CAN_H/CAN_L静态电压
通信距离短 终端电阻位置不对、线缆阻抗不匹配 确认终端电阻在总线最远端,检查线缆规格
误码率高 共模干扰大、地电位差大、屏蔽层接地不良 用差分探头测CAN_H与CAN_L波形,看共模电压

我的习惯:每次搭建CAN网络,第一件事就是量终端电阻。60Ω,确认无误再上电。这个习惯帮我省了至少几十个小时的排查时间。你也不妨试试。