3. 积分控制I:消除静差,但小心积分饱和!
聊完了比例控制,咱们进入正题——积分控制。
说实话,我刚入行那会儿,觉得P控得挺好,干嘛还要加I?直到有一次做恒温箱项目,温度死活差那么0.5度,怎么调P都拉不回来。嗯,这就是静差。这时候,积分就该登场了。
3.1 积分到底在干嘛?
说白了,积分就是「算旧账」。
比例控制只看当前偏差有多大,偏差小了,输出就小。但系统有摩擦、有负载、有各种阻力,你输出小了,它就不动了。结果就是——永远差那么一口气。
积分不一样。它把过去所有的偏差都累加起来。哪怕偏差只有0.1,只要一直存在,积分项就会慢慢变大,直到输出足够强,把偏差彻底吃掉。
核心公式:
I_out = Ki * ∫ e(t) dt
其中:
- Ki —— 积分增益,决定积分作用的强弱
- e(t) —— 当前偏差
- ∫ e(t) dt —— 偏差随时间的累积量
你想想看,这个累积量只要不为零,积分项就会一直增长。直到偏差归零,累积才停止。这就是积分能消除静差的根本原因。
3.2 积分时间常数 Ti
实际工程中,我们更常用的是积分时间常数 Ti,而不是直接调 Ki。
| 参数 | 含义 | 效果 |
|---|---|---|
| Ki 增大 | 积分作用增强 | 消除静差更快,但容易超调 |
| Ti 增大 | 积分作用减弱 | 响应变慢,但更稳定 |
| Ti 减小 | 积分作用增强 | 消除静差快,振荡风险高 |
我个人习惯用 Ti 来调。Ki 和 Ti 的关系很简单:
Ki = Kp / Ti
Ti 的单位是秒。意思是:积分需要多少秒,才能产生和比例相同的输出。
我的经验:
Ti 一般从 0.5秒 到 10秒 之间试。电机响应快的,Ti 可以小一点。温度这种大惯性的,Ti 往大了给,10秒、20秒都正常。
3.3 积分饱和——最容易被忽视的坑
好,重点来了。
积分饱和,我敢说,十个做PID的,有八个在这上面吃过亏。包括我自己。
我曾经做过一个伺服电机项目,启动时目标位置突然跳变很大。比例输出瞬间顶满,积分还在拼命累积。等电机快到位了,积分已经积了一大堆,输出根本降不下来。结果呢?电机冲过头,然后反向修正,又冲过头……来回振荡了好几次才稳住。
积分饱和的本质:
当执行器已经饱和(比如PWM占空比到100%),积分还在继续累积。等偏差反向时,积分需要很长时间才能「消化」掉,导致严重的超调和振荡。
3.4 怎么解决积分饱和?
方法有好几种,我挑最实用的三个说。
方法一:积分限幅
最简单粗暴。给积分项设个上限,不让它无限累积。
// 积分限幅示例
integral += error * dt;
if (integral > I_MAX) integral = I_MAX;
if (integral < -I_MAX) integral = -I_MAX;
I_MAX 取多少?我一般取输出限幅的 10%~30%。
方法二:积分分离
偏差大的时候,干脆关掉积分。等偏差小了再打开。
// 积分分离示例
if (abs(error) < THRESHOLD) {
integral += error * dt;
} else {
integral = 0; // 偏差太大,清零积分
}
THRESHOLD 我通常设为目标值的 5%~10%。
方法三:抗饱和积分(Back-calculation)
这个高级一点。当输出饱和时,把超出的部分反馈回去,反向修正积分。
// 抗饱和积分示例
output = P_out + I_out;
if (output > OUT_MAX) {
output = OUT_MAX;
integral -= Kb * (output - OUT_MAX) * dt;
}
Kb 是反馈系数,一般取 1/Ti 左右。
我的建议:
新手先用积分限幅,简单可靠。等做多了,再试试积分分离。抗饱和积分适合要求高的场合,比如精密定位。
3.5 积分参数的调试口诀
调I参数,我总结了个顺口溜:
- 静差消不掉? 加大 Ki,或者减小 Ti
- 超调太厉害? 减小 Ki,或者增大 Ti
- 振荡不停歇? 检查积分饱和,先限幅
- 响应太磨叽? 适当加I,别指望I救急
最后一句什么意思?积分是慢工出细活。想快速响应,靠P。想消除静差,靠I。别让I干P的活。
3.6 一个实际案例
去年做个直流有刷电机的位置环,目标转10圈。
纯P控制:到9.8圈就停了,静差0.2圈。
加I之后:Ki从0.1开始试,静差慢慢消失。但Ki到0.5时,启动瞬间冲到了11圈才回来。
检查发现:启动时PWM直接100%,积分在启动的0.3秒内累积了很大值。加了积分限幅(输出限幅的20%),超调降到10.3圈。再微调Ki到0.3,最终效果满意。
调试记录:
| Ki值 | 静差 | 超调 | 稳定时间 |
|---|---|---|---|
| 0(纯P) | 0.2圈 | 0% | 0.8s |
| 0.1 | 0.05圈 | 2% | 1.0s |
| 0.3(限幅后) | 0圈 | 3% | 1.2s |
| 0.5(无限幅) | 0圈 | 10% | 2.5s |
你看,积分不是越大越好。找到那个平衡点,才是真功夫。
下一章咱们聊微分控制D。那个更刺激,搞不好会放大噪声,但用好了,系统响应能快一大截。