跳到正文
格致开物MATHWIKI

比例积分微分控制

比例积分微分控制(proportional–integral–derivative control,PID)把当前误差、误差随时间的累积和变化率组合成输入。比例项迅速回应偏差,积分项可消除适当条件下的恒定稳态偏差,微分项回应变化趋势;控制效果由被控对象、参数、测量噪声和执行器约束共同决定。

误差信号与三个系数

令参考值为 r(t)、输出为 y(t)、误差为 e=r−y。理想形式为 u(t)=Kpe(t)+Ki∫0te(s)ds+Kde˙(t). 各系数的单位应使三项与输入同量纲。积分初值也是控制器状态的一部分。理想微分会放大高频噪声,工程实现通常增加低通滤波,或对测量值而非设定值求微分,以减小参考阶跃引起的冲击。[1][2]

一阶对象中的比例与积分

构造归一化对象 y˙=−y+u+d,恒定扰动 d,希望跟踪常数 r。只用比例控制 u=Kp(r−y),稳态满足 y∞=Kpr+d1+Kp,e∞=r−d1+Kp. 例如 r=1,d=0,Kp=2,稳态输出只有 2/3;增加有限比例增益会减小但不完全消除这个偏差。

加入积分状态 z˙=r−y,取 u=2(r−y)+2z。对恒定 r,d,误差满足 e¨+3e˙+2e=0。在 r=1,d=0,y(0)=z(0)=0 下,e(0)=1,e˙(0)=−2,因此 e=e−2t,y=1−e−2t,z=12(1−e−2t),u=1+e−2t. 积分状态最终为二分之一,维持输入一,使对象能够停留在输出一。

比例控制输出趋于2/3,比例积分控制输出1-exp(-2t)趋于1
两条曲线来自相同一阶对象、相同参考阶跃和零初态;积分状态提供维持目标所需的非零稳态输入。

微分项与稳定条件

若理想PID作用于同一个对象且 r 为常数,代入 e˙=−y˙ 得 (1+Kd)y˙=−(1+Kp)y+Kpr+Kiz+d。闭环特征多项式为 (1+Kd)s2+(1+Kp)s+Ki. 当三个系数均严格为正时,这个二阶多项式的根实部均负,积分状态趋于平衡,从 z˙=0 得 y=r。这是本例的一阶对象结论,不能推广成“所有正PID参数都能稳定任意对象”;延迟、额外惯性或非最小相位特征会改变判据。

数值复核与饱和

下例仅模拟上述PI实例,采用显式Euler近似,步长减小时逼近解析轨迹;不求解一般PID调参。输入为步长和整数步数,不改写外部变量,返回输出序列,时间和返回空间均为 O(N)。

Python 3
import math

def simulate_pi(dt=0.01, steps=500):
    if not math.isfinite(dt) or not (0 < dt < 0.5):
        raise ValueError("step size must lie in (0, 0.5)")
    if type(steps) is not int or steps < 0:
        raise ValueError("steps must be a nonnegative integer")
    y, z = 0.0, 0.0
    outputs = [y]
    for _ in range(steps):
        error = 1.0 - y
        u = 2.0 * error + 2.0 * z
        y, z = y + dt * (-y + u), z + dt * error
        outputs.append(y)
    return outputs

ys = simulate_pi()
print(ys[-1])
print(1 - math.exp(-10))

输出接近一,与解析值 1−e−10 比较可见离散误差。若实际输入被夹在有限区间,误差仍可能使积分状态不断累积,造成饱和解除后的过度控制,称为积分饱和或积分累积;抗饱和设计需要把实际可用输入反馈给积分环节。

变式。 保持对象和PI参数,施加恒定 d=1/2。稳定平衡仍有 y=1,此时所需 u=1/2、z=1/4;若执行器无法提供所需稳态输入,积分也不能创造缺失的控制能力。

参考资料

  1. ↑ MathWorks,Proportional-Integral-Derivative (PID) Controllers,Parallel Form;标准形式与导数滤波系数Tf。
  2. ↑ Seth Teller,MIT6.141: Motor Control,比例、积分、微分项与积分饱和。