1. 项目背景与核心价值
这个项目展示了如何利用三菱FX3U PLC的脉冲输出功能实现圆形轨迹绘制,堪称工业自动化领域的"用数控机床画简笔画"。不同于常规的PLC逻辑控制案例,它把运动控制的核心逻辑掰开揉碎——从变量定义到坐标系转换,最终通过脉冲序列让执行机构走出完美的圆形轨迹。
我在汽车焊接生产线调试时,曾用类似方法实现过焊枪的圆弧轨迹控制。当时为了教会现场维护人员理解这个逻辑,特意拆解了整套控制流程。这个案例的价值在于:
- 直观展示PLC在运动控制领域的潜力(不仅限于开关量控制)
- 揭示脉冲输出与机械运动的映射关系
- 提供可复用的坐标系转换模板程序
2. 硬件架构与信号流
2.1 硬件配置清单
| 设备类型 | 型号规格 | 接口说明 |
|---|---|---|
| PLC主机 | FX3U-48MT/ES | 内置3轴100kHz脉冲输出 |
| 伺服驱动器 | MR-JE-40A | 位置控制模式 |
| 伺服电机 | HC-KFS43 | 17位绝对值编码器 |
| 机械执行机构 | 直线模组+笔架 | 行程300mm,重复精度±0.02mm |
关键提示:脉冲输出必须采用差分信号(FX3U的Y0-Y3支持差分输出),单端信号在长距离传输时易受干扰导致丢步。
2.2 信号流闭环
- PLC脉冲发生器 → 2. 伺服驱动器位置环 → 3. 电机编码器反馈 → 4. PLC高速计数器
这种硬件组合形成了半闭环控制,实际项目中若需要更高精度,建议增加光栅尺做全闭环。
3. 核心算法解析
3.1 圆的参数方程离散化
采用极坐标转直角坐标的经典算法:
st复制// 角度增量计算
delta_θ = 2π / (周长/脉冲当量)
// 实时坐标计算
X = 圆心X + 半径 * COS(当前角度)
Y = 圆心Y + 半径 * SIN(当前角度)
在FX3U中需特别注意:
- 三角函数采用查表法实现(内置浮点运算速度有限)
- 角度变量用D200-D203双字存储(32位浮点数)
- 每5ms中断刷新一次坐标值
3.2 脉冲当量校准
机械参数换算示例:
code复制丝杠导程 = 5mm
伺服编码器分辨率 = 131072 pulse/rev
电子齿轮比 = 131072 / (5000μm / 目标脉冲当量)
若设定脉冲当量为1μm,则:
code复制电子齿轮比 = 131072 / 5000 ≈ 26.2144
PLC侧需设置:
D8140 = 26 (分子)
D8141 = 1 (分母)
4. 程序架构详解
4.1 变量定义规范
| 变量地址 | 数据类型 | 用途说明 | 初始值 |
|---|---|---|---|
| D100-D103 | 32位浮点 | 圆心X/Y坐标(mm) | 150.0 |
| D104-D107 | 32位浮点 | 半径(mm) | 50.0 |
| D200-D203 | 32位浮点 | 当前角度(rad) | 0.0 |
| D210-D213 | 32位浮点 | 角度增量(rad) | 0.001 |
| D300-D303 | 32位整数 | 目标脉冲位置 | 0 |
4.2 运动控制程序段
st复制// 中断程序(定时器T246 K5)
LD M8000
OUT T246 K5
// 坐标刷新
CALL P_CALC_POS
// 脉冲输出
PLSY D300 D301 Y000 Y001
st复制// 位置计算子程序(P_CALC_POS)
// X轴坐标计算
DEMUL D104 D200 D500 // 半径*COSθ
DADD D100 D500 D300 // 圆心X + 半径*COSθ
// Y轴坐标计算
DEMUL D104 D201 D501 // 半径*SINθ
DADD D102 D501 D301 // 圆心Y + 半径*SINθ
// 角度递增
DADD D200 D210 D200 // θ += Δθ
5. 调试避坑指南
5.1 常见异常处理
| 故障现象 | 排查要点 | 解决方案 |
|---|---|---|
| 画圆变成椭圆 | 检查X/Y轴脉冲当量是否一致 | 重新校准电子齿轮比 |
| 圆弧连接处有接痕 | 中断周期与运动速度不匹配 | 调整T246定时器周期 |
| 半径逐渐缩小 | 浮点运算累积误差 | 每10圈重置角度基准 |
| 脉冲输出突然停止 | 查看D8145/D8146当前脉冲累计值 | 增加脉冲溢出判断逻辑 |
5.2 性能优化技巧
- 启用PLC的环形缓冲区(D8400设置)
- 将三角函数表预存到D1000-D1999
- 使用PLSR指令替代PLSY实现S曲线加减速
- 关键变量采用断电保持型寄存器(D1000-D7999)
6. 工程扩展应用
这个基础框架稍作修改即可实现:
- 螺旋线轨迹(半径动态变化)
- 花瓣图案(叠加多个正弦波)
- 直线插补(修改位置计算算法)
- 三维空间轨迹(增加Z轴控制)
我在锂电池极片分切设备中,就曾用类似逻辑实现过阿基米德螺旋线切割。当时发现三个关键点:
- 半径增量必须与角度增量同步计算
- 需要动态调整中断周期保证切向速度恒定
- 急停信号必须同时切断脉冲输出和伺服使能