3. 速度环PI参数整定:模型、抗饱和、前馈与变增益
速度环调参,是电机控制里最磨人的环节之一。很多人上来就调比例增益、积分时间,调了半天系统还是抖,或者一加载就飞。其实问题往往出在——你没搞清楚速度环到底在干什么。
我个人习惯,拿到一个新平台,先不急着调参数。先把速度环模型在脑子里过一遍,再决定用什么策略。今天我们就从模型开始,一步步把速度环PI整定这件事讲透。
3.1 速度环的简化模型
速度环的输入是速度指令,输出是电流指令(通常是iq)。中间经过PI控制器、电流环、电机本体、负载,最后反馈回来。
实际系统是非线性的,但工程上我们常用一阶惯性加积分环节来近似:
G(s) = K / (J·s + B) ≈ K / (J·s) (忽略阻尼B)
其中J是转动惯量,K是转矩常数与电流环增益的乘积。说白了,速度环被控对象就是一个积分器加一个增益。
所以PI控制器的传递函数是:
C(s) = Kp + Ki/s
闭环后,系统变成典型的二阶系统。这时候你调Kp和Ki,本质上就是在调二阶系统的自然频率和阻尼比。
核心结论:速度环PI参数整定的本质,就是根据系统惯量和期望带宽,计算出合适的Kp和Ki。
我在项目中遇到过,有人把Kp调得很大,觉得响应快。结果系统高频振荡,电机嗡嗡响。为什么?因为忽略了电流环的延迟和采样噪声。你想想看,Kp太大,相当于给系统加了一个高增益的比例反馈,相位裕度不够,必然振荡。
3.2 抗积分饱和(Anti-Windup)
积分饱和,是速度环最隐蔽的坑。我刚开始做伺服驱动时,就吃过这个亏。
情况是这样的:速度指令突然从0跳到1000rpm,积分项开始疯狂累积。等速度到达目标时,积分项已经积了一大堆,输出早就饱和了。结果速度超调很大,甚至来回震荡好几秒才稳定下来。
为什么会这样?因为积分器没有限幅,或者限幅方式不对。
常用的抗积分饱和方法有三种:
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 积分限幅 | 直接限制积分项的输出范围 | 简单系统,对动态要求不高 |
| 条件积分 | 只在误差较小时才积分 | 需要快速响应的场合 |
| 反馈积分(Back-Calculation) | 将饱和差值反馈回积分器 | 高性能伺服,动态响应好 |
我个人最常用的是反馈积分法。代码实现也很简单:
// 反馈积分抗饱和
float error = speed_ref - speed_fb;
float pi_out = Kp * error + integral;
// 限幅
float pi_out_limited = clamp(pi_out, -limit, limit);
// 计算饱和差值,反馈回积分器
float sat_diff = pi_out - pi_out_limited;
integral += Ki * error * dt - Kc * sat_diff * dt;
// 最终输出
float iq_ref = pi_out_limited;
这里Kc是反馈增益,一般取1/Kp左右。我曾经在一个项目中,Kc没调好,导致积分器反而震荡。后来改成Kc = 1.2/Kp,效果就好了很多。
小技巧:抗积分饱和的反馈增益Kc,可以先取1/Kp,然后根据实际响应微调。如果超调还是大,增大Kc;如果响应变慢,减小Kc。
3.3 前馈补偿
PI控制器本质上是误差驱动的。也就是说,只有出现误差了,控制器才会动作。这导致一个问题——对于快速变化的指令,PI总是慢半拍。
前馈补偿就是解决这个问题的。它直接根据指令的变化,提前给一个补偿量,让系统提前动作。
速度环的前馈通常有两种:
- 加速度前馈:根据速度指令的微分(加速度),补偿惯量带来的转矩需求
- 摩擦力前馈:根据速度方向,补偿静摩擦和库仑摩擦
加速度前馈的公式很简单:
iq_ff = J * (dω_ref/dt) / Kt
其中J是惯量,Kt是转矩常数。实际应用中,我们通常加一个低通滤波器,防止微分噪声放大。
我记得有一次调试高速主轴,速度指令从0到30000rpm只要0.1秒。纯PI控制根本追不上,速度误差一直很大。加了加速度前馈后,误差直接降了70%。
注意:前馈补偿不能替代PI控制器。前馈处理已知的、可预测的扰动;PI处理未知的、残余的误差。两者是互补关系,不是替代关系。
3.4 变增益PI
固定增益的PI控制器,在宽调速范围内往往表现不佳。低速时增益太大容易振荡,高速时增益太小响应慢。
变增益PI就是让增益随工况变化。常见的策略有:
| 策略 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 速度相关增益 | Kp = f(ω),低速小增益,高速大增益 | 实现简单 | 对负载变化不敏感 |
| 误差相关增益 | Kp = f(e),大误差大增益,小误差小增益 | 动态响应好 | 容易引入非线性振荡 |
| 模型参考自适应 | 根据实际响应在线调整增益 | 自适应能力强 | 计算量大,调试复杂 |
我个人在工业项目中,最常用的是速度相关增益加误差相关增益的组合。比如这样:
// 变增益PI
float speed_factor = 1.0 + alpha * fabs(speed_fb) / speed_max;
float error_factor = 1.0 + beta * fabs(error) / error_max;
float Kp_adaptive = Kp_base * speed_factor * error_factor;
float Ki_adaptive = Ki_base * speed_factor; // 积分项只随速度变化
// 限幅
Kp_adaptive = clamp(Kp_adaptive, Kp_min, Kp_max);
Ki_adaptive = clamp(Ki_adaptive, Ki_min, Ki_max);
alpha和beta是两个可调系数。alpha控制速度对增益的影响程度,beta控制误差对增益的影响程度。我一般先调alpha,让系统在高低速都有合适的响应,再调beta改善动态跟踪。
避坑指南:变增益PI的增益变化不能太剧烈。我曾经把alpha设得太大,结果速度一变化,增益突变,系统直接啸叫。后来加了增益变化率限制,问题就解决了。
3.5 知识体系总览
下面这张图,把速度环PI整定的核心知识点串起来了。你可以把它当作调试时的检查清单。
调试的时候,我建议按这个顺序来:先根据模型估算出基础Kp和Ki,然后加上抗积分饱和防止超调,再根据动态响应加前馈补偿,最后用变增益PI覆盖全速域。每一步都验证过了,再往下走。
嗯,速度环PI整定就讲到这里。记住,没有万能参数,只有适合你系统的参数。多动手,多记录,慢慢就有感觉了。