摘要:CAN 总线接上第三个节点就通讯异常?示波器看波形振铃严重?不是节点芯片坏了,而是终端电阻缺失或阻抗不连续。本文解析 CAN 总线最容易被忽略的物理层陷阱。
一、问题描述(现象)
**双绞线接了两个节点,通讯好好的;
再加一个节点,总线直接挂死,错误帧满天飞;
示波器看 CANH/CANL,波形有明显的振铃(Ringing)。**
很多工程师的排查方向是:
波特率不一致?
某个节点 ID 冲突?
换一个 CAN 收发器芯片?
二、原理分析
1. 物理模型
CAN 总线是差分、阻抗受控的传输线。
CANH ---+----------------+--- CANH | | [Rterm] [Rterm] | | CANL ---+----------------+--- CANL2. 核心参数
特性阻抗(Z₀):标准规定120Ω。
终端电阻(Rterm):总线两端各接120Ω。
传播延迟:信号在线上往返的时间。
3. 反直觉真相
CAN 总线不是“随便两根线绞在一起”就能用的。
没有终端电阻:信号在总线末端发生反射,形成振铃。
中间加终端电阻:阻抗不连续,反射更严重。
分支过长:哪怕只有 10cm,也会导致严重的信号完整性问题。
三、工程级解决方案
方案 1:只在物理两端加电阻(铁律)
有且仅有在总线的物理起点和物理终点加 120Ω 电阻。
✅ 正确:Bus Start ←→ Node A ←→ Node B ←→ Bus End
❌ 错误:Bus Start ←→ Node A ←→ Node B ←→ Node C ←→ Bus End(Node B 上加电阻)
方案 2:计算实际电阻值
车上环境恶劣,电阻值允许一定公差。
推荐范围:100Ω ~ 130Ω。
用万用表量 CANH-CANL 之间的电阻:
只有 1 个节点:约 60Ω(并联)。
2 个节点:约 120Ω。
3 个节点:必须只有两端有电阻。
方案 3:检查线缆与连接器
线缆:必须使用双绞线,绞距越密越好(< 2cm)。
连接器:避免螺丝端子,优先用 IDC 或压接。
分支长度:尽量短于 30cm。
四、选型避坑建议
不要省收发器:低端 MCU 内置 CAN PHY 往往驱动能力弱,长距离必挂。
共模电感:工业现场强烈建议加共模扼流圈(Common Mode Choke)。
地线回流:所有节点的 GND 必须共地,否则共模电压超标。
五、总结 Checklist
[ ] 是否用示波器看过 CAN 波形是否有振铃?
[ ] 120Ω 电阻是否只加在总线两端?
[ ] 分支长度是否 < 30cm?
[ ] 所有节点是否共地?
六、写在最后(关注我,少走弯路)
我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。
CAN 总线是汽车电子的命脉,但 80% 的故障都在物理层。
关注我的专栏《嵌入式底层避坑指南》,我会持续更新 CAN、UART、SPI 等外设的真实调试案例和量产级解决方案。
👉下一篇预告:《CAN 波特率 500k 配不出来?别只怪晶振,看看 SJW 与 BS1/BS2》
References
ISO 11898-2 – Road vehicles — Controller area network (CAN)
TI Application Report SLLA270 – CAN Bus Termination
如果你在调试 CAN 总线时遇到过“加个节点就挂”的灵异事件,欢迎在评论区交流。
原创文章,转载请注明出处。