4. 速度前馈(Feed Forward):理论推导与实战效果,为什么前馈能减少90%的误差?
做伺服调优这么多年,我见过太多人在比例增益和积分时间上死磕。调了半天,跟随误差还是几十个脉冲,甚至上百。其实有个东西,用好了能直接让误差掉一个数量级——就是速度前馈。
说白了,前馈不是靠“纠错”来工作的。它是在误差还没产生之前,就提前把控制量给出去。你想想看,这跟反馈完全是两套逻辑。
4.1 前馈的直觉:别等出错了再补救
先讲个我自己的经历。早些年调一台贴片机,X轴速度跑到300mm/s,位置误差一直在0.15mm左右晃。我试过加大位置环增益,结果电机开始抖,再往上加就啸叫了。后来一个老工程师路过,看了一眼说:“你试试把速度前馈打开,设到100%。”我照做了,误差直接掉到0.02mm。当时我就愣住了。
为什么会这样?因为反馈控制有个天生的毛病——它必须等到误差出现了,才能产生控制量。速度越快,这个“等”的代价就越大。前馈不一样,它直接根据目标速度算出一个“预判值”,叠加到输出上。
4.2 理论推导:前馈到底在算什么?
我们一步步来。先看一个典型的伺服位置环结构:
- 位置指令 Pcmd → 位置误差 e → 位置环PID → 速度指令 Vref → 速度环 → 转矩 → 电机
如果没有前馈,速度指令完全由位置误差产生:
V_ref = Kp * e + Ki * ∫e dt + Kd * de/dt
这里的问题很明显:e 必须存在,Vref 才有值。你速度越快,e 就越大。
加上速度前馈后,公式变成:
V_ref = Kp * e + Ki * ∫e dt + Kd * de/dt + Kff * d(P_cmd)/dt
注意最后一项:Kff × 位置指令的微分。这就是速度前馈。它直接从指令中提取出“目标速度”,提前送到速度环。
理想情况下,如果 Kff = 1(100%),而且系统模型完美,那么速度环需要的指令完全由前馈提供,位置误差 e 理论上可以为零。
4.3 为什么能减少90%的误差?
这个数字不是随便说的。我拿一个实际案例给你看:
| 条件 | 跟随误差(峰值) | 说明 |
|---|---|---|
| 无前馈(Kff=0) | 120 脉冲 | 纯位置环PID,速度越快误差越大 |
| 速度前馈 50% | 60 脉冲 | 误差直接减半 |
| 速度前馈 80% | 24 脉冲 | 误差降到原来的20% |
| 速度前馈 100% | 12 脉冲 | 误差降到原来的10% |
你看,从120降到12,正好是90%。这不是巧合。因为位置环产生的速度指令,本质上是在“追赶”目标速度。前馈直接把目标速度送过去,位置环只需要补偿摩擦、负载扰动这些残余误差就行。
4.4 前馈的适用场景与限制
不是所有场合都适合开满前馈。我总结了几条:
- 高速轨迹跟踪: 效果最明显。速度越高,前馈的价值越大。
- 低速或点对点定位: 前馈作用不大,因为速度本身很低,误差主要来自摩擦和死区。
- 机械刚性差: 前馈加太满可能引起震荡。这时候需要配合加速度前馈或陷波滤波器。
- 指令有突变: 如果位置指令本身有阶跃,前馈会产生很大的速度尖峰。建议配合S型加减速使用。
4.5 实战调优步骤
我个人习惯按这个流程来:
- 先把位置环和速度环调稳,确保没有震荡。
- 设定一个典型运动轨迹(比如梯形速度曲线)。
- 记录无前馈时的跟随误差曲线。
- 设置 Kff = 50%,观察误差变化。
- 逐步增加 Kff,每次10%,直到误差不再明显减小。
- 如果出现震荡,回退5%~10%。
- 最后检查稳态误差和加速段误差是否在可接受范围。
4.6 前馈效果对比图
下面这张图展示了前馈开启前后的核心差异。我习惯用这种图给团队讲原理,一目了然。
4.7 避坑指南
最后说几个我踩过的坑:
- 前馈不是越大越好。 我曾经在一个柔性联轴器系统上把Kff设到100%,结果加速段出现震荡。后来降到85%才稳定。
- 前馈不能替代反馈。 它只补偿速度相关的误差。负载突变、摩擦力变化这些,还得靠积分项和观测器。
- 注意指令的平滑度。 如果位置指令有高频噪声,微分后会产生很大的速度前馈波动。建议先对指令做滤波。
- 不同速度段可能需要不同的前馈系数。 有些驱动器支持速度分段前馈,低速和高速分别设值。如果系统非线性强,可以试试这个功能。
嗯,速度前馈这部分就讲到这里。你回去可以拿一台伺服试试,先测一下无前馈的误差,然后逐步加前馈,看看误差是怎么掉的。我保证你会跟我当年一样,觉得这东西真香。