1. PID控制原理回顾:比例、积分、微分的作用与数学表达式
各位同学,咱们今天聊点实在的。
PID控制,说白了就是三个字:调偏差。你想想看,任何控制系统,最终目的都是让输出值跟着目标值走。但现实世界哪有那么听话?总有干扰,总有惯性,总有延迟。这时候,PID就派上用场了。
我个人习惯把PID理解成一个「纠错三人组」:
- 比例(P):看当下,错多少纠多少
- 积分(I):看过去,把老账算清楚
- 微分(D):看未来,提前踩刹车
嗯,咱们一个一个拆开讲。
1.1 比例控制(P)—— 最直白的纠错
比例控制的数学表达式很简单:
u(t) = Kp × e(t)
其中:
u(t)是控制输出Kp是比例增益e(t)是当前偏差(目标值 - 实际值)
说白了,偏差越大,输出越大。你离目标差10米,我就给10份力;差1米,就给1份力。直觉上完全合理,对吧?
核心特点:
- 响应快,偏差一出现立刻动作
- 但永远存在稳态误差—— 因为当偏差很小时,输出也很小,可能不足以推动系统到达目标
我在项目中遇到过这样一个案例:用纯比例控制调一个直流电机转速,目标1000转,结果死活停在980转不动了。为什么?因为那20转的偏差产生的控制力,刚好被负载摩擦力抵消了。这就是典型的稳态误差。
1.2 积分控制(I)—— 算总账的会计
积分控制的数学表达式:
u(t) = Ki × ∫e(t)dt
积分项把过去所有的偏差累加起来。只要偏差还存在,积分值就会一直增长,直到把系统推到目标位置。
你想想看,刚才那个980转的例子,如果加上积分项,那20转的偏差会不断累加,控制力会越来越大,直到把转速推到1000转。这就是积分消除稳态误差的原理。
我的经验:积分项是双刃剑。积分太强,系统容易震荡;积分太弱,消除误差又太慢。我曾经在一个温控项目里,积分系数设大了,温度直接过冲了15度才稳住,差点把加热管烧了。
积分还有一个坑:积分饱和。当执行器已经饱和(比如电机已经全速转了),积分还在累加,等偏差反向时,积分需要先「吐」出来,导致响应严重滞后。这个问题在FPGA实现时尤其要注意,后面咱们会专门讲怎么处理。
1.3 微分控制(D)—— 踩刹车的预言家
微分控制的数学表达式:
u(t) = Kd × de(t)/dt
微分项看的是偏差的变化率。偏差变化越快,微分输出越大。它的作用是抑制超调,让系统更平稳。
举个例子:你开车快到路口了,如果只看比例(距离),你会一直加速直到路口才急刹车。但如果你看微分(速度变化),你会提前减速,平稳停下。微分就是那个让你提前踩刹车的信号。
注意:微分对噪声极其敏感。信号上有一点毛刺,微分就会放大成剧烈的抖动。我在FPGA上做微分时,一定会先做滤波,否则系统会像得了帕金森一样抖个不停。
1.4 完整的PID公式
把三个部分加起来,就是标准的PID公式:
u(t) = Kp × e(t) + Ki × ∫e(t)dt + Kd × de(t)/dt
在数字系统中,我们用的是离散形式:
u[k] = Kp × e[k] + Ki × Σe[i] × Ts + Kd × (e[k] - e[k-1]) / Ts
其中 Ts 是采样周期。这个公式就是咱们在FPGA里要硬化的核心。
1.5 三个系数的调参直觉
| 参数 | 增大后的效果 | 过大的风险 |
|---|---|---|
| Kp | 响应变快,稳态误差减小 | 系统震荡,甚至发散 |
| Ki | 消除稳态误差 | 积分饱和,过冲严重 |
| Kd | 抑制超调,提高稳定性 | 放大噪声,系统抖动 |
我个人习惯的调参顺序是:先调Kp让系统动起来,再加Kd抑制震荡,最后加Ki消除静差。别一上来三个参数一起调,那是在碰运气。
1.6 本章知识体系
下面这张图把PID三个分量的关系梳理清楚了:
本章小结:
- 比例是「当下」的纠错,积分是「过去」的算账,微分是「未来」的预判
- 三个分量各有优劣,配合使用才能发挥最大效果
- 数字PID的离散公式是FPGA实现的基础,务必记牢
避坑指南:我曾经在FPGA里直接用浮点数实现PID,结果资源消耗大得离谱。后来全部改成定点数,速度提升了3倍,资源减少了70%。所以,从本章开始,你就要有「定点化」的意识。