接手当前 STM32G431CB 控制器工程。这个控制器作为 CANopen 主站,
通过 FDCAN1 驱动节点 ID 为 1 的 CiA 402 舵机完成位置控制。
当前问题是舵机偶发无法使能,运行一段时间后状态回传中断,
总线上可能出现 error passive 或 bus-off。
目标不是单独证明 CAN 能收发,而是把下面这条运动链路完整跑通:
上电识别舵机 -> 进入 Operation Enabled -> 回零 ->
依次运行到 0°、+45°、-45°、0° -> 持续回读位置 -> 安全停机。
CAN 外设:FDCAN1,Classic CAN,标准 11 位标识符
引脚:PB8=FDCAN1_RX,PB9=FDCAN1_TX,以原理图和 CubeMX 工程为准
收发器:TJA1051 或板上实际器件,使能/待机脚由 GPIO 控制
CANopen 报文:NMT=0x000,EMCY=0x081,TPDO1=0x181,
RPDO1=0x201,SDO 请求=0x601,SDO 响应=0x581,Heartbeat=0x701
舵机型号、EDS 文件、电子齿轮比和 PDO 映射以项目内资料为准。
如果项目中没有这些资料,先列出缺失项,不要自行假设对象字典、
上电后保持驱动器禁止输出,先确认收到 0x701 Boot-up/Heartbeat,
再发送 NMT Start Remote Node。记录节点从 Pre-operational 到 Operational
的实际报文和耗时,不能只根据代码流程判断节点已经上线。
按照舵机手册核对 CiA 402 状态机,通过 0x6040 Controlword 完成
Shutdown、Switch On、Enable Operation,并从 0x6041 Statusword 验证
每一步状态。若状态机未进入 Operation Enabled,保留故障码和 EMCY,
确认 0x6060 为 Profile Position 模式,核对 0x607A Target Position、
0x6064 Position Actual Value、速度/加速度限制及 RPDO1/TPDO1 映射。
这些对象优先使用现有 PDO;只有 EDS 和驱动器手册明确允许时,
第一次运动必须在舵机空载、机械行程无干涉且急停有效的条件下进行。
先执行回零,然后以不高于 10°/s 的速度按以下顺序运行:
每个目标位置都要等待 Statusword 的 Target Reached,并用 TPDO1 中的
实际位置闭环确认。单次定位误差不得超过 ±0.5°,超时、跟随误差、
Heartbeat 丢失或 EMCY 出现时立即停止下发新目标,执行受控停机。
- 不得臆造 CAN 抓包、ACK、错误帧、寄存器值或舵机实际动作;
- 没有 EDS/手册依据时,不得猜测 PDO 映射、对象索引或位置换算系数;
- 未确认空载、急停、限位和机械行程安全前,不得让舵机产生运动;
- 不得屏蔽限位、过流、过温、跟随误差、Heartbeat 或急停保护;
- 不得擅自修改电流、速度、加速度和位置限制,不得写入非易失参数;
- 不得用无限重试掩盖 bus-off、节点掉线或状态机错误;
- 不得修改与 FDCAN、CANopen 和舵机控制无关的模块;
- 没有真实总线证据时,只能给出软件侧结论和采集方案,
不能把硬件接线、终端电阻或信号质量问题写成已确认根因。
先从工程中找出 FDCAN 时钟、位时序、GPIO 复用、收发器控制、
过滤器、FIFO、中断、CANopen 状态机和舵机动作状态机的实际代码路径。
核对 500kbit/s 的 nominal prescaler、time segment 和 SJW,确认过滤器
能接收 0x081、0x181、0x581、0x701,且错误中断和 FIFO 溢出均有记录。
在不影响 10ms 控制周期的前提下记录 TEC、REC、LEC、Protocol Status、
bus-off、收发计数、最后一帧 COB-ID 和动作状态。现场有 CAN 分析仪、
USB-CAN 或 candump 文件时,用真实报文还原从上电、使能到位置运行的
同时测量收发器使能脚电平,检查两端 120Ω 终端、CAN_H/CAN_L 极性、
共地和收发器供电。无法通过现有工具确认的硬件项单独列出,
只依据代码、寄存器和总线证据做最小修改。修改后重新构建和烧录,
连续执行 100 轮“0° -> +45° -> -45° -> 0°”动作,统计每个位置的
到位时间、最大误差、丢帧数、Heartbeat 丢失次数、EMCY 次数和
bus-off 次数;任何一轮失败都要保留对应报文和错误状态。
最终给出修改文件、关键配置、CiA 402 状态转换、正常/异常报文对比、
舵机动作实测结果、100 轮统计和仍需人工确认的硬件风险。
结论必须能回溯到代码、寄存器、抓包或实际动作,不写无法验证的推测。