2、CAN物理层:差分信号原理、CAN_H和CAN_L、终端电阻的作用、总线拓扑结构

大家好,我是你们的CAN总线讲师。今天咱们来聊聊物理层。说实话,很多工程师学CAN,上来就啃协议栈,结果遇到信号干扰、通信失败,一脸懵。我个人的经验是:物理层搞不明白,上层协议再熟也白搭。这一章,咱们就把CAN的“地基”打牢。

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

先问大家一个问题:汽车发动机舱里,电磁干扰有多强?火花塞点火、电机转动、大电流开关……那环境,简直就是个“电磁炉”。普通的单端信号(比如UART的TX/RX),在这种环境下很容易被干扰,数据就错了。

CAN总线用的不是单端信号,而是差分信号。说白了,就是一对线(CAN_H和CAN_L)来传一个信号。信号不是对地测量的,而是看两根线之间的电压差。

举个例子:

  • 显性电平(逻辑0):CAN_H比CAN_L高2V左右
  • 隐性电平(逻辑1):CAN_H和CAN_L电压相等(约2.5V)

为什么会这样设计?你想想看,外界的电磁干扰通常是同时作用在两根线上的(共模干扰)。比如一个强电磁脉冲过来,CAN_H和CAN_L同时被抬高了1V。但它们的差值没变!接收器只看差值,所以干扰就被抵消了。这就是差分信号的抗干扰能力。

核心要点:差分信号不是看“单根线对地电压”,而是看“两根线之间的电压差”。这是CAN能在恶劣环境下稳定通信的根本原因。

我在项目中遇到过一件事:有个客户说他们的CAN通信偶尔丢包,查了半天,发现是CAN_H和CAN_L线在布线时被分开了,没有双绞。结果两根线受到的干扰不一样,差分信号的优势就没了。嗯,这里要注意:CAN线一定要双绞,而且尽量等长。

2.2 CAN_H和CAN_L:总线上的“阴阳两极”

CAN总线只有两根线:CAN_H(高线)和CAN_L(低线)。它们不是随便叫的,有明确的电气特性。

状态 CAN_H电压 CAN_L电压 差分电压 (CAN_H - CAN_L)
隐性(Recessive) 2.5V 2.5V 0V
显性(Dominant) 3.5V 1.5V 2V

你看,隐性时两根线都是2.5V,差分电压为0。显性时CAN_H被拉高到3.5V,CAN_L被拉低到1.5V,差分电压2V。这个2V的差值,就是接收器判断“0”的依据。

我个人的习惯是:调试时用示波器同时看CAN_H和CAN_L,然后看它们的差值(用数学通道)。如果看到差分信号波形干净、幅值稳定,那物理层基本没问题。如果波形毛刺多、幅值不够,那就要查查终端电阻或者线缆了。

小技巧:用示波器测量CAN信号时,探头地线要尽量短。地线太长会引入噪声,影响测量结果。我一般用弹簧地线夹,效果很好。

2.3 终端电阻:为什么是120Ω?

终端电阻,就是接在CAN总线两端的电阻,阻值120Ω。它的作用是什么?说白了,就是消除信号反射

你想想看,信号在线上传输,遇到阻抗不连续的地方(比如开路、短路、分支),就会产生反射。反射回来的信号和原始信号叠加,波形就变形了,数据就可能出错。

CAN总线的特性阻抗大约是120Ω。所以我们在总线两端各接一个120Ω电阻,让总线的阻抗匹配,信号就不会反射了。

我曾经犯过一个错误:调试一个CAN网络,发现通信时好时坏。查了半天,发现终端电阻只接了一个,而且阻值是100Ω。嗯,这就是典型的阻抗不匹配。后来换成两个120Ω电阻,问题立刻解决。

警告:终端电阻必须接在总线的最两端,而不是中间。如果接在中间,总线两端还是会有反射。另外,电阻值必须是120Ω(或接近),不能随意更换。

还有一个常见问题:如果总线上的节点很少(比如只有2个),每个节点都内置了120Ω电阻,那总线上就有两个120Ω并联,等效电阻变成60Ω。这会导致信号幅值下降,通信可能不稳定。所以,总线上只能有两个终端电阻,其他节点必须禁用内置电阻。

2.4 总线拓扑结构:直线型才是王道

CAN总线的拓扑结构,官方推荐的是直线型(总线型)。就是一根主干线,所有节点都挂在这根线上,每个节点用很短的支线连接。

为什么不能用星型或树型?因为分支会产生反射。分支越长,反射越严重。CAN协议规定,分支长度一般不超过0.3米(具体看速率)。

我见过一个失败的案例:有个工程师为了布线方便,把CAN总线接成了星型。结果通信速率一提高,数据就乱套。后来改成直线型,问题解决。说白了,CAN总线对拓扑结构很敏感,别想着偷懒。

总线拓扑要点:

  • 主干线:一根线,两端接终端电阻
  • 分支:尽量短,不超过0.3米
  • 节点:挂在主干线上,不要有长分支
  • 速率:总线长度越长,速率越低(比如500kbps时,总线长度不超过100米)

最后,给大家一个避坑指南:我曾经在一个项目中,发现CAN通信偶尔中断。排查后发现,有个节点的CAN线接头松了,导致总线开路。开路时,终端电阻少了一个,信号反射严重。所以,CAN总线连接器一定要锁紧,最好用带锁扣的。

好了,这一章就到这里。物理层是CAN通信的基石,差分信号、CAN_H/CAN_L、终端电阻、总线拓扑,这四个概念必须吃透。下一章,咱们聊聊CAN的帧格式,看看数据是怎么打包发送的。