2. CAN FD物理层:差分信号原理、收发器选型与终端电阻匹配
大家好,欢迎来到第二章。上一章我们聊了CAN FD的协议概貌,这一章咱们把脚落在地上,看看物理层那些“硬”东西。说白了,信号在线上怎么跑,芯片怎么选,线怎么布——这些搞不定,上层协议写得再漂亮也是白搭。
我刚开始做CAN项目时,就吃过物理层的亏。记得有一次,样机在实验室跑得好好的,一上整车就丢帧。查了三天,最后发现是终端电阻焊错了位置。嗯,从那以后,我对物理层再也不敢马虎了。
2.1 差分信号原理:为什么CAN总线这么“抗造”?
CAN总线用的是差分信号传输。你想想看,为什么汽车、工业现场这么恶劣的环境,CAN还能稳定通信?秘密就在“差分”这两个字上。
简单说,CAN总线有两根线:CAN_H(高线)和CAN_L(低线)。信号不是靠一根线对地的电压,而是靠两根线之间的电压差来传递。
显性电平(Dominant): CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分电压 ≈ 2V,代表逻辑“0”。
隐性电平(Recessive): CAN_H ≈ 2.5V,CAN_L ≈ 2.5V,差分电压 ≈ 0V,代表逻辑“1”。
为什么差分信号抗干扰?因为外部噪声会同时耦合到两根线上(共模噪声),而接收器只关心两根线的差值。噪声在两根线上幅度相同,一减就抵消了。这就是所谓的“共模抑制”。
我在一个电机驱动项目里遇到过强干扰环境,单端信号根本没法看,但CAN总线纹丝不动。差分信号就是这么“抗造”。
2.2 CAN FD收发器选型:TJA1044 vs SN65HVD230
收发器是MCU的CAN控制器和物理总线之间的“翻译官”。控制器输出的是逻辑电平(3.3V或5V),收发器把它转换成差分信号送到总线上,反过来也一样。
选型时我主要看三点:供电电压、速率支持、以及是否支持CAN FD。下面是我最常用的两款芯片对比。
| 参数 | TJA1044 (NXP) | SN65HVD230 (TI) |
|---|---|---|
| 供电电压 | 4.5V ~ 5.5V | 3.0V ~ 3.6V |
| CAN FD支持 | ✅ 支持,最高5Mbps | ✅ 支持,最高1Mbps |
| 待机模式 | 支持,超低功耗 | 支持,有使能引脚 |
| 工作温度 | -40°C ~ 150°C | -40°C ~ 85°C |
| 典型应用 | 车载、工业高温环境 | 3.3V系统、电池供电设备 |
我的选型建议:
- 如果你的MCU是5V供电,或者工作在高温环境(比如发动机舱),TJA1044是首选。我做过一个车载项目,环境温度85°C,TJA1044稳如老狗。
- 如果你的系统是3.3V供电(比如STM32F4系列),想省掉电平转换,SN65HVD230直接匹配,非常方便。但注意它最高只支持1Mbps,跑CAN FD高速模式(2Mbps以上)会吃力。
避坑指南:我曾经在一个项目里把SN65HVD230用在5V系统上,没加电平转换,结果芯片直接冒烟。记住:3.3V的收发器绝对不能接5V电源!反过来,5V的收发器接3.3V虽然不会烧,但信号电平可能达不到总线要求,导致通信不稳定。
2.3 终端电阻匹配:为什么是120Ω?
终端电阻是CAN总线物理层最容易出错的地方。我见过太多工程师在这里翻车。
为什么需要终端电阻?因为高速信号在总线末端会发生反射。反射回来的信号会跟原始信号叠加,造成波形畸变,导致误码。终端电阻的作用就是“吸收”信号能量,消除反射。
为什么是120Ω?这是由CAN总线的特性阻抗决定的。标准CAN总线(双绞线)的特性阻抗大约是120Ω。终端电阻必须匹配这个值,才能做到“阻抗匹配”,让信号无反射地传输。
终端电阻配置规则:
- 低速CAN(ISO 11898-3): 不需要终端电阻,或者只在两端各接一个2.2kΩ的弱上拉。
- 高速CAN(ISO 11898-2): 总线两端各接一个120Ω电阻。中间节点不接。
- CAN FD: 同样遵循高速CAN的规则,两端各120Ω。
你想想看,如果总线有3个节点,每个节点都接了120Ω,那等效电阻就是40Ω,信号反射会更严重。所以记住:只有总线最远的两个节点接终端电阻。
我的经验:在STM32开发板上调试CAN FD时,我习惯在板子上预留120Ω电阻的位置,用跳线帽控制是否接入。这样在搭建多节点网络时,可以灵活配置哪两个节点做终端。省得每次都要焊电阻。
2.4 布线要点:让信号跑得稳
物理层最后一步,就是PCB布线和线束设计。这里我总结几个关键点,都是实战中踩过的坑。
- CAN_H和CAN_L必须走差分对。 两根线要等长、等距、紧耦合。我见过有人把CAN_H和CAN_L分开走,中间还夹了一根电源线,结果信号质量一塌糊涂。
- 避免90°直角走线。 直角会造成阻抗突变,引起反射。用45°斜线或圆弧过渡。
- 终端电阻尽量靠近收发器。 电阻到收发器的走线越短越好。我有个项目把电阻放在板子角落,离收发器5cm远,结果高频时反射严重。
- 加共模扼流圈(Common Mode Choke)。 在CAN_H和CAN_L上串联一个共模扼流圈,可以有效抑制共模干扰。特别是在电机驱动、逆变器这些强干扰场景,这个元件能救命。
- ESD保护不能省。 在总线入口处加TVS管(比如PESD1CAN),防止静电和浪涌损坏收发器。我曾经省掉这个,结果一个雷雨天的静电就把收发器打坏了。
重要提醒:CAN FD的速率比经典CAN高很多(最高可达8Mbps甚至更高),对布线的要求也更严格。如果你在2Mbps以上速率遇到通信不稳定,先检查物理层:终端电阻对不对?差分对走线有没有等长?共模扼流圈有没有加?我曾经在一个5Mbps的项目里,就因为差分对长度差了3mm,导致眼图闭合,通信时好时坏。