电机出现故障(状态字 bit3=1),如何诊断并恢复?
1. 检测故障
// 读取状态字
uint16_t statusWord;
// 从 TxPDO 获取或通过 SDO 读取
statusWord = motorStatus; // 从上次 PDO 交换结果
if (statusWord & 0x0008) { // bit3 = Fault
printf(“电机故障! 状态字: 0x%04Xrn”, statusWord);
}
2. 读取故障代码
// SDO 读取 0x603F (Error Code)
uint16_t errorCode;
uint16_t size = 2;
ECM_EcatSdoRead(1, 0x603F, 0x00, &size, (uint8_t*)&errorCode);
printf(“错误码: 0x%04Xrn”, errorCode);
常见错误码:
– 0x1000: 通用错误
– 0x1081: 通信错误
– 0x1090: 内部错误
– 0x1091: 过速
– 0x1092: 欠压
– 0x10A0: 编码器异常
– 0x10B0: 过流
3. 执行故障复位
// 发送 Fault Reset 命令 (控制字 bit4=1)
uint16_t controlWord = 0x008F; // bit4=1 故障复位 + bit0-3 使能
// 或者先只发送 0x0080 进行复位,再逐步使能
// CIA402 故障恢复序列:
// 当前状态: OperationEnabled + FaultActive
// (状态字: 0x0027 | 0x0008 = 0x002F)
// Step 1: 保持使能 + 发复位
controlWord = 0x008F; // Fault Reset + Switch On + Enable Voltage + Quick Stop + Enable Operation
sendControlWord(controlWord);
// Step 2: 等待状态字 bit3 清除
while (statusWord & 0x0008) {
updateStatus();
delay_ms(10);
}
// Step 3: 确认进入正常状态
if ((statusWord & 0x006F) == 0x0027) {
printf(“故障恢复成功!rn”);
}
4. 预防措施
– 加减速不要过猛(限制速度和加速度)
– 设置合适的跟随误差窗口 (0x607C)
– 监控母线电压(避免欠压/过压)


