运动控制中的通信协议:CAN总线详解
从一次电机丢步的深夜调试说起
凌晨两点,示波器上CAN_H和CAN_L的波形像两条发疯的蛇。我盯着逻辑分析仪抓到的错误帧——ID 0x201的电机控制报文,明明发送了,驱动器那边就是没反应。更诡异的是,隔壁工位老张的电机跑得欢,我的三台电机里只有中间那台间歇性抽风。
换过收发器,换过终端电阻,甚至把线束从40cm缩短到15cm,问题依旧。最后用万用表量CAN_H对地电压——2.8V,CAN_L对地2.2V,差分电压0.6V,正常。但量到驱动器端,CAN_L对地只有1.8V。拆开驱动器端子,发现压线时一根细铜丝搭到了外壳地。
这就是CAN总线——看起来简单,两根线,差分信号,抗干扰强。但实际工程里,一个接地环路、一个终端电阻焊错位置、甚至线缆绞距不对,都能让你怀疑人生。
CAN总线的物理层:别被“差分”两个字骗了
教科书告诉你CAN总线用差分信号传输,抗共模干扰。这话没错,但只说了一半。真正让CAN在工业运动控制里站稳脚跟的,是它的显性/隐性电平机制。
CAN_H和CAN_L在隐性状态时都是2.5V,差分电压0V。显性状态时CAN_H拉到3.5V,CAN_L拉到1.5V,差分2V。这个设计精妙之处在于:多个节点同时发送显性位时,总线状态仍然是显性。这就是CAN总线仲裁的基础——谁先发0(显性),谁就赢。
但这里有个坑:终端电阻不是随便焊两个120欧就完事。CAN总线要求两端各一个120欧,中间节点不要加。我见过有人把每个节点都