跳到主要内容

电机控制常见问题

伺服/步进电机使能成功但无法运动,或运动行为异常时的排查指南。

核心原则

CiA 402 标准定义了通用接口,但不同厂商的私有对象和默认值差异极大。同一个操作模式在 A 品牌正常工作,换到 B 品牌可能完全失败。遇到问题时,务必参考具体设备的手册

通用排查方法论

遇到电机控制问题时,按照以下分层思路排查。每层确认通过后再进入下一层,避免在错误的层级浪费时间。

第一层:通信是否正常?

电机控制的前提是 EtherCAT 通信链路正常。

检查项方法预期结果
主站是否到 OPmaster.StateEcState.OP
从站是否到 OP读 0x6041 或 slave.State不为 0x0000
PDO 是否有效slave.PDO.Ibytes > 0输入字节数 > 0
PDO 数据是否刷新连续读 StatusWord 观察变化不全为零、有变化

如果本层不通过,问题在网络/配置层,不是电机控制问题。参考 设备无法连接或控制

第二层:CiA 402 状态机是否正确推进?

电机必须到达 Operation Enabled 状态才能运动。

排查步骤:

  1. 读取 StatusWord (0x6041),用掩码解析当前状态:

    (sw & 0x4F) == 0x40  → Switch on disabled (需发 0x06)
    (sw & 0x6F) == 0x21 → Ready to switch on (需发 0x07)
    (sw & 0x6F) == 0x23 → Switched on (需发 0x0F)
    (sw & 0x6F) == 0x27 → Operation enabled ✅
    (sw & 0x4F) == 0x08 → Fault (需发 0x80 复位)
  2. 如果卡在某个状态不推进

    • 检查 Controlword 是否在每个 PDO 周期持续写入(不是只写一次)
    • 部分驱动器要求状态间有延时,每步等待 StatusWord 确认后再推进
    • 检查是否有 Fault (bit3=1),先复位再重新使能
  3. 如果反复 Fault

    • 读 0x603F (Error Code) 获取具体错误码
    • 读 0x1003 (Pre-defined Error Field) 获取错误历史
    • 对照设备手册查询错误码含义

第三层:操作模式是否生效?

写入模式后必须验证是否被驱动器接受。

  1. 写入 0x6060 (Modes of Operation) = 目标模式值
  2. 读取 0x6061 (Modes of Operation Display) 确认返回值一致
  3. 如果不一致:
    • 驱动器可能不支持该模式(查 ESI 或手册中 Supported Modes)
    • 部分驱动器要求在特定状态下切换模式(如只允许在 Switched On 状态切换)

第四层:驱动器内部是否有保护机制阻止运动?

这是最容易被忽略的一层。驱动器到达 Operation Enabled 后仍不运动,通常是某种保护机制在起作用。

4a. 硬件限位保护

关键认知:不同操作模式对限位的响应完全不同。

  • CSP 模式:多数驱动器忽略硬件限位(主站负责限位保护)
  • PP/PV/HM 模式:驱动器内部轨迹规划器检查限位,触发时 QuickStop 或拒绝运动

排查:

  • 读 0x60FD (Digital Inputs),检查 bit0 (负限位)、bit1 (正限位)、bit2 (Home 开关)
  • 未接物理开关时,如果限位 bit 为 1 → 默认常闭逻辑导致未接线 = 限位触发
  • 在设备手册中搜索关键词limitlimit stopsensor logicinput polarity
  • 找到控制限位行为的私有对象后,通过 SDO 或 Startup 参数修改

4b. 软件限位保护

  • 0x607D (Software Position Limit):子索引 1 = 最小位置,子索引 2 = 最大位置
  • 如果目标位置超出范围,驱动器拒绝运动
  • 排查:读 0x607D:01 和 0x607D:02,确认目标位置在范围内

4c. 厂商特定保护

  • 不同厂商有自己的保护对象(安全逻辑、使能条件、输入配置等)
  • 唯一可靠的方法是查设备手册
  • 在手册中搜索关键词:protectioninhibitenable conditioninterlock

第五层:运动参数是否正确?

到达 Operation Enabled 且无保护阻止后,检查运动命令本身。

PP 模式排查

检查项对象要求
轮廓速度0x6081 ProfileVelocity必须 > 0
轮廓加速度0x6083 ProfileAcceleration建议 > 0 (为 0 时部分驱动器拒绝)
轮廓减速度0x6084 ProfileDeceleration建议 > 0
目标位置初始值0x607A TargetPosition首次应 = ActualPosition (0x6064)
定位容差0x6067 Position Window默认 0 = 精确到达,建议设非零值
bit4 上升沿Controlword时序: 0x0F → 0x1F → 等 bit12 → 0x0F

PP 模式 bit4 握手时序(关键):

状态0: 空闲 → cw=0x0F, TargetPosition=ActualPosition
状态1: 准备 → cw=0x0F, 写入 TargetPosition=目标值, 等待数周期稳定
状态2: 触发 → cw=0x1F (bit4=1), 等待 StatusWord bit12 (SetPointAck)
状态3: 清除 → cw=0x0F (bit4=0), 等待 bit12 清除
状态4: 等待 → cw=0x0F, 等待 StatusWord bit10 (TargetReached)

CSP 模式排查

检查项要求
目标位置连续性每周期平滑递增/递减,不能突变
初始目标位置第一个周期必须 = ActualPosition
PDO 结构体字段顺序必须与 PDO 映射顺序一致
DC 同步CSP 必须配置 DC Sync0
周期稳定性CSP 建议使用 DarraRT 实时驱动

第六层:同步方式是否匹配?

同步配置不当会导致驱动器报错或行为异常。

操作模式同步要求
CSP/CSV/CST必须 DC Sync0
PP/PV/PTFree Run 即可
HM (回零)Free Run 即可

Free Run 配置方法:

// PreOp 阶段写入 (标准 CiA 402 对象,非厂商特定)
slave.CoE.SDOWrite(0x1C32, 1, BitConverter.GetBytes((ushort)0x0000)); // SM2 SyncType = Free Run
slave.CoE.SDOWrite(0x1C33, 1, BitConverter.GetBytes((ushort)0x0000)); // SM3 SyncType = Free Run
为什么 PP 不需要 DC?

PP 模式下轨迹由驱动器内部规划,主站只发送目标位置和触发信号。驱动器使用自己的内部定时器执行轨迹,不依赖主站周期精度。CSP 则相反——主站每周期发送精确位置,驱动器直接跟随,因此必须 DC 同步。

排查流程图

电机不运动

├─ 主站不在 OP? ──────→ 检查网络/配置 (参考 device-troubleshooting)

├─ 从站不在 Op Enabled? → 检查 CiA 402 状态机推进 + Fault 复位

├─ 操作模式不生效? ────→ 检查 0x6061 读回值 + 驱动器支持的模式

├─ 有保护阻止? ────────→ 检查限位 (0x60FD) + 软限位 (0x607D) + 厂商私有对象
│ ⚠️ CSP 正常但 PP 不动 → 大概率是限位保护

├─ 运动参数错误? ──────→ PP: 速度/加速度非零 + bit4 上升沿时序
│ CSP: 目标位置连续 + 初始值=当前位置

└─ 同步方式不匹配? ───→ PP/PV/HM 用 Free Run; CSP/CSV/CST 用 DC Sync0