PID控制算法

Junity 发布于 5 天前 135 次阅读 最后更新于 5 天前 1245 字 预计阅读时间: 6 分钟


AI 摘要

引言:PID(比例-积分-微分)控制通过对误差的三个维度调节实现精准控制:比例项快速响应误差,积分项消除稳态偏差,微分项抑制过冲。算法采用三量加权求和的形式调节系统输入,但在实际应用中需注意积分饱和问题并通过抗饱和算法优化控制效果。

PID算法

PID控制算法是一种通过调整系统的控制输入,使得系统的输出快速、准确逼近设定值的算法。例如,通过对一个水池的阀门应用PID算法控制进出水量,可以使得水池的水量总是保持在设定值上,即使被外界改变(往里加水或往外排水)也能迅速恢复。

PID算法的名称来源于其中起关键作用的三个值: 比例项 P ,积分项 I 和微分项 D 。其中,P 的意义是通过为误差乘上一个特定系数来实现负反馈调节;I 的作用是在时间上累积误差,防止当输出与目标差异很小时调节速度过低;D 的作用是根据误差减小的速度降低调节速度,防止出现“过冲”现象。

更具体地,考虑一个连续系统输入为 u(t) ,正的 u(t) 会使系统的输出增大,并且增大的速度和 u(t) 正相关;而负的 u(t) 恰恰相反。系统的输出为 f(t),而我们希望它保持在 a 。上面提到的水池就是这样一个系统的例子,这时 u(t) 可以看作是某时刻的进/出水量,系统的输出可以看作是水池的总水量。我们以这个系统为例子来进行讲解。

为了调节系统的输入,首先需要计算出目标值和当前值的误差值 e(t)=af(t) 。PID算法的第一项是利用这个误差进行负反馈调节,即将这个误差乘上一个系数 KP 后叠加到输出中:Pt=KPe(t)。这使得

单纯使用 Pt 来调节输入确实可以达到一定的控制效果,但系统对于输入的响应具有 延后性 ,这意味着只使用 Pt 会导致系统的输出在设定值的上下波动而无法稳定,并且这个波动的大小与 KP 有关:KP 越大,系统恢复到设定值的速度就越快,但波动也越大;反之波动小,但恢复到设定值的速度慢。此外,当系统的输出和设定值相差较小时,只使用 Pt 可能会使系统无法以一个很高的精度逼近设定值。为了解决这两个问题,PID算法引入了积分项 I 和微分项 D

微分项 D 解决了第一个问题,即系统会在设定值上下波动的问题。这个问题出现的原因是系统会 过冲 ,即由于延后性的存在,系统在误差快速减小时无法及时调整输入使之变小。PID算法的解决方法是,将误差对时间的微分乘上一个系数 KD 后叠加到输入中,这样当误差快速减小时,微分项会抑制输入从而防止过冲。D 项的计算公式为 Dt=KDde(t)dt

而积分项 I 解决了当误差较小时系统无法进一步逼近设定值的问题。PID将从 0 开始至今的误差按时间进行积分,并叠加到输入中,使得较小的误差可以随时间累积而变大,从而让系统进一步逼近给定值。这部分的公式如下:It=KI0te(τ)dτ ,其中 KIKPKD 类似,是一个可调节的系数。

PID算法的结果就是这三项之和:

PIDt=Pt+It+Dt=KPe(t)+KI0te(τ)dτ+KDde(t)dt

而某些教科书上的是将系数合并的结果:

PIDt=KP(e(t)+1Tt0te(τ)dτ+Tdde(t)dt)

并称 TtTD积分时间常数微分时间常数

积分饱和

如果认真思考可以发现,朴素的PID算法对积分项的引入不够完善。由于积分项会累积从 0 时刻到目前的所有误差,因此当系统平稳逼近给定值时,系统将因为正的积分项而产生过冲,这种现象称为 积分饱和 。为了防止这个现象,通常会在PID算法中加入 抗积分饱和算法 。常见的方法有:

  • 积分分离或者称为去积分算法;
  • 在饱和的时候将积分器的累计值初始化到一个比较理想的值;
  • 若积分饱和因为目标值突然变化而产生,将目标值以适当斜率的斜坡变化可避免此情形;
  • 将积分累计量限制上下限,避免积分累计量超过限制值;
  • 如果PID输出已经饱和,重新计算积分累计量,使输出恰好为合理的范围;

限于篇幅,读者可以自习了解。

此作者没有提供个人介绍。
最后更新于 2025-04-21