4、力矩环前馈控制:前馈控制在力矩环中的作用、基于模型的前馈补偿、前馈与反馈的协同工作
说到力矩环的优化,前馈控制是个绕不开的话题。很多工程师一上来就死磕PID参数,调了半天效果还是差强人意。其实,有时候加个前馈,问题就迎刃而解了。
我个人习惯把前馈比作「预判」。反馈控制是看到偏差再纠偏,像开车时看到偏了再打方向盘。前馈呢?它提前知道路要转弯,提前就打方向了。你想想看,哪个更顺滑?
4.1 前馈控制在力矩环中的作用
前馈控制的核心思想很简单:在扰动影响系统之前,就主动施加补偿。它不依赖偏差,而是基于已知的模型或指令信息,提前输出一个修正量。
在力矩环里,前馈主要干三件事:
- 提升响应速度:反馈控制有滞后,前馈可以提前动作,让系统更快跟上指令。
- 减小跟踪误差:对于已知的轨迹或负载变化,前馈能大幅削减动态误差。
- 降低反馈负担:反馈环不用再拼命去追偏差,可以更专注于抑制未知扰动。
核心观点:前馈不改变系统的稳定性,但它能显著改善系统的跟随性能。说白了,它让系统「跑得更准」,而不是「晃得更稳」。
我在项目中遇到过一台高速贴片机,力矩环的跟踪误差总是超标。PID调到头了,带宽也上不去。后来加了速度前馈和加速度前馈,误差直接降了60%。嗯,这就是前馈的威力。
4.2 基于模型的前馈补偿
前馈不是瞎给的。它需要模型。模型越准,前馈效果越好。
常见的基于模型的前馈补偿包括:
| 前馈类型 | 模型依据 | 补偿对象 | 典型应用 |
|---|---|---|---|
| 速度前馈 | 电机速度指令 | 反电动势、粘滞摩擦 | 速度环、位置环 |
| 加速度前馈 | 电机加速度指令 | 惯性力、加速转矩 | 高动态响应系统 |
| 重力前馈 | 负载重力模型 | 重力分量 | 垂直轴、机器人 |
| 摩擦力前馈 | Stribeck摩擦模型 | 静摩擦、库仑摩擦 | 低速精密定位 |
| 耦合前馈 | 多轴动力学模型 | 轴间耦合力 | 并联机构、龙门 |
举个例子。垂直轴在上升和下降时,重力方向不变,但电机出力方向相反。如果不加重力前馈,反馈环就得一直顶着重力偏差跑。加了重力前馈,电机提前输出一个与重力相等的力矩,反馈环只需要处理剩下的微小误差。
实战技巧:我建议先做离线辨识,把系统的惯量、阻尼、摩擦力参数标定出来。然后把这些参数填入前馈模型。别指望一次到位,通常需要在线微调前馈系数。
代码实现上,前馈通常是一个查表或计算函数,在控制周期内同步执行:
// 基于模型的前馈计算示例
float compute_feedforward(float vel_cmd, float acc_cmd, float pos) {
float ff_torque = 0.0;
// 速度前馈:补偿粘滞摩擦和反电动势
ff_torque += K_vel_ff * vel_cmd;
// 加速度前馈:补偿惯性力
ff_torque += J_total * acc_cmd;
// 重力前馈:根据位置计算重力分量
ff_torque += gravity_compensation(pos);
// 摩擦力前馈:根据速度方向补偿库仑摩擦
if (fabs(vel_cmd) > VEL_THRESHOLD) {
ff_torque += sign(vel_cmd) * F_coulomb;
}
return ff_torque;
}
注意,这里的 J_total 是总惯量,包括电机转子和负载折算惯量。我曾经吃过亏,忘了折算负载惯量,前馈给大了,系统反而震荡。嗯,模型参数一定要准。
4.3 前馈与反馈的协同工作
前馈和反馈不是二选一,而是搭档。前馈负责「已知部分」,反馈负责「未知部分」。两者协同,才能发挥最大效能。
它们的协同关系可以用一张图来理解:
从图上可以看得很清楚:前馈和反馈是并联关系。指令同时送给前馈模型和反馈控制器,两者的输出在求和点叠加,然后驱动被控对象。
这里有几个协同工作的要点:
- 前馈不参与稳定性:前馈只改变输入,不改变闭环特征方程。所以加前馈不会让系统失稳,除非模型错得离谱。
- 反馈负责兜底:模型总有误差,摩擦力会变,负载会变。反馈环就是用来处理这些「意外」的。
- 前馈可以「超前」:如果知道未来的指令轨迹(比如插补器给的路径),前馈可以提前几个周期输出,进一步抵消延迟。
避坑指南:我曾经在一个项目中,前馈系数调得太大,导致系统在加减速时出现明显的过冲。原因是前馈模型忽略了电流环的饱和特性。记住,前馈输出不能超过执行器的物理极限,否则反馈环也救不回来。
实际调试时,我一般按这个步骤来:
- 先调好反馈环:让系统在纯反馈下稳定,且有一定带宽。
- 加入速度前馈:从0开始慢慢增加系数,观察跟踪误差变化。
- 加入加速度前馈:同样逐步增加,注意加减速段的误差。
- 加入模型前馈:重力、摩擦力等,根据实际工况逐项添加。
- 整体微调:在典型工况下跑一遍,看前馈和反馈的配合是否协调。
最后说一句,前馈不是万能的。对于完全未知的随机扰动,前馈无能为力,还得靠反馈。但如果你能把系统里「已知的那部分」用前馈吃掉,反馈环的压力就小多了,整体性能自然就上去了。