启动日志显示 “DC Not Stable!” 或运动时出现抖动,如何诊断 DC 同步问题?

作者
Beard Hu 24 天前更新
时间
发布于 2026-07-30 · 最后更新 2026-07-30 15:25
解答

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 模式

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
搜索