启动日志显示 “DC Not Stable!” 或运动时出现抖动,如何诊断 DC 同步问题?
1. 检查 DC 同步状态
// 读取从站 DC 配置
uint8_t hasDC;
ECM_SlaveInfoGet(slave, ECM_SLV_INFO_hasdc, &hasDC);
printf(“支持 DC: %srn”, hasDC ? “是” : “否”);
uint32_t dcCycle;
ECM_SlaveInfoGet(slave, ECM_SLV_INFO_DCcycle, (uint8_t*)&dcCycle);
printf(“DC 周期: %lu nsrn”, dcCycle);
uint8_t dcActive;
ECM_SlaveInfoGet(slave, ECM_SLV_INFO_DCactive, &dcActive);
printf(“DC 激活: %srn”, dcActive ? “是” : “否”);
2. 常见 DC 问题及解决
┌──────────────────┬──────────────────────────────────────────┐
│ 现象 │ 解决方案 │
├──────────────────┼──────────────────────────────────────────┤
│ DC Not Stable │ 增加稳定等待时间 (默认 500ms) │
│ │ 降低 DC 同步周期 (≤ 从站支持的最大值) │
│ │ 检查时钟同步接线 │
├──────────────────┼──────────────────────────────────────────┤
│ 从站不支持 DC │ 改用 SM (SyncManager) 同步模式 │
│ │ 或更换支持 DC 的从站 │
├──────────────────┼──────────────────────────────────────────┤
│ 运动抖动 │ 检查 DC 周期是否一致 │
│ │ 减小 PDO 周期与 DC 周期的比值 │
│ │ 增加 Sync0/Sync1 抖动容差 │
└──────────────────┴──────────────────────────────────────────┘
3. 修改 DC 抖动容差
// 通过 SDO 配置 0x60C2 (Interpolation Time Period)
uint8_t syncError = 10; // 10ns 容差
ECM_EcatSdoWrite(slave, 0x60C2, 0x01, 1, &syncError);
4. 使用 SM 同步替代 DC (不支持 DC 的从站)
// 修改初始化代码中的同步模式
// DC_ACTIVE_CODE = 0x300 (当前 DC 模式)
// 改为 SM 同步模式 (参考 ECM-E 文档)
#define DC_ACTIVE_CODE 0x000 // SM 模式


