运动控制基础:伺服系统、编码器、PLCopen标准简介
各位同学,欢迎来到第二章。
做电子凸轮,说白了就是让电机按照我们设定的曲线去跑。但电机凭什么听你的?它怎么知道自己跑到了哪个位置?你又怎么跟它沟通?
这一章,我们就来拆解这三个核心问题。我刚开始接触运动控制时,也花了不少时间才把这些基础概念串起来。你把这些搞懂了,后面写凸轮曲线心里才有底。
2.1 伺服系统:执行指令的“肌肉”
伺服系统,你可以把它想象成一台“听话的电机”。你给它一个位置指令,它就必须精确地跑到那个位置,并且停住。如果跑过了,它会自己退回来;如果没跑到,它会自己补上去。
这就是闭环控制的核心——有反馈。
伺服系统三件套:
- 伺服驱动器:大脑,负责接收指令、计算偏差、输出电流。
- 伺服电机:肌肉,负责转动。
- 编码器:眼睛,负责告诉大脑“我现在在哪儿”。
我在调试一个包装机项目时,遇到过电机低速运行时一抖一抖的。查了半天,发现是驱动器的刚性参数设得太高,系统在“自激振荡”。说白了,就是反馈太灵敏,反而把自己晃晕了。降低增益后,立马平稳。
伺服系统的工作模式,通常有三种。做电子凸轮,我们最常用的是位置模式。
| 模式 | 控制对象 | 电子凸轮适用性 |
|---|---|---|
| 位置模式 | 位置(脉冲数或角度) | 最常用,直接控制主轴与从轴的同步位置 |
| 速度模式 | 转速(rpm) | 较少用,需额外位置环,精度不如位置模式 |
| 转矩模式 | 力矩(N·m) | 几乎不用,电子凸轮主要控制位置关系 |
我的习惯: 只要做电子凸轮同步,一律用位置模式。速度模式虽然也能做,但位置环的响应带宽更高,同步误差更小。别给自己找麻烦。
2.2 编码器:系统的“眼睛”
编码器是伺服系统里最容易被忽视,但又最关键的部分。没有它,伺服就是开环的步进电机,丢步了你都不知道。
编码器分两大类:增量式和绝对值。
- 增量式编码器:只输出脉冲。上电后不知道自己在哪,需要找原点(回零)。
- 绝对值编码器:输出绝对位置。上电就知道自己在哪,不需要回零。
做电子凸轮,我个人强烈建议用绝对值编码器。为什么?
你想想看,一台设备几十个轴,如果每次开机都要全部回零,既浪费时间,又可能因为回零顺序出错导致撞机。绝对值编码器一上电,所有轴的位置都已知,直接进入同步状态。
我曾经踩过的坑: 在一个飞剪项目中,用了增量式编码器。每次断电后,切刀位置丢失。操作工忘了回零就启动,切刀直接撞上了送料辊。后来全部换成多圈绝对值编码器,再也没出过这事。多花几百块,省了几万块的维修费。
编码器的分辨率也很关键。常见的分辨率有:
| 类型 | 典型分辨率 | 适用场景 |
|---|---|---|
| 低精度 | 1000 ~ 2500 PPR | 普通输送带、简单定位 |
| 中精度 | 17 bit (~131072 PPR) | 电子凸轮、飞剪、追剪 |
| 高精度 | 23 bit 及以上 | 高精度印刷、半导体设备 |
做电子凸轮,17 bit 是起步。分辨率太低,曲线会“阶梯化”,运动不平滑。
2.3 PLCopen 标准:统一“语言”
以前做运动控制,各家 PLC 的指令都不一样。三菱用 ABS,西门子用 MC_MoveAbsolute,倍福用 FB_MoveAbsolute。换个品牌,代码几乎要重写。
PLCopen 就是为了解决这个问题而生的。它定义了一套标准的运动控制功能块(Function Block),让代码在不同平台间可以移植。
PLCopen 把运动控制分成了几个部分。我们做电子凸轮,主要关注Part 1和Part 4。
- Part 1:通用运动控制 —— 单轴运动、点动、回零等。
- Part 2:轴组控制 —— 多轴插补、机器人控制。
- Part 4:电子凸轮与同步 —— 这才是我们的核心。
PLCopen Part 4 核心功能块:
- MC_CamIn:激活电子凸轮耦合,让从轴跟随主轴。
- MC_CamOut:解除电子凸轮耦合。
- MC_CamTableSelect:选择要使用的凸轮表。
举个例子,用 PLCopen 标准写一段激活电子凸轮的代码,大概是这样的:
// 激活电子凸轮耦合
MC_CamIn_0.Execute := TRUE; // 启动指令
MC_CamIn_0.Master := Axis_Main; // 主轴
MC_CamIn_0.Slave := Axis_Slave; // 从轴
MC_CamIn_0.CamTable := CamTable_1; // 凸轮表ID
MC_CamIn_0.MasterStartPos := 0; // 主轴起始位置
MC_CamIn_0.SlaveStartPos := 0; // 从轴起始位置
MC_CamIn_0.MasterScaling := 1.0; // 主轴缩放系数
MC_CamIn_0.SlaveScaling := 1.0; // 从轴缩放系数
MC_CamIn_0.StartMode := MC_CAM_START_MODE_IMMEDIATE; // 立即启动
MC_CamIn_0(); // 调用功能块
IF MC_CamIn_0.Done THEN
// 耦合成功,从轴开始跟随主轴
END_IF
你看,不管你是用倍福、欧姆龙还是贝加莱,只要支持 PLCopen,这段代码的结构几乎一模一样。这就是标准化的力量。
我的建议: 哪怕你用的 PLC 不支持 PLCopen 标准,也建议按照它的思路来封装自己的功能块。把 CamIn、CamOut、CamTableSelect 这些接口固定下来。以后换平台,改底层驱动就行,上层逻辑不用动。
2.4 知识体系总览
为了让你更直观地理解这三者的关系,我画了一张图。
这张图很清楚地展示了:伺服系统是“手”,编码器是“眼”,PLCopen 是“语言”。三者缺一不可。
嗯,这一章的内容就到这里。你把这些基础概念吃透了,后面讲凸轮曲线生成、主从同步、飞剪追剪的时候,就不会觉得云里雾里了。