3、PI控制器设计:比例积分控制器的原理、模拟与数字实现、抗积分饱和策略
好,咱们今天聊聊PI控制器。这东西在电机控制里,可以说是最常用的调节器了。我刚开始做电机驱动那会儿,总觉得PID高大上,后来发现,其实大部分场合,光靠PI就够用了。说白了,比例负责“现在”,积分负责“过去”,两者一配合,就能让电机老老实实跟着你的指令走。
3.1 比例积分控制器的原理
先说说原理。PI控制器的输出,由两部分组成:
- 比例项(P):跟当前的误差成正比。误差大,输出就大,反应快。但光有比例,系统会有静差,也就是永远差那么一点点。
- 积分项(I):把过去的误差累加起来。只要有误差,积分就一直增长,直到误差消除。它负责消除静差。
数学表达式很简单:
u(t) = Kp * e(t) + Ki * ∫ e(t) dt
其中,e(t) 是误差(目标值 - 实际值),Kp 是比例系数,Ki 是积分系数。
你想想看,如果只有比例,电机带负载后,转速就是到不了设定值。这时候积分项就起作用了,它会慢慢累积误差,把输出往上推,直到误差为零。嗯,这就是PI的精髓。
关键点:比例决定响应速度,积分决定稳态精度。两者需要平衡,调参时别顾此失彼。
3.2 模拟实现
模拟实现,就是用运放搭电路。我记得刚入行时,实验室里还有一堆运放和电容电阻,调个PI参数得换电阻,麻烦得很。
模拟PI电路通常长这样:
运放反相输入端接输入信号
反馈回路:电阻 Rf 与电容 Cf 串联
比例增益由 Rf/Rin 决定
积分时间常数由 Rf * Cf 决定
输出公式:
Vout = - (Rf/Rin) * Vin - (1/(Rin*Cf)) * ∫ Vin dt
模拟实现的优点是响应快、无量化误差。但缺点也很明显:参数难调、温漂大、容易受干扰。现在除了极少数高频场合,基本都被数字方案取代了。
小技巧:如果你还在用模拟PI,记得在运放电源脚加去耦电容,不然噪声会让你怀疑人生。
3.3 数字实现
数字实现,就是把连续的积分用离散的累加来近似。说白了,就是用单片机每隔一段时间算一次。
常用的有两种形式:
3.3.1 位置式PI
直接模拟连续域公式:
u(k) = Kp * e(k) + Ki * Ts * Σ e(i)
其中 Ts 是采样周期,Σ e(i) 是从开始到现在的误差累加。
这种写法直观,但有个问题:积分项会无限增长,容易饱和。我早期做项目时就吃过这个亏,电机一启动,积分项直接爆了,输出限幅后半天回不来。
3.3.2 增量式PI
增量式只计算输出的变化量:
Δu(k) = Kp * [e(k) - e(k-1)] + Ki * Ts * e(k)
u(k) = u(k-1) + Δu(k)
这种写法好处多多:
- 不会累积积分项,抗饱和天生就好
- 切换手动/自动时无冲击
- 计算量小,适合嵌入式
我个人习惯用增量式,尤其是在电流环这种需要快速响应的场合。
推荐:电机控制中,电流环和速度环建议用增量式PI,位置环可以用位置式,但一定要加抗饱和。
3.4 抗积分饱和策略
积分饱和,是PI控制器最头疼的问题。为什么会这样?
当输出达到限幅值(比如PWM占空比100%),误差还在,积分项继续增长。等误差反向时,积分项需要先“吐”出来,输出才能降下来。这段时间,系统就失控了。
我曾经在一个伺服项目里,电机启动时超调了30%,查了半天,就是积分饱和搞的鬼。
常用的抗饱和策略有几种:
3.4.1 积分限幅法
最简单粗暴:给积分项设个上限。
if (integral > INTEGRAL_MAX)
integral = INTEGRAL_MAX;
if (integral < -INTEGRAL_MAX)
integral = -INTEGRAL_MAX;
这种方法实现简单,但限幅值不好选。太小了影响稳态精度,太大了又起不到作用。
3.4.2 积分冻结法
当输出达到限幅时,停止积分更新:
if (输出未限幅) {
正常积分;
} else {
冻结积分;
}
这个方法效果不错,我常用的就是它。注意判断条件要加个死区,避免在限幅边界来回抖动。
3.4.3 反向积分法(Back-calculation)
这是比较高级的做法。当输出限幅时,把实际输出和计算输出的差值反馈回去,反向修正积分项。
e_sat = u_calc - u_actual
integral += Ki * e * Ts - Kc * e_sat * Ts
其中 Kc 是反向增益,一般取 1/Kp 左右。这种方法响应快,但参数多了一个,调起来麻烦些。
注意:抗积分饱和不是万能的。如果系统频繁进入饱和,说明你的硬件选型或控制参数有问题,别指望软件能兜底。
3.5 实际调参经验
最后分享点调参经验。我一般按这个步骤来:
- 先调比例:把积分系数设为零,增大Kp直到系统开始震荡,然后退回一半。
- 再加积分:从小到大加Ki,观察稳态误差是否消除。注意,Ki太大会引起低频振荡。
- 检查饱和:带负载测试,看输出是否经常限幅。如果是,考虑增大硬件能力或调整参数。
- 微调:实际工况下跑一跑,根据响应曲线微调。
嗯,调参是个熟能生巧的活。刚开始可能觉得玄学,多调几次就有感觉了。记住一点:没有万能参数,只有适合你系统的参数。
避坑指南:我曾经在调试时,发现电机低速抖动,查了半天是积分项在零点附近来回跳。后来加了死区处理,问题就解决了。所以,别忘了处理零点附近的积分抖动。
好了,PI控制器就聊到这儿。下一节咱们讲微分项和完整的PID,到时候再细聊。