CAN一到现场就Bus-Off,按这条顺序排查
CAN一到现场就Bus-Off,按这条顺序排查
桌上两块板、半米线,CAN跑一天都不报错。装到设备里以后,电机一启动、线束一拉长、节点一增加,就开始偶发Bus-Off。
很多人会先改软件恢复机制:Bus-Off以后自动重启CAN、重新初始化外设。这样能让系统“活回来”,但并没有解决根因。
Bus-Off通常是结果。真正要找的是:错误帧为什么在某一段时间里连续累积。
实验室通常是短线、节点少、共地干净、供电稳定,甚至两端终端电阻都在手边。
现场则完全不同:线束更长,接插件更多,可能出现星形分支;电机、继电器、DC/DC在旁边开关;不同节点之间还可能存在地电位差。
所以“代码没改,为什么现场不行”并不奇怪。CAN协议有很强的错误检测能力,但物理层如果持续把某些边沿、位宽或电平搞坏,控制器最终仍会因为错误计数累积进入Bus-Off。
图1:实际CAN异常波形中,CANH/CANL边沿畸变与错误帧可能同时出现,最终导致Bus-Off。
最简单、也最应该先做的检查,是总线断电后测CANH和CANL之间的电阻。
经典高速CAN总线两端各有一个120 Ω终端,等效并联后通常应接近60 Ω。如果你量到约120 Ω,常见情况是一端终端缺失;如果明显更低,就要怀疑多挂了终端。
终端的作用不是“让电压更漂亮”,而是让传输线末端的能量被吸收,减少反射。节点支线过长、星形拓扑太重,即使总电阻量起来接近60 Ω,也依然可能在边沿处产生反射和振铃。
因此阻值只能作为第一道筛查,不能代替波形。
图2:CANH与CANL的延时、边沿或幅度不匹配,会转化为共模扰动。
现场调试不要只拿逻辑分析仪看ID和数据。它告诉你“哪一帧错了”,但不一定告诉你“为什么错”。
示波器至少抓CANH、CANL,最好再做CANH−CANL的差分数学运算,或者直接用差分探头。重点看错误发生附近:边沿有没有明显振铃、Dominant电平是否稳定、Recessive回到中点时有没有异常、两个线对地的共模是否被整体抬高或拉低。
如果示波器支持CAN触发,可以直接触发Error Frame;否则也可以用协议分析工具先记录错误时间,再对齐示波器长存储。
一个很实用的动作,是把探头从ECU连接器一路移到收发器引脚。连接器处波形很差、芯片脚边更差,往往是外部线束/终端问题;连接器正常、芯片脚异常,则要检查板内走线、共模电感、ESD器件和参考地。
图3:标准终端下的CAN波形与共模分量实测示例。
如果500 kbps容易报错,降到100 kbps明显改善,优先怀疑传播延迟、反射、位时序裕量,而不是先怀疑上层协议。
如果缩短线束后问题消失,要继续检查总线长度、Stub长度和拓扑。
如果只有某个节点接入后错误大增,别只看它的软件。那个节点可能多带了一组终端、收发器供电异常、ESD器件漏电,或者地电位偏移更严重。
逐个断节点虽然看起来“笨”,但它是现场定位总线故障非常有效的方法。
图4:采用Split Termination后,共模高频扰动可得到明显抑制。
CAN是差分总线,但这不代表可以完全不管地。
当不同节点的地之间出现明显电位差,CANH和CANL可能一起被抬高或拉低。差分电压看起来还像那么回事,但收发器的共模输入范围已经被逼近边界,抗干扰能力会迅速下降。
电机、逆变器和大电流回路附近尤其要关注这一点。把示波器地随便夹在某个机壳点,甚至可能把真实问题遮掉。
Split Termination可以帮助滤掉一部分高频共模噪声、改善EMC,但它不是治疗所有Bus-Off的万能药。先把终端位置、拓扑、地和线束做好,再讨论滤波优化。
现场偶发Bus-Off,优先按终端 → 波形 → 拓扑/支线 → 位时序 → 共模/地 → 单节点隔离这条线查。
如果你只是在软件里把Bus-Off自动恢复做得越来越快,系统看上去可能更“坚强”,但真正的物理层问题会一直留在现场,直到某次噪声更大、温度更高或线束更长时再次暴露。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207






哔哩哔哩
微信公众号
小红书
抖音
知乎
西瓜视频
头条
微信视频号
