4. 积分控制(I):消除静差的关键
各位同学,今天我们来聊聊PID里的“I”——积分控制。说实话,我刚入行那会儿,觉得P控制就够了,干嘛还要加个I?直到第一次做温控系统,才发现没有I,温度死活到不了设定值。嗯,这就是我们今天要讲的核心问题。
4.1 积分控制的基本公式
积分控制的数学形式其实很简单:
u_I(t) = K_i * ∫ e(t) dt
其中:
- u_I(t):积分环节的输出
- K_i:积分增益(也叫积分系数)
- e(t):当前时刻的误差
- ∫ e(t) dt:误差对时间的累积
说白了,积分就是把过去所有的误差都加起来,然后乘以一个系数。你想想看,如果误差一直存在,积分值就会越来越大,直到控制器输出足够的力量去消除它。
在离散系统中(也就是我们飞控里实际用的),公式变成:
u_I[k] = u_I[k-1] + K_i * e[k] * T
这里T是采样周期。我习惯把K_i调好后,再根据采样周期做归一化处理,这样换平台时不用重新调参。
4.2 I控制的作用:消除静差
什么是静差?举个例子:
你让无人机悬停在10米高度。P控制会这样工作:
- 高度9.5米 → 误差0.5米 → 给一个向上的力
- 高度9.8米 → 误差0.2米 → 给一个较小的力
- 高度9.9米 → 误差0.1米 → 给一个很小的力
问题来了:当无人机接近10米时,P输出的力可能刚好等于重力。这时候误差虽然还有0.1米,但P已经无法再增加了——因为再增加力,无人机就会过冲。结果就是:永远停在9.9米,到不了10米。这个0.1米的差距,就是静差。
积分控制怎么解决?
积分项会持续累积这0.1米的误差。每过一个采样周期,积分值就增加一点。最终积分输出的力会超过重力,把无人机推到10米。到了10米后,误差为0,积分值不再增加,系统稳定。
我在做四旋翼飞控时遇到过类似情况。有一次飞机总是偏航2度,怎么调P都没用。加上I之后,2秒钟就回正了。说白了,P控制是“看现在”,I控制是“算旧账”。
4.3 积分饱和问题
积分控制虽好,但有个大坑——积分饱和。我曾经在这个问题上栽过跟头,差点炸机。
什么是积分饱和?
想象这个场景:无人机在地面上,目标高度100米。误差是100米,积分值开始疯狂累积。等无人机飞到100米时,积分值已经累积到了一个巨大的数值。这时候误差虽然变成了0,但积分值不会立刻消失——它需要时间慢慢减下来。
结果就是:无人机飞过100米,继续往上冲。等积分值降下来,飞机已经冲到120米了。这就是积分饱和导致的超调。
避坑指南:
我曾经在调试一款工业无人机时,因为积分饱和导致飞机在切换高度模式时直接窜升了15米。从那以后,我养成了两个习惯:
- 积分限幅:给积分值设置上下限,比如±100
- 积分冻结:当执行器饱和时,停止积分累积
常用的抗积分饱和方法:
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 积分限幅 | 限制积分值的范围 | 通用,最简单 |
| 积分冻结 | 输出饱和时停止积分 | 执行器容易饱和的场景 |
| 反馈积分 | 用实际输出与理想输出的差值修正积分 | 高精度控制 |
| 条件积分 | 误差较大时减小积分速度 | 大阶跃响应 |
我个人最常用的是“积分限幅+积分冻结”的组合。简单可靠,在飞控上跑了几万架次没出过问题。
4.4 I增益对系统的影响
K_i这个参数怎么调?我直接说结论:
- K_i太小:消除静差很慢,系统要花很长时间才能到达目标值
- K_i适中:快速消除静差,系统稳定
- K_i太大:系统振荡,甚至发散
为什么会这样?你想想看,积分是累积误差。K_i太大意味着一点点误差就会被放大很多倍。系统稍微过冲一点,积分值就会反向累积,导致系统来回振荡。
调参小技巧:
我习惯先把K_i设为0,调好P和D。然后慢慢增加K_i,直到静差消失。如果出现振荡,就减小K_i,或者增加D来抑制振荡。
一个经验公式:K_i ≈ K_p / (10 * 系统时间常数)。当然这只是起点,具体还要看实际响应。
另外要注意:积分增益和采样周期是耦合的。同样的K_i,采样周期不同,效果完全不同。我建议把K_i写成:
K_i_actual = K_i_normalized * T
这样K_i_normalized就与采样周期无关了,换平台时不用重新调。
知识体系总览
下面这张图总结了积分控制的完整知识结构:
好了,积分控制的内容就讲到这里。记住三个关键词:消除静差、积分饱和、增益调参。下一节我们讲微分控制,那是用来解决超调和振荡的利器。
公众号:蓝海资料掘金营,微信deep3321