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

各位同学,咱们今天聊聊CAN总线的物理层。说实话,很多做嵌入式开发的工程师,对CAN协议栈背得滚瓜烂熟,但一碰到物理层的问题就抓瞎。我见过不少项目,软件调通了,硬件一上总线就丢帧,最后查出来是终端电阻焊错了位置。所以这一章,咱们把物理层的底裤扒干净。

2.1 差分信号原理——为什么CAN要用两根线?

你想想看,汽车里电磁环境多恶劣?发动机点火、电机启停、继电器吸合,到处都是噪声。如果像UART那样用单端信号(一根信号线对地),噪声直接叠加在信号上,数据就全乱了。

CAN总线用了差分信号。说白了,就是一对绞在一起的线——CAN_H和CAN_L。发送端在两根线上同时输出相反的电压,接收端只看两根线的电压差。噪声同时耦合到两根线上,差值不变,信号就保住了。

核心公式:Vdiff = VCAN_H - VCAN_L

接收器只关心这个差值,不关心对地绝对电压。

我在一个商用车项目中遇到过,线束长达40米,地电位漂移了将近2V。单端信号早就废了,但CAN总线照样跑得稳稳的。这就是差分信号的好处——共模抑制。

2.2 CAN_H与CAN_L电平定义——显性与隐性

CAN总线只有两种逻辑状态:显性(Dominant)和隐性(Recessive)。这个设计很有意思,它不像普通总线用0和1,而是用“谁更强”来决定总线状态。

状态 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总线波形时,示波器探头一定要用差分探头,或者用两个通道做数学减法。直接用单端探头对地测,看到的波形全是噪声。我曾经吃过这个亏,查了三天才发现是测量方法不对。

2.3 总线终端电阻的作用——为什么必须加?

这个问题我面试时经常问。很多人回答“防止信号反射”,但再问一句“反射会造成什么后果”,就答不上来了。

终端电阻有两个核心作用:

  1. 消除信号反射:CAN总线是传输线,信号在末端如果不匹配阻抗,就会反射回来,和原始信号叠加,造成波形畸变。
  2. 提供隐性电平:没有终端电阻时,总线处于高阻态,电平不确定。加上120Ω电阻后,CAN_H和CAN_L通过电阻连接,隐性时稳定在2.5V。

标准CAN总线特性阻抗是120Ω,所以终端电阻也取120Ω。一般放在总线两端,中间节点不加。

避坑指南:我曾经在一个项目中,终端电阻放在了总线中间,两端反而没加。结果总线长度超过50米后,通信完全乱套。记住:终端电阻必须放在物理拓扑的最远端,不是随便找个位置焊上去就行。

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

CAN总线推荐直线型(总线型)拓扑。所有节点都挂在一条主干线上,每个节点通过短支线(stub)连接。

拓扑参数要求:

  • 主干线长度:取决于波特率。1Mbps时最长约40米,125kbps时最长约500米。
  • 支线长度:越短越好。1Mbps时支线不超过0.3米,低速时可以放宽到几米。
  • 节点间距:没有严格限制,但支线越短越好。

为什么不能用星型或环型?星型拓扑会在中心点产生多路反射,环型拓扑会形成信号环路,都破坏总线阻抗匹配。我见过有人把CAN总线接成菊花链,结果信号反射得一塌糊涂。

CAN总线直线型拓扑结构 120Ω 120Ω 节点1 节点2 节点3 节点4 拓扑要点 • 主干线两端各一个120Ω终端电阻 • 支线长度:1Mbps时 ≤ 0.3m,125kbps时 ≤ 3m ← 主干线 →

2.5 实际项目中的物理层设计要点

讲完理论,说点实在的。我在车身稳定系统项目中,物理层设计一般按这个流程走:

  1. 确定波特率:车身稳定系统通常用250kbps或500kbps。太高了抗干扰差,太低了实时性不够。
  2. 计算总线长度:根据整车线束布局,估算主干线长度,反推最大允许波特率。
  3. 选择收发器:常用TJA1050、SN65HVD230等。注意工作电压范围,有些收发器支持3.3V,有些必须5V。
  4. 终端电阻布局:确认总线两端节点,在PCB上预留120Ω电阻位置。我习惯用0603封装,方便后期更换。
  5. 共模扼流圈:在CAN_H和CAN_L上串一个共模扼流圈,能有效抑制共模干扰。这个在车身稳定系统中特别重要,因为靠近电机和电磁阀。

关键参数速查表:

波特率 最大总线长度 最大支线长度 典型应用
1 Mbps 40 m 0.3 m 动力系统
500 kbps 100 m 1.0 m 车身稳定系统
250 kbps 250 m 3.0 m 舒适系统
125 kbps 500 m 6.0 m 诊断系统