AED绞车控制板 — CAN 通信上电失败问题分析
背景在绞车控制系统中控制板aed_winch_control v1.1通过 CAN 总线驱动AK60-6 v1.1 KV80智能伺服电机实现正反转控制。操作员通过控制板上的装载开关P6和卸载开关P7触发 MCUMCU 将开关量转换为 CAN 命令发给电机。现象控制板第一次上电后与电机的 CAN 通信概率性失败无响应、无应答。将电机 CAN 通信线P14插拔一次后通信即恢复正常。再次断电重新上电问题可能再次复现。电路结构梳理节点说明P14电机 CAN 接口pin1 GNDpin2 CAN_Hpin3 CAN_LU6CAN 收发器 TJA1042T/3/1JVCC input_5VVIO 3V3R19120 Ω 终端电阻硬接在 CANH/CANL 之间U6 STB直接接 GND常驻 Normal 模式无需软件控制MCUCAN_TX / CAN_RX → U6 TXD / RXDP6 / P7装/卸开关输入1 kΩ 限流 PESD3V3 ESD 保护 100 nF 滤波 4.7 kΩ 上拉连接 MCU GPIOP6 / P7 是开关量输入由固件翻译成 CAN 指令不直接操作 CAN 总线。根本原因分析核心判断上电时序竞争 → CAN 控制器进入 Bus-Off → 固件无自恢复触发路径控制板上电 │ ├─ MCU 启动完成 100 ms─→ 立即开始发 CAN 帧 │ └─ AK60-6 上电自检需 数百 ms─→ 尚未就绪无法响应 ACK │ ↓ 发送帧得不到 ACK TEC发送错误计数快速递增 │ TEC ≥ 128 → Error-Passive │ TEC ≥ 256 → Bus-OffCAN 控制器停止收发 │ 若固件未启用 ABOM 自动恢复 │ ↓ 控制器永久锁死在 Bus-Off 即使电机随后就绪通信也无法建立插拔为何有效插拔电机 CAN 线的本质拔出瞬间移除总线上驱动显性的来源或切断错误帧的物理路径总线回到隐性空闲状态。MCU CAN 控制器检测到连续128 × 11 个隐性位→ 自动退出 Bus-Off如果硬件支持或者拔出期间 MCU 侧总线干净重启 CAN 外设后恢复正常。重新插入时电机已完成自检、进入工作模式握手成功 → 通信正常。这与规律性上电失败、插拔即恢复的现象完全吻合。次要风险CAN_TX 上电初期可能为低STM32 等 MCU 在 boot 阶段 GPIO 默认为输入/浮空CAN_TX 引脚若短暂为低将通过 U6 把总线强制拉成显性导致总线被锁死。此时另一方同样无法通信。复现条件条件说明控制板与电机同时上电概率最高控制板先于电机上电必然复现电机还没就绪电机先上电、完成自检后控制板再上电一般不复现修复方案优先级 1 — 固件无需改板开启 ABOM 自动 Bus-Off 恢复STM32 bxCAN 初始化时设置hcan.Init.ABOMENABLE;// 自动 Bus-Off 恢复FDCANhfdcan.Init.AutoRetransmissionENABLE;hfdcan.Init.TransmitPauseENABLE;上电握手 重试机制不要上电后立即发业务帧先做等待 心跳 重试// 上电延时等待电机就绪HAL_Delay(1000);// 带超时的握手循环for(intretry0;retry5;retry){if(CAN_SendHeartbeat()OK)break;// Bus-Off 检测重新初始化 CANif(CAN_IsBusOff()){HAL_CAN_Stop(hcan);HAL_Delay(200);HAL_CAN_Start(hcan);}HAL_Delay(500);}保证 CAN_TX 上电期间为隐性高在 CAN 初始化之前先将 CAN_TX 对应 GPIO 配置为推挽输出并置高避免浮空拉低总线。优先级 2 — 硬件确认检查项方法预期值总线终端电阻断电测 CANH-CANL≈ 60 Ω两端各 120 Ω 并联AK60-6 是否自带终端电阻查电机手册或实测确认是否需要移除一端P14 连接器焊接目视 万用表无虚焊导通正常上电时序示波器验证抓 CANH/CANL 上电波形是否长时间停在显性差分 ~2 V 不回隐性结论首要原因上电时序竞争触发 CAN 控制器 Bus-Off固件缺少 ABOM 自动恢复与重试导致通信永久锁死。优先从固件层修复ABOM 上电延时 重试成本最低、无需改板大概率一次性解决问题。同时建议用示波器验证上电瞬间总线波形排除终端电阻配置和接触不良的叠加影响。

相关新闻