第2章:CAN物理层——差分信号原理、CAN_H与CAN_L电平定义、显性电平与隐性电平、总线拓扑结构

大家好,我是你们的硬件讲师。今天咱们聊聊CAN物理层。说实话,很多工程师一上来就扎进协议栈里,结果硬件上栽了跟头。我见过不少项目,软件调得飞起,一上示波器,波形惨不忍睹。嗯,物理层才是CAN通信的基石,搞不懂它,后面全是白搭。

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

先问大家一个问题:汽车里到处都是发动机点火、电机转动,电磁干扰大得吓人。普通的单端信号(比如UART的TX/RX),在这种环境里能活吗?

答案显然是不能。单端信号靠一根线和地平面做参考,干扰一上来,电平就飘了。CAN总线聪明就聪明在——它用两根线:CAN_H和CAN_L,传的是它们的电压差。

差分信号的核心思想

  • 发送端:在CAN_H和CAN_L上施加相反的电压变化
  • 接收端:只关心V_diff = CAN_H - CAN_L
  • 共模干扰(比如外界电磁场同时影响两根线)会被自动抵消

我个人的经验:有一次在电机驱动板上调试CAN,示波器看CAN_H和CAN_L对地都有很大的毛刺,但差分波形却非常干净。这就是差分信号的魅力——共模抑制比(CMRR)是它的护身符。

2.2 CAN_H与CAN_L的电平定义

CAN总线定义了两种电平状态:显性隐性。说白了,就是总线上的“0”和“1”。

咱们先看具体电压值(以最常见的ISO 11898-2标准,5V供电为例):

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

你看,隐性时两根线都是2.5V,差分电压接近0。显性时CAN_H被拉高到3.5V,CAN_L被拉低到1.5V,差分电压约2V。

避坑指南:我曾经遇到过一批板子,CAN通信时好时坏。查了半天,发现是CAN_H和CAN_L的线接反了。接收器看到的是负差分电压,直接当成隐性。记住:CAN_H接CAN_H,CAN_L接CAN_L,别搞混。

2.3 显性电平与隐性电平的博弈

这里有个关键点:显性电平会“覆盖”隐性电平。你想想看,如果总线上有两个节点同时发送,一个发显性(0),一个发隐性(1),结果是什么?

答案是:总线呈现显性(0)。这就是CAN总线仲裁的基础——谁先发0,谁就赢。

为什么会这样?因为CAN收发器的输出级是开漏结构。隐性状态靠终端电阻把总线拉到2.5V,而显性状态是收发器主动驱动。驱动器的力量比电阻大,所以显性占优。

我建议:在调试时,用示波器同时抓CAN_H和CAN_L,再做个数学通道算差分。你看波形,显性位就是差分电压跳起来的那一段,隐性位就是平的那一段。非常直观。

2.4 总线拓扑结构

CAN总线的拓扑,说白了就是一条线,所有节点都挂在这条线上。最常见的结构是直线型(总线型)

基本规则:

  • 一根主干线(双绞线),两端各接一个120Ω终端电阻
  • 每个节点通过短的支线(stub)连接到主干
  • 支线长度越短越好,一般不超过0.3米

为什么两端要接120Ω?因为CAN总线特性阻抗大约是120Ω。终端电阻的作用是吸收信号反射,防止波形振铃。没有终端电阻,总线上的信号会像弹簧一样来回弹,通信必乱。

注意:我曾经见过一个项目,为了省两个电阻,没接终端电阻。结果总线长度才10米,通信就频繁出错。加上电阻后,50米都稳如老狗。终端电阻不是摆设,是必需品。

拓扑结构还有几点要注意:

  • 星型拓扑:不推荐。信号反射点多,匹配困难。我见过有人硬要用星型,结果加了各种中继器才搞定。
  • 环形拓扑:理论上可以,但实际很少用。一旦断环,整个网络瘫痪。
  • 多分支:支线太多太长,反射会累积。建议每个节点支线控制在0.3米以内。

2.5 实际设计中的几个关键参数

搞CAN物理层,这几个数字你得刻在脑子里:

参数 典型值 说明
总线最大长度 40m @ 1Mbps 速率越低,距离越长(如10kbps可达1km)
终端电阻 120Ω (1%) 必须两端各一个,不能省
共模电压范围 -2V ~ +7V 超过这个范围,收发器可能损坏
最大节点数 30~110个 取决于收发器驱动能力

我的习惯:设计PCB时,CAN_H和CAN_L走线要等长、紧耦合,最好走差分对。线宽线距按100Ω差分阻抗设计(虽然总线是120Ω,但PCB上100Ω更常见)。另外,远离时钟线、电源开关管这些强干扰源。

2.6 小结

嗯,这一章的内容就这些。总结一下:

  • 差分信号是CAN抗干扰的法宝
  • 显性(0)覆盖隐性(1),这是仲裁的基础
  • 总线拓扑用直线型,两端接120Ω电阻
  • 支线要短,走线要讲究

下一章咱们聊CAN收发器的选型与电气特性。到时候我会讲讲怎么选SN65HVD230、TJA1050这些常用芯片,以及它们各自的小脾气。咱们下章见。