工业现场CAN总线故障诊断的三种实用方法
在工业现场,CAN总线一旦出现通信故障,往往影响整条产线。不同于实验室环境,现场工程师通常没有昂贵的CAN分析仪,需要在有限条件下快速定位问题。本文总结三种不依赖专业仪器的实用诊断方法,帮你从物理层到协议层逐步排查。
一、方法1:万用表测电压法(物理层快速筛查)
CAN总线的物理层故障占现场问题的70%以上。用数字万用表即可完成初步诊断。
1.1 测量终端电阻
断电状态下,在总线最远端两节点之间测量CAN_H与CAN_L:
• 正常:约 60Ω(两个120Ω终端电阻并联)
• 偏高(>70Ω):一个或多个终端电阻未接入
• 偏低(<50Ω):总线可能有短路或多余电阻
• 无穷大:总线断路
1.2 测量静态电压
上电后,测量CAN_H对GND、CAN_L对GND的直流电压:
• 正常:CAN_H ≈ 2.5V ~ 3.5V,CAN_L ≈ 1.5V ~ 2.5V,两者之和约 5V
• CAN_H = CAN_L = 2.5V:总线处于空闲,但无节点发送
• CAN_H 接近 0V 或 5V:对地短路或对电源短路
• CAN_H - CAN_L < 0.5V:差分信号幅度不足,可能是终端电阻错或节点掉电
二、方法2:示波器看波形法(信号质量诊断)
当万用表测得电压正常但通信仍不稳定时,需用示波器观察实际波形。
2.1 显性位与隐性位检查
在总线任意节点接入示波器探头(CH1=CAN_H, CH2=CAN_L, 数学通道=CH1-CH2):
• 显性位(Dominant):CAN_H ≈ 3.5V,CAN_L ≈ 1.5V,差分 ≈ 2V
• 隐性位(Recessive):CAN_H ≈ CAN_L ≈ 2.5V,差分 ≈ 0V
2.2 常见波形异常
波形特征 故障类型 解决方向
差分幅值 < 1.2V 总线负载过重或节点数超限 减少节点或加中继器
上升沿/下降沿明显变缓 线缆过长或分布电容大 降低波特率或换低电容电缆
显性位顶部有振铃 终端电阻不匹配 检查末端120Ω是否完好
波形底部有毛刺 地电位差大(共模干扰) 检查屏蔽层单点接地
2.3 波特率验证
测量一个显性位的持续时间,换算波特率:
位时间 = 1 / 波特率
例:125kbps → 位时间 = 8μs
若实际位时间偏差超过5%,需检查晶振精度或时钟配置。
三、方法3:MCU寄存器诊断法(协议层定位)
当物理层正常但特定节点通信异常时,通过MCU的CAN控制器寄存器获取错误计数,是最高效的定位手段。
3.1 读取错误计数器(以STM32 bxCAN为例)
// 在CAN错误中断或定时任务中读取
uint32_t esr = CAN1->ESR;
uint8_t tec = (esr >> 16) & 0xFF; // 发送错误计数
uint8_t rec = (esr >> 24) & 0xFF; // 接收错误计数
uint8_t lec = (esr >> 4) & 0x07; // 最后错误代码
// 状态判断
if (tec > 96 || rec > 96) {
printf("WARN: Error Passive approaching\n");
}
if (tec > 127) {
printf("ERROR: Bus Off imminent!\n");
}
// LEC解码
switch (lec) {
case 1: printf("Bit Error\n"); break;
case 3: printf("CRC Error\n"); break;
case 5: printf("ACK Error (no response)\n"); break;
case 6: printf("Stuff Error (EMI?)\n"); break;
}
3.2 错误计数趋势分析
• TEC快速增长:该节点发送失败,可能是总线仲裁冲突或物理层问题
• REC快速增长:该节点收到大量错误帧,可能是其他节点发送异常
• TEC与REC同步增长:总线整体环境恶劣(干扰、接地不良)
3.3 总线关闭恢复策略
// 自动恢复(ABOM使能)
CAN1->MCR |= CAN_MCR_ABOM;
// 或手动恢复(先请求初始化,再退出)
CAN1->MCR |= CAN_MCR_INRQ;
while (!(CAN1->MSR & CAN_MSR_INAK));
CAN1->MCR &= ~CAN_MCR_INRQ;
四、三种方法的应用场景对比
方法 所需工具 适用场景 定位能力
万用表测电压 数字万用表 上电前/后快速排查 终端电阻、短路、断路
示波器看波形 双通道示波器 通信不稳定、偶发错误 信号质量、波特率、干扰
寄存器诊断 串口/JTAG调试器 特定节点通信异常 错误类型、节点状态
推荐排查顺序:先用万用表排除物理层硬故障,再用示波器观察波形质量,最后用寄存器定位具体错误类型。
五、结语
CAN总线故障诊断不必依赖昂贵仪器。掌握万用表测电阻/电压、示波器看差分波形、MCU寄存器读错误计数这三种方法,你就能在现场快速定位90%以上的CAN通信问题。记住:物理层优先、波形次之、协议层兜底。





