3、PID控制基础:比例、积分、微分的作用、数字PID实现、采样时间影响
聊到速度环整定,PID 是绕不开的核心。很多新手觉得 PID 就是调三个参数,没什么技术含量。说实话,我刚开始也这么想。直到有一次在高速主轴项目上,电机在 3000 RPM 附近来回震荡,怎么调都稳不住,我才意识到——不理解 PID 的本质,你连问题出在哪都找不到。
这一章,咱们把 PID 掰开揉碎了讲。不搞复杂的数学推导,重点说清楚三个环节到底在干什么,以及数字实现时有哪些坑。
3.1 比例、积分、微分——三个角色的分工
我把 PID 比作一个团队:比例是“现在”的纠偏员,积分是“过去”的记账员,微分是“未来”的预言家。你想想看,一个系统要稳定,是不是既要看当前偏差,又要消除历史累积,还得提前刹车防止超调?
3.1.1 比例控制(P)——最直接的响应
比例控制说白了就是:偏差越大,输出越猛。公式很简单:u(t) = Kp * e(t)。Kp 越大,系统响应越快,但容易过头。
我在项目中遇到过一个问题:客户要求启动响应时间小于 50ms,我直接把 Kp 拉高了一倍。结果电机“嗖”地冲过目标转速,然后开始来回震荡。这就是典型的比例过大导致的超调和振荡。
关键点:纯比例控制必然存在静差。因为要维持输出,就必须有偏差存在。想消除静差?得靠积分。
3.1.2 积分控制(I)——消除历史欠账
积分的作用是把过去所有的偏差累加起来,然后乘以 Ki 输出。只要还有静差,积分项就会一直增长,直到把偏差推回零。
但积分有个大问题——积分饱和。我记得刚入行时调一个风机,启动时积分项疯狂累积,等转速到了目标值,积分项还憋着一大股劲没释放,结果转速直接冲过头,过了好一会儿才拉回来。
避坑指南:我曾经在积分饱和上吃过亏。后来养成了习惯——所有速度环都加积分限幅,并且做条件积分(偏差大时停止积分)。这个后面会细讲。
3.1.3 微分控制(D)——提前踩刹车
微分看的是偏差的变化趋势。偏差在快速增大?微分项输出负向力,阻止它继续恶化。偏差在快速减小?微分项提前收力,防止超调。
微分对噪声极其敏感。你想想看,霍尔传感器本身就有换相噪声,再求微分,噪声会被放大。所以我一般建议:速度环慎用微分,或者加一个低通滤波器再微分。
| 环节 | 作用 | 优点 | 缺点 |
|---|---|---|---|
| 比例(P) | 快速响应当前偏差 | 响应快,简单直接 | 存在静差,过大易振荡 |
| 积分(I) | 消除稳态误差 | 无静差,精度高 | 积分饱和,响应变慢 |
| 微分(D) | 预测趋势,抑制超调 | 改善动态响应 | 对噪声敏感,易引入抖动 |
3.2 数字PID的实现——从连续到离散
模拟 PID 是连续的,但咱们的 MCU 是离散的。每隔一个采样周期算一次,这就是数字 PID。
常用的有两种形式:位置式 PID 和 增量式 PID。我个人的习惯是:速度环用增量式,位置环用位置式。为什么?往下看。
3.2.1 位置式PID
直接模拟连续 PID 的公式,每次计算都输出一个完整的控制量:
u(k) = Kp * e(k) + Ki * sum(e(i)) + Kd * (e(k) - e(k-1))
这个公式直观,但有个问题——积分项 sum(e(i)) 需要累加所有历史偏差。一旦积分饱和,处理起来比较麻烦。
3.2.2 增量式PID
增量式只计算本次控制量的增量:
Δu(k) = Kp * (e(k) - e(k-1)) + Ki * e(k) + Kd * (e(k) - 2*e(k-1) + e(k-2))
实际输出:u(k) = u(k-1) + Δu(k)
增量式的优势很明显:
- 没有积分累积问题——输出只跟最近几次偏差有关
- 手动/自动切换无冲击——因为输出是增量叠加
- 计算量小——适合在中断里快速执行
我的建议:霍尔传感器速度环,优先用增量式 PID。我在多个项目里验证过,增量式配合限幅处理,比位置式稳定得多。
3.3 采样时间的影响——被很多人忽略的关键参数
采样时间 Ts 是数字 PID 的“时钟节拍”。很多人只调 Kp、Ki、Kd,却忽略了 Ts 的影响。其实,Ts 变了,整组参数都得重新调。
3.3.1 采样时间对各个环节的影响
| 环节 | 采样时间变大 | 采样时间变小 |
|---|---|---|
| 比例 | 响应变慢,系统变“迟钝” | 响应更快,但计算负担加重 |
| 积分 | 积分效果变弱,需要增大 Ki | 积分累积过快,容易饱和 |
| 微分 | 微分作用变弱,噪声抑制变差 | 微分更敏感,容易引入抖动 |
为什么会这样?因为数字 PID 的系数实际上是 Kp、Ki*Ts、Kd/Ts 的组合。Ts 变了,等效的 Ki 和 Kd 也跟着变。
3.3.2 霍尔传感器的采样时间选择
霍尔传感器的速度更新频率取决于换相频率。低速时换相慢,速度更新也慢;高速时换相快,速度更新也快。这就导致了一个问题——采样时间不固定。
我遇到过最头疼的情况:电机在 100 RPM 时,速度更新周期是 50ms;到了 3000 RPM,更新周期变成了 1.6ms。同样的 PID 参数,低速时积分太弱,高速时积分又太强。
解决方案:我个人习惯的做法是——固定一个基频采样时间(比如 1ms),霍尔速度更新时做插值或过采样。或者干脆用 M/T 法测速,保证低速时也有足够的更新频率。这个后面章节会详细讲。
3.4 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以看到,从 PID 的三个环节,到数字实现方式,再到采样时间的影响,环环相扣。
3.5 本章小结
这一章咱们把 PID 的三个环节拆开看了:比例管现在,积分管过去,微分管未来。数字实现上,我推荐速度环用增量式 PID,省心又稳定。采样时间这个参数,千万别忽视——它变了,整组参数都得跟着变。