3. 经典PID补偿原理
聊到跟随误差补偿,PID控制是绕不开的基础。说实话,我见过不少工程师一上来就调PID参数,调了半天效果还是不行——其实是对PID每个环节的作用没吃透。这一章,咱们就把PID掰开揉碎了讲清楚。
3.1 PID控制基础
PID,就是比例(Proportional)、积分(Integral)、微分(Derivative)三个词的缩写。它做的事情很简单:根据当前误差、过去误差的累积、未来误差的趋势,算出控制量。
数学表达式长这样:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
其中:
- e(t) — 当前位置与目标位置的偏差,也就是跟随误差
- Kp — 比例增益
- Ki — 积分增益
- Kd — 微分增益
- u(t) — 输出给驱动器的控制量
说白了,PID就是三个“纠偏工具”的组合。每个工具干的事不一样,配合好了,伺服系统就能又快又稳地跟上指令。
核心观点:PID不是万能的,但没有PID是万万不能的。在伺服跟随误差补偿中,PID是底层最常用的闭环调节手段。
3.2 比例项对跟随误差的影响
比例项,就是 Kp * e(t)。它直接拿当前误差乘以一个系数,误差越大,输出的纠正力就越大。
我个人的习惯是,调参时先调Kp。为什么?因为比例项决定了系统的“响应速度”。Kp越大,系统对误差的反应越猛,跟随误差能快速被拉回来。
但这里有个坑——Kp不是越大越好。你想想看,如果Kp太大,系统容易震荡,甚至发散。我在项目里遇到过一台贴片机,Kp调得太高,电机在目标位置来回抖动,跟“打摆子”一样。
比例项还有一个天生的缺陷:存在稳态误差。什么意思?就是当系统接近目标时,误差已经很小了,比例项输出的纠正力也很小,可能不足以克服摩擦力或负载,最终停在离目标还有一点距离的位置上。
| Kp值 | 响应速度 | 稳态误差 | 稳定性 |
|---|---|---|---|
| 过小 | 慢 | 大 | 稳定 |
| 适中 | 较快 | 较小 | 良好 |
| 过大 | 快 | 小 | 易震荡 |
注意:纯比例控制无法消除稳态误差。如果你发现系统总是差那么一点点到不了目标位置,别死磕Kp了,该上积分项了。
3.3 积分项消除稳态误差
积分项,就是 Ki * ∫e(t)dt。它把过去所有的误差累加起来,只要误差一直存在,积分值就会越来越大,输出的纠正力也越来越大,直到把误差彻底消除。
嗯,这里要注意:积分项是“算旧账”的。它不管你现在误差多大,它只看你过去累积了多少“债”。所以,对于稳态误差这种“顽固分子”,积分项特别好使。
我曾经调试一台数控机床的Z轴,空载时定位精度还行,一装上刀具就差了0.02mm。调了半天Kp没用,最后加了点Ki,稳态误差直接归零。
但积分项也有副作用:
- 积分饱和 — 如果误差长时间存在,积分值会变得非常大,导致系统超调严重。我建议在代码里做积分限幅。
- 响应变慢 — 积分项会让系统变得“迟钝”,尤其是Ki太大时。
经验之谈:Ki一般从很小的值开始调,比如Kp的1/10到1/100。积分项是“慢药”,别指望它立竿见影。
3.4 微分项预测误差趋势
微分项,就是 Kd * de(t)/dt。它看的是误差的变化率——误差是在变大还是在变小?变大的速度快不快?
说白了,微分项有“预测”能力。它能提前感知误差的变化趋势,在误差还没变得很大之前,就输出一个反向的纠正力,起到“阻尼”作用。
我个人觉得,微分项是PID里最“聪明”的一环。它能让系统更平稳,减少超调和震荡。比如在高速定位场景下,如果没有微分项,电机冲到目标位置时很容易“刹不住车”,冲过头再回来,来回几次才稳定。加了Kd之后,系统能提前减速,一次到位。
但微分项对噪声非常敏感。你想想看,如果位置反馈信号有毛刺,微分项会把噪声放大,导致控制量剧烈抖动。我在一个项目中用过廉价的编码器,信号噪声大,一加Kd电机就嗡嗡响,最后只能放弃微分项,改用其他补偿方式。
| PID项 | 作用 | 主要风险 |
|---|---|---|
| 比例(P) | 快速响应当前误差 | 稳态误差、震荡 |
| 积分(I) | 消除稳态误差 | 积分饱和、响应变慢 |
| 微分(D) | 预测误差趋势、增加阻尼 | 对噪声敏感 |
3.5 PID参数整定方法
参数整定,说白了就是找到Kp、Ki、Kd三个值的最佳组合。方法有很多,我挑几个常用的说说。
3.5.1 试凑法
这是最原始的方法,也是我早期用得最多的。步骤很简单:
- 先把Ki和Kd设为0,只调Kp,从小到大,直到系统出现轻微震荡。
- 然后把Kp往回退一点(比如退到震荡值的60%-70%)。
- 加入Ki,从很小开始,慢慢增加,直到稳态误差消除。
- 最后加Kd,从很小开始,观察系统是否更平稳。
这个方法虽然土,但很实用。我建议新手先用试凑法找感觉。
3.5.2 Ziegler-Nichols法
这是一个经典方法,适合有理论基础的朋友。步骤:
- 同样先只调Kp,找到系统临界震荡时的Kp值(记为Ku)和震荡周期(记为Tu)。
- 然后按以下公式计算PID参数:
P控制器: Kp = 0.5 * Ku
PI控制器: Kp = 0.45 * Ku, Ki = 1.2 * Kp / Tu
PID控制器: Kp = 0.6 * Ku, Ki = 2 * Kp / Tu, Kd = Kp * Tu / 8
这个方法效率高,但前提是系统允许你把它调到临界震荡。有些场合不允许这样搞,比如精密加工设备。
3.5.3 自整定
现在很多伺服驱动器都自带自整定功能。你按一个按钮,驱动器自己跑一遍流程,自动算出PID参数。说实话,大部分场景下自整定够用了,但遇到特殊工况(比如大惯量、变负载),自整定出来的参数可能不是最优的,还是得手动微调。
我的建议:别完全依赖自整定。理解PID每个项的作用,你才能在自整定基础上做优化。我曾经遇到过自整定出来的Kd太大,导致系统高频抖动,手动降了一半才稳定下来。
好了,PID的基础就讲到这里。下面这张图总结了PID三个项的核心逻辑,你可以对照着理解:
这张图把PID的流程串起来了:目标位置和实际位置比较得到误差,误差分别经过比例、积分、微分三个通道处理,最后求和输出控制量,驱动电机运动,实际位置再反馈回来形成闭环。