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 终端电阻的测量方法
怎么测终端电阻?很简单,但要注意方法。
- 断电测量:把总线上的所有节点断电,用万用表电阻档测CAN_H和CAN_L之间的电阻。
- 正常值:如果总线两端各有一个120Ω电阻,测出来应该是60Ω(两个120Ω并联)。
- 异常值:
- 测出120Ω:说明只有一个终端电阻,缺一个。
- 测出40Ω:说明有三个或更多终端电阻并联。
- 测出0Ω:说明CAN_H和CAN_L短路了。
- 测出无穷大:说明总线断路,或者终端电阻都没接。
实战经验:我建议你在项目调试阶段,每次连接新节点之前,先量一下总线电阻。养成这个习惯,能省掉大量排查时间。有一次我在现场,客户说通信时好时坏,我上去一量——电阻在60Ω和120Ω之间跳变,最后发现是一个节点的CAN接口接触不良,导致终端电阻时接时不接。
1.5 知识结构总览
下面这张图把CAN物理层的核心知识点串起来了,你可以对照着理解整个体系。
1.6 常见物理层故障速查
最后,我把自己这些年踩过的坑整理成一张表,你调试的时候可以直接对照排查。
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 通信完全中断 | CAN_H/CAN_L短路、总线断路、缺少终端电阻 | 万用表测CAN_H与CAN_L电阻,正常应为60Ω |
| 通信时断时续 | 终端电阻接触不良、线缆过长、节点过多 | 示波器看波形,检查上升沿/下降沿是否平滑 |
| 总线锁死 | 某个节点一直发显性位、收发器损坏 | 逐个拔节点,测CAN_H/CAN_L静态电压 |
| 通信距离短 | 终端电阻位置不对、线缆阻抗不匹配 | 确认终端电阻在总线最远端,检查线缆规格 |
| 误码率高 | 共模干扰大、地电位差大、屏蔽层接地不良 | 用差分探头测CAN_H与CAN_L波形,看共模电压 |
我的习惯:每次搭建CAN网络,第一件事就是量终端电阻。60Ω,确认无误再上电。这个习惯帮我省了至少几十个小时的排查时间。你也不妨试试。