脉冲步进
Darra PLC 通过 PulseDriver 支持脉冲/方向 (Pulse/Direction) 方式控制步进电机和伺服驱动器,适用于不需要实时总线的简单运动控制场景。
工作原理
信号类型
| 信号模式 | 说明 | 接线 |
|---|---|---|
| Pulse + Direction | 脉冲=步进, 方向=正/反 | 2 线 |
| CW + CCW | 正转脉冲 + 反转脉冲 | 2 线 |
| A + B 差分 | 正交编码输出 | 2 线 |
配置
var pulse = new PulseDriver();
pulse.Configure(new PulseConfig {
PulseOutput = "%QX0.0", // 脉冲输出端口
DirectionOutput = "%QX0.1", // 方向输出端口
EncoderInput = "%IX0.0", // 编码器反馈 (可选)
PulsesPerRevolution = 10000, // 每转脉冲数
MaxFrequency = 500000, // 最大脉冲频率 (Hz)
AccelTime = 200, // 加速时间 (ms)
DecelTime = 200 // 减速时间 (ms)
});
运动控制
PulseDriver 实现 IAxisDriver 接口,支持标准 PLCopen 运动功能块:
| 功能块 | 说明 |
|---|---|
| MC_MoveAbsolute | 绝对位置运动 |
| MC_MoveRelative | 相对位置运动 |
| MC_MoveVelocity | 速度模式 |
| MC_Home | 回原点 |
| MC_Stop | 停止运动 |
(* SCL 程序示例: 绝对定位 *)
MC_MoveAbsolute(
Axis := Axis1,
Position := 1000.0, (* 目标位置 (脉冲) *)
Velocity := 50000.0, (* 速度 (脉冲/s) *)
Execute := TRUE
);
速度规划
PulseDriver 内置梯形速度规划:
速度
^
| ┌──────────┐
| / \
| / \
| / \
|──/ \──
+─────────────────────────→ 时间
加速 匀速 减速
| 参数 | 说明 | 范围 |
|---|---|---|
| 起始速度 | 启动频率 | 100~10000 Hz |
| 目标速度 | 运行频率 | 1000~500000 Hz |
| 加速时间 | 从起始到目标 | 10~5000 ms |
| 减速时间 | 从目标到停止 | 10~5000 ms |
S 曲线加减速
对于需要平滑运动的场景,可在运动功能块中启用 S 曲线加减速,减少机械冲击和振动。
回原点
支持多种回原点方式:
| 方式 | 说明 |
|---|---|
| 正向限位 | 正向运动直到触发限位开关 |
| 负向限位 | 负向运动直到触发限位开关 |
| 原点开关 | 寻找原点近接开关 |
| Z 相 | 利用编码器 Z 相信号 |
| 当前位置 | 将当前位置设为零点 |
限制
性能限制
脉冲输出受限于 IO 刷新速率。软件脉冲输出最大频率约 500kHz,高速场景建议使用带硬件脉冲发生器的 IO 模块或 EtherCAT 伺服。
| 对比项 | 脉冲步进 | EtherCAT 伺服 |
|---|---|---|
| 最大轴数 | 4~8 轴 | 32 轴 |
| 同步精度 | ~1ms | < 1μs |
| 反馈分辨率 | 取决于编码器 | 取决于编码器 |
| 电子齿轮 | 不支持 | 支持 |
| 适用场景 | 简单定位 | 多轴联动 |
脉冲输出硬件方案
Darra 支持三种脉冲输出:
1. 高速 DO (软件脉冲)
直接用普通数字输出模块, 由 PLC 程序按周期拉高拉低:
- 优点: 不需要额外硬件
- 缺点: 受扫描周期限制, 最高 ~500 Hz, 抖动大
- 适合: 非运动场景 (如呼吸灯、步进电机慢速点动)
2. 专用脉冲模块
EtherCAT / Modbus 总线上的专用脉冲输出模块:
| 模块 | 路数 | 最大频率 | 特点 |
|---|---|---|---|
| Beckhoff EL2262 | 2 | 500 kHz | EtherCAT, 高速 |
| Wago 750-511 | 2 | 100 kHz | Modbus / CANopen |
| ZMC 步进控制 | 4 | 3 MHz | 专用卡, PCIe |
- 优点: 硬件产生脉冲, 精确稳定
- 缺点: 增加硬件成本
- 适合: 中低速运动 (< 500 kHz)
3. EtherCAT 脉冲/步进从站
从站内置脉冲产生逻辑, PLC 只需发目标位置:
- 优点: 与伺服使用方式一致, MC FB 直接用
- 缺点: 依赖有这种从站的产品线
细分与分辨率
步进电机厂商标的细分 (Microstep) 决定脉冲数与角度的换算:
| 细分 | 每步角度 | 每转脉冲数 |
|---|---|---|
| 1 (全步) | 1.8° | 200 |
| 2 | 0.9° | 400 |
| 8 | 0.225° | 1600 |
| 16 | 0.1125° | 3200 |
| 32 | 0.056° | 6400 |
| 64 | 0.028° | 12800 |
| 128 | 0.014° | 25600 |
细分高 = 运动平滑, 但驱动器频率需求高。1.8° 电机常用 16 或 32 细分。
配置参数详解
{
"pulseOutput": "%QX10.0",
"directionOutput": "%QX10.1",
"enableOutput": "%QX10.2",
"alarmInput": "%IX10.0",
"limitPositive": "%IX10.1",
"limitNegative": "%IX10.2",
"homeSwitch": "%IX10.3",
"encoder": {
"channelA": "%IX11.0",
"channelB": "%IX11.1",
"channelZ": "%IX11.2"
},
"mechanics": {
"pulsesPerRevolution": 10000,
"reducerRatio": 10,
"leadScrewPitch": 5.0,
"unit": "mm"
},
"motion": {
"maxVelocity": 100000,
"maxAcceleration": 500000,
"maxJerk": 10000000,
"jogVelocity": 5000,
"homingVelocity1": 2000,
"homingVelocity2": 500
}
}
单位转换
配置好机械参数后, PLC 程序直接用工程单位:
// 移动到 250 mm 位置, 速度 50 mm/s
MC_MoveAbsolute(
Axis := Axis1,
Position := 250.0, // mm
Velocity := 50.0, // mm/s
Acceleration := 100, // mm/s²
Execute := TRUE
);
底层自动换算为脉冲:
脉冲 = 250 mm × (10000 脉冲/转) × (10 齿轮比) / (5 mm/转) = 5,000,000 脉冲
闭环与开环
开环
只发脉冲, 不读编码器:
- 成本低
- 失步不可检测
- 适合负载稳定的场合
闭环 (伪闭环)
发脉冲 + 读编码器反馈:
- 能检测失步 (位置偏差超过阈值报警)
- PLC 程序可以主动重新定位
- 但实时性不如真伺服闭环
真闭环 (伺服)
用伺服驱动器 + 伺服电机, 内置位置环:
- 最高精度和响应
- 推荐用 EtherCAT 连接 (CSP 模式)
多轴协调
脉冲方式的多轴协调精度约 1 ms (扫描周期级别), 适合:
- 顺序动作 (A 轴到位后 B 轴运动)
- 独立轴 (各走各的)
不适合:
- 插补运动 (两轴严格同步的圆弧)
- 电子凸轮 / 电子齿轮
这些高级功能需要伺服和 EtherCAT。
点动操作
MC_Jog FB 用于手动点动:
MC_Jog(
Axis := Axis1,
JogForward := PositiveButton,
JogBackward := NegativeButton,
Velocity := 10.0 (* mm/s *)
);
按下正向按钮电机正转, 松开停止。适合调机/对位。
限位保护
必须配置硬限位 + 软限位:
硬限位 (外部 DI)
- 正向限位开关 (%IX10.1)
- 负向限位开关 (%IX10.2)
- 触发后立即停止, 不允许继续往限位方向移动
- 反方向可以脱离
软限位
在配置里设:
"softLimits": {
"positive": 500.0,
"negative": -10.0
}
PLC 层拒绝超过这些值的指令, 是硬限位之前的保护。
回原点流程
经典流程:
- 快速反向搜索原点开关 (高速)
- 碰到原点开关, 反向低速退出
- 再正向低速搜索原点开关 (精确定位)
- 找到后, 清零当前位置
- (可选) 搜索 Z 相, 以 Z 相为精确零点
每台机器的具体步骤由 MC_Home FB 参数决定。
加减速曲线
梯形加速:
- 加速段:
a = max_acc - 匀速段:
v = max_vel - 减速段:
a = -max_acc
S 曲线加速:
- 加加速 (Jerk) 限制, 曲线有 7 段
- 启停更平滑, 机械冲击小
- 但到位时间略长
选择:
- 大惯量负载: 用 S 曲线
- 轻负载 + 需快速: 梯形
排错
| 症状 | 处理 |
|---|---|
| 电机不动 | 检查 Enable 信号; 驱动器报警复位 |
| 反方向转 | 交换方向信号接线或配置反向 |
| 位置偏差越来越大 | 开环失步, 改用闭环或降低加速度 |
| 到位不准 | 细分数或齿轮比填错 |
| 限位触发但电机继续 | 限位信号取反 (常开 vs 常闭) |
| 高频时电机卡顿 | 驱动器频率上限, 降低细分或降速 |