3、CAN物理层设计:差分信号原理、CAN收发器选型(TJA1040/TJA1145)、终端电阻匹配、线束设计要点

各位工程师朋友,咱们今天聊聊CAN物理层。很多人觉得物理层就是接几根线,没什么技术含量。其实不然。我见过太多项目,软件写得天衣无缝,最后栽在物理层上——信号反射、共模干扰、收发器烧毁,各种问题层出不穷。说白了,物理层是CAN通信的基石,这层不稳,上层协议栈再牛也白搭。

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

先问大家一个问题:为什么CAN总线要用CAN_H和CAN_L两根线,而不是像UART那样单线传输?

答案很简单——抗干扰。差分信号传输的是两根线之间的电压差,而不是对地的绝对电压。你想想看,如果外部有电磁干扰,它通常会同时耦合到两根线上(共模干扰),但两根线的电压差基本不变。这就是差分信号的魅力所在。

具体到CAN总线,它的逻辑电平定义是这样的:

  • 显性电平(Dominant):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压约2V,对应逻辑0
  • 隐性电平(Recessive):CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压约0V,对应逻辑1

关键点:显性电平会“覆盖”隐性电平。也就是说,只要有一个节点发送显性位,总线就呈现显性状态。这是CAN总线仲裁机制的基础。

我在项目中遇到过一件事:有个同事用示波器量CAN_H对地波形,发现只有2.5V到3.5V跳变,觉得信号幅度太小,怀疑收发器坏了。其实这是正常的——你单看一根线当然看不出名堂,得看差分信号。所以,调试CAN总线时,一定要用差分探头,或者直接看CAN_H减CAN_L的波形

3.2 CAN收发器选型:TJA1040 vs TJA1145

收发器是MCU的CAN控制器和物理总线之间的桥梁。它负责把控制器输出的数字信号转换成差分信号,同时提供总线保护和驱动能力。

市面上收发器型号很多,我重点讲两款常用的:TJA1040TJA1145

3.2.1 TJA1040:经典高速收发器

TJA1040是NXP的经典产品,支持最高1Mbps的通信速率。它兼容ISO 11898-2标准,在汽车电子领域应用非常广泛。

它的主要特点:

  • 待机电流极低(<10μA),支持远程唤醒
  • 内置总线故障保护:对地短路、对电源短路、总线短路都能扛
  • 电磁辐射(EME)低,电磁抗扰(EMI)高

我个人习惯在普通座舱域控、网关节点上使用TJA1040。它性价比高,稳定可靠,没什么花里胡哨的功能。

3.2.2 TJA1145:带选择性唤醒的“聪明”收发器

TJA1145是TJA1040的升级版,最大的亮点是支持CAN FD(灵活数据速率)选择性唤醒(Selective Wake)

什么叫选择性唤醒?举个例子:传统CAN总线,任何一个节点发报文,所有节点都会被唤醒。但在TJA1145上,你可以配置它只对特定ID的报文响应唤醒。这对降低整车静态功耗非常有帮助。

特性 TJA1040 TJA1145
最高速率 1 Mbps (CAN 2.0) 5 Mbps (CAN FD)
选择性唤醒 不支持 支持
待机电流 <10 μA <5 μA
典型应用 网关、普通ECU 需要低功耗唤醒的节点

选型建议:如果你的节点需要常供电(比如门模块、座椅模块),并且对静态功耗有严格要求,我建议用TJA1145。否则,TJA1040完全够用,还便宜不少。

3.3 终端电阻匹配:为什么是120Ω?

终端电阻是CAN总线物理层最容易忽略、也最容易出问题的地方。

先说说为什么需要终端电阻。CAN总线本质上是一条传输线,信号在线上传播时,如果遇到阻抗不连续的点,就会产生反射。反射信号叠加到原始信号上,会导致波形畸变,严重时直接造成通信错误。

终端电阻的作用就是吸收信号能量,消除反射。CAN总线规范规定,特征阻抗为120Ω,所以终端电阻也取120Ω。

具体怎么接?标准做法是:在总线的最两端各接一个120Ω电阻。注意,是两端,不是每个节点都接。

我曾经踩过的坑:有次调试一个座舱域控和几个子节点的通信,发现偶尔丢帧。查了半天,发现是线束设计时,终端电阻接在了中间节点上,而不是总线两端。结果信号反射严重,高速通信时波形都变形了。后来改成两端各一个120Ω,问题立刻解决。

这里有个小技巧:如果你不确定终端电阻是否接对了,可以用万用表量CAN_H和CAN_L之间的电阻。在总线断电的情况下,正常值应该是60Ω左右(两个120Ω并联)。如果量出来是120Ω,说明只接了一个;如果是0Ω,说明短路了;如果是无穷大,说明一个都没接。

3.4 线束设计要点:别让物理连接拖后腿

线束设计看似简单,其实门道很多。我总结几个关键点:

3.4.1 双绞线:必须用,别省

CAN总线必须使用双绞线。双绞线能有效抑制共模干扰,因为两根线绞在一起,受到的电磁干扰几乎相同,差分信号不受影响。我见过有人用普通排线代替双绞线,结果通信距离稍微一长就出错。

3.4.2 线缆长度和分支长度

CAN总线的最大长度取决于通信速率。1Mbps时,总线长度一般不超过40米。速率越低,可以越长。

另外,分支长度(stub length)要严格控制。每个节点到总线的分支线越短越好,一般不超过0.3米。分支太长,相当于在总线上加了一个“死胡同”,信号反射会很严重。

3.4.3 屏蔽和接地

在电磁环境恶劣的场合(比如靠近电机、逆变器),建议使用屏蔽双绞线。屏蔽层要单点接地,避免形成地环路。

3.4.4 连接器选型

车规级连接器推荐使用USCAR-2TE的MQS系列。这些连接器有良好的机械锁止和防水性能,能保证长期可靠性。

线束设计速查表

  • 线缆类型:双绞线,绞距20-50mm
  • 线径:0.5mm² - 0.75mm²(AWG20-22)
  • 终端电阻:120Ω ±1%,两端各一个
  • 分支长度:<0.3m
  • 总线长度:1Mbps时≤40m,125kbps时≤500m

好了,关于CAN物理层设计,今天就聊这么多。记住一句话:物理层是CAN通信的“地基”,地基不稳,上层建筑再漂亮也是危楼。下一章咱们聊聊CAN数据链路层,看看报文是怎么封装和传输的。