4、PID控制理论:从原理到实战
各位同学好,我是老张。今天咱们聊聊PID控制理论。说实话,我刚入行那会儿,觉得PID就是个黑盒子——给三个参数,电机就听话了。后来踩了不少坑,才真正理解这东西。
PID控制,说白了就是三个字:比例、积分、微分。你想想看,一个直流电机,你希望它转1000转/分钟。实际转速可能只有800。怎么让它上去?这就是PID要干的事。
核心思想:根据当前误差(目标值-实际值),计算出合适的控制量,让系统快速、稳定地达到目标。
4.1 比例控制(P)——最直接的反馈
比例控制最简单。误差大,输出就大;误差小,输出就小。公式就是:
Output = Kp × Error
Kp是比例系数。我习惯叫它"力度"。Kp越大,电机响应越快。但有个问题——稳态误差。
举个例子。电机空载时,Kp=10,转速能到990转。但加上负载,可能只有950转了。为什么?因为比例控制需要误差存在才能输出。负载一重,误差就大了。
我的经验:Kp先从小往大调。调到系统开始震荡,再回调到60%-70%。这样既快又稳。
4.2 积分控制(I)——消除静差
积分控制就是用来解决稳态误差的。它把过去的误差累加起来,再乘以Ki。公式:
Output = Ki × ∫Error dt
说白了,只要误差一直存在,积分项就会一直增长。直到误差消失。我在做机器人底盘时,就靠积分项解决了重载下的速度偏差。
但积分有个毛病——积分饱和。我曾经遇到过:电机启动时,积分项疯狂累积,等转速到了目标值,积分项还很大,导致超调严重。后来加了抗饱和处理才解决。
注意:积分项不要太大。Ki过大会引起震荡。我一般先设Ki=0,调好P再慢慢加I。
4.3 微分控制(D)——提前刹车
微分控制看的是误差的变化率。误差变化越快,微分输出越大。公式:
Output = Kd × d(Error)/dt
你可以把它想象成"阻尼"。系统快要到达目标时,微分项会提前输出反向力,防止超调。
嗯,这里要注意:微分对噪声特别敏感。我做过一个项目,编码器信号有毛刺,微分项直接让电机抖得像筛子。后来加了低通滤波才搞定。
实战建议:大多数直流电机速度控制,只用PI就够了。D项一般用在位置控制或对响应要求极高的场合。
4.4 PID参数的作用总结
| 参数 | 作用 | 调大后的影响 | 调小后的影响 |
|---|---|---|---|
| Kp | 快速响应 | 响应快,可能震荡 | 响应慢,稳态误差大 |
| Ki | 消除静差 | 消除静差快,易超调 | 消除静差慢 |
| Kd | 抑制超调 | 系统更稳定,噪声敏感 | 超调可能增大 |
4.5 PID控制器的知识体系
下面这张图,是我自己画的。把PID的核心逻辑串起来了:
4.6 实战中的调参心得
调PID参数,我总结了一套"三步法":
- 先调P:Ki和Kd设为0。增大Kp直到系统开始震荡,然后回调到60%。
- 再加I:慢慢增加Ki,观察稳态误差是否消除。注意别加太多。
- 最后加D:如果超调严重,加一点Kd。但别指望D能解决所有问题。
避坑指南:我曾经在一个项目中,Ki设得太大,导致电机在目标值附近来回震荡。后来发现是积分项饱和了。解决办法是:限制积分项的累积范围,或者启动时先禁用积分。
另外,采样周期也很关键。我一般用1ms-10ms的采样周期。太快了CPU扛不住,太慢了控制效果差。你想想看,如果采样周期是100ms,电机都跑飞了,你才反应过来,那还控个啥?
好了,PID的理论部分就聊到这儿。记住:理论是基础,但真正的功夫在调试。多动手,多试错,慢慢就有感觉了。
公众号:蓝海资料掘金营,微信deep3321