第二章 运动系统基础:运动控制系统组成、伺服电机与驱动器、编码器与位置反馈、运动轨迹规划基础
2.1 运动控制系统的基本组成
做运动控制这么多年,我经常被问到同一个问题:「一套运动控制系统到底包含哪些东西?」
其实说白了,核心就四个部分:控制器、驱动器、执行器、反馈装置。
控制器是大脑,负责算轨迹、发指令。驱动器是肌肉,把控制器的弱电信号放大成强电驱动。执行器就是电机,把电能转成机械运动。反馈装置则是眼睛,告诉你「现在走到哪了」。
我习惯把运动控制系统比作一个闭环的「人机协作」模型。你想想看,你伸手去拿杯子——大脑(控制器)规划路径,神经(驱动器)传递信号,手臂肌肉(电机)执行动作,眼睛(编码器)实时反馈位置。少了任何一个环节,这杯子都拿不稳。
核心要点:运动控制系统的本质是「指令→执行→反馈→修正」的闭环。没有反馈,就是开环,精度无从谈起。
在实际项目中,我见过太多人只关注电机选型,却忽略了反馈环节。有一次调试一台高速贴片机,电机和驱动器都是顶配,但位置就是抖得厉害。查了两天,最后发现是编码器线缆屏蔽层接地不良。嗯,细节决定成败。
2.2 伺服电机与驱动器
伺服电机和普通电机最大的区别在哪?
普通电机只管转,转多快、转多少角度,它不关心。伺服电机不一样,它必须精确地按照指令来——让你转10圈,绝不转9.9圈。
我常用的伺服电机主要分两类:
- 交流伺服(AC Servo):主流选择,扭矩大、响应快,适合大多数工业场景。我做过一个包装机项目,用的就是松下A5系列,效果不错。
- 直流伺服(DC Servo):小功率场合,比如机器人关节、精密平台。优点是控制简单,但维护麻烦(碳刷磨损)。
驱动器这边,我建议重点关注三个参数:
| 参数 | 说明 | 我的经验 |
|---|---|---|
| 带宽 | 驱动器能响应的最高频率 | 带宽不够,系统会滞后。我一般选比电机响应频率高3-5倍的驱动器 |
| 电流环响应 | 电流调节的速度 | 直接影响扭矩输出。高速场合尤其重要 |
| 编码器接口 | 支持哪种反馈协议 | BiSS、EnDat、SSI各有优劣,别选错了 |
小技巧:调试驱动器时,我习惯先用手动模式让电机空转,听声音。如果电机有尖锐的啸叫声,通常是电流环参数没调好。别急着改PID,先检查一下增益是否过高。
2.3 编码器与位置反馈
编码器这东西,看着不起眼,但它是整个闭环的「眼睛」。眼睛不好使,再好的大脑和肌肉也没用。
编码器分两大类:
- 增量式编码器:只输出脉冲数,断电后位置丢失。每次上电需要回零。优点是便宜、简单。
- 绝对式编码器:每个位置都有唯一编码,断电后位置不丢。贵,但省心。
我曾经在一个半导体设备项目上吃过亏。当时为了省钱选了增量式编码器,结果每次断电重启都要花30秒回零。客户不干了,说「你们这机器怎么每次开机都要等半天?」后来换了绝对式编码器,问题解决。所以,如果设备需要频繁断电重启,别犹豫,上绝对式。
编码器的分辨率怎么选?我有个简单的经验公式:
所需分辨率 = 定位精度 × 0.1 ~ 0.2
举个例子:
要求定位精度 ±0.01mm
那么编码器分辨率至少需要 0.001mm ~ 0.002mm
如果丝杠导程是10mm,编码器线数 = 10 / 0.001 = 10000线
注意:分辨率不是越高越好。分辨率太高,反馈噪声会变大,反而影响系统稳定性。我见过有人用27位编码器做低速运动,结果位置波动比用20位的还大。适可而止。
2.4 运动轨迹规划基础
轨迹规划,说白了就是「怎么让电机从A点走到B点」。但这里面的门道不少。
最简单的轨迹是梯形速度曲线:匀加速→匀速→匀减速。但问题来了——加速度突变会产生冲击力,导致机械振动。
我做过一个高速点胶机项目,一开始用梯形速度曲线,点胶头每到拐点就抖一下,胶水甩得到处都是。后来换成S型曲线,问题解决了。
常见的轨迹规划方法:
- T型曲线:简单,适合对冲击不敏感的场合
- S型曲线:加加速度连续,运动平滑,适合精密定位
- 多项式插值:高阶平滑,适合机器人轨迹
这里我贴一段S型曲线规划的伪代码,是我自己项目里用过的:
// S型曲线速度规划
// 输入:起始位置p0,终点位置p1,最大速度vmax,最大加速度amax,最大加加速度jmax
function SCurvePlan(p0, p1, vmax, amax, jmax) {
// 1. 计算总位移
totalDist = p1 - p0;
// 2. 判断是否能达到最大速度
// 如果距离太短,可能只能加速到一半就减速了
requiredDist = vmax * vmax / amax; // 加速到vmax需要的距离
if (totalDist < requiredDist) {
// 三角形速度曲线(没有匀速段)
vpeak = sqrt(amax * totalDist);
} else {
vpeak = vmax;
}
// 3. 计算各段时间
// 加加速段、匀加速段、减加速段、匀速段、加减速段、匀减速段、减减速段
// ...(具体计算略)
// 4. 生成位置-时间序列
return trajectory;
}
我的习惯:做轨迹规划时,我一般先做仿真。用MATLAB或者Python画一下速度曲线和加速度曲线,看看有没有突变。等仿真没问题了,再下到控制器里跑。这样能省很多现场调试时间。
最后说一句,轨迹规划不是越复杂越好。我见过有人用五次多项式做直线运动,结果计算量太大,控制器跑不过来,反而导致运动卡顿。合适的才是最好的。
好了,这一章的内容就到这里。运动系统的基础打牢了,后面讲前馈控制的时候你才能理解「为什么要加前馈」以及「加在哪里」。
公众号:蓝海资料掘金营,微信deep3321