PID控制算法01

PID控制算法

    • PID控制算法公式
      • 原理
      • 参数作用
    • PID算法及改进
      • 两个基本类型
        • 位置型PID控制
        • 增量型PID控制
      • 积分环节改进的PID控制
        • 积分分离的PID控制
        • 变速积分的PID控制
        • 抗积分饱和的PID控制
      • 微分环节改进的PID控制
        • 不完全微分PID控制
        • 微分先行PID控制

PID控制算法公式

原理

PID控制是一种在工业生产中应用最广泛的控制方法,其最大优点是不需要了解被控对象精确的数学模型,只需要在线根据被控变量与给定值之间的偏差以及偏差的变化率等简单参数,通过工程方法对比例系数 K P K_P KP,积分时间 K I K_I KI,微分时间 K D K_D KD三个参数进行调整,就可以得到满意的效果。

PID控制算法01_第1张图片
PID控制器的微分方程为:
u ( t ) = K P [ e ( t ) + 1 T I ∫ 0 t e ( t ) d t + T D d e ( t ) d t ] u(t)=K_P[e(t)+\frac{1}{T_I}\int_{0}^{t}{e(t)}dt+T_D\frac{de(t)}{dt}] u(t)=KP[e(t)+TI10te(t)dt+TDdtde(t)]

  • e ( t ) e(t) e(t)—给定值与被控变量的偏差
  • K P K_P KP—比例系数
  • K I K_I KI—积分时间常数
  • K D K_D KD—微分时间常数
  • t t t—从开始调节到输出当前控制量所经过的时间间隔

对上式左右两边分别进行拉氏变换,可得PID控制器的传递函数为:
G ( s ) = U ( s ) E ( s ) = K P ( 1 + 1 T I s + T D s ) G(s)=\frac{U(s)}{E(s)}=K_P(1+\frac{1}{T_Is}+T_Ds) G(s)=E(s)U(s)=KP(1+TIs1+TDs)
注:此处的传递函数仅为PID控制器,是不含反馈环节的

由于计算机只能处理数字信号,故将连续信号离散化,采样周期为T:
u ( k ) = K P { e ( k ) + T T I ∑ i = 0 k e ( i ) + T D T [ e ( k ) − e ( k − 1 ) ] } u(k)=K_P \Bigg\{e(k)+\frac{T}{T_I}\sum_{i=0}^{k}{e(i)}+\frac{T_D}{T}[e(k)-e(k-1)]\Bigg\} u(k)=KP{e(k)+TITi=0ke(i)+TTD[e(k)e(k1)]}
继续化简,用 K I K_I KI代替 K P T T I \frac{K_PT}{T_I} TIKPT,用用 K D K_D KD代替 K P T D T \frac{K_PT_D}{T} TKPTD
⟹ u ( k ) = K P e ( k ) + K I ∑ i = 0 k e ( i ) + K D [ e ( k ) − e ( k − 1 ) ] \Longrightarrow u(k)=K_P e(k)+K_I\sum_{i=0}^{k}{e(i)}+K_D[e(k)-e(k-1)] u(k)=KPe(k)+KIi=0ke(i)+KD[e(k)e(k1)]

  • 比例系数 K P K_P KP
  • 积分系数 K I K_I KI
  • 微分系数 K D K_D KD

参数作用

  1. 比例系数
  • 比例环节是PID控制器必不可少的环节,作用是放大误差信号,提高控制器对偏差信号的灵敏度
  • 当比例系数过大时,会使系统的超调量增加,出现振荡。控制系统的灵敏性和稳定性是相互矛盾的,比例系数的选择只能在稳定性与灵敏性间折中
  • 单纯的比例环节会引入稳态误差,由原理性稳态误差和结构性稳态误差构成
  1. 积分系数
  • 积分环节的主要作用是改善系统的稳态性能,消除系统的稳态误差
  • 当积分时间常数 T I T_I TI的减小可能导致系统超调量T增加,过小的 T I T_I TI会造成系统的振荡甚至不稳定,因为积分环节总是滞后于偏差的变化,过强的积分作用还会造成积分饱和; T I T_I TI的增大可能使系统趋于稳态值的速度减慢
  1. 微分系数
  • 微分环节根据偏差的变化趋势输出控制量,在偏差值发生较大变化时输出校正信号
  • 当微分时间常数 T D T_D TD增大时,系统相应速度加快,调节时间减小,但过大时,会使响应过程提前制动,从而延长调节时间并出现余差

PID算法及改进

两个基本类型

位置型PID控制

位置型PID控制算法,适用于不带积分元件的执行器,比如舵机和温控系统,执行器的动作位置与其输入信号呈一一对应的关系。PID控制器根据第k次被控对象采样结果与设定值之间的偏差 e ( k ) e(k) e(k)计算出第k次采样时所输出的控制量。位置型PID算法的数学表达式为(即上述推导):
u ( k ) = K P e ( k ) + K I ∑ i = 0 k e ( i ) + K D [ e ( k ) − e ( k − 1 ) ] u(k)=K_P e(k)+K_I\sum_{i=0}^{k}{e(i)}+K_D[e(k)-e(k-1)] u(k)=KPe(k)+KIi=0ke(i)+KD[e(k)e(k1)]

  • 之所以叫位置型PID控制,也是因为控制器的输出 u ( k ) u(k) u(k)对应执行器的实际位置
  • 由于误差积累项 ∑ i = 0 k e ( i ) \sum_{i=0}^{k}{e(i)} i=0ke(i),当前的输出 u ( k ) u(k) u(k)与过去所有状态有关
  • 需要积分限幅和输出限幅

增量型PID控制

与位置型PID算法相对应的是增量型PID算法,增量型算法适用于自身带有积分记忆元件的执行器,比如步进电机,此类执行器的特点是:执行器的动作终点位置与之前每次输入信号的累加值有关,每次执行器输入的控制信号决定本次执行器动作终点位置相对于上一次动作终点位置的改变量。增量型PID算法的数学表达式为:
Δ u ( k ) = u ( k ) − u ( k − 1 ) = K P [ e ( k ) − e ( k − 1 ) ] + K I e ( k ) + K D [ e ( k ) − 2 e ( k − 1 ) + e ( k − 2 ) ] \Delta{u(k)}=u(k)-u(k-1)=K_P [e(k)-e(k-1)]+K_Ie(k)+K_D[e(k)-2e(k-1)+e(k-2)] Δu(k)=u(k)u(k1)=KP[e(k)e(k1)]+KIe(k)+KD[e(k)2e(k1)+e(k2)]

  • 增量型PID中不需要累加误差,控制量 u ( k ) u(k) u(k)仅与最近3次采样值有关
  • 无需积分限幅,只需输出限幅

积分环节改进的PID控制

积分分离的PID控制

积分分离的基本思想是,当被控量与预设量偏差较大时,取消积分量,以免积分量使系统稳定性降低,超调量增大;当被控值接近定值时,引入积分控制,以消除静差,算法原理如下:
计算 e ( k ) = R − c ( k ) e(k)=R-c(k) e(k)=Rc(k),设定阈值 ε \varepsilon ε,控制器输出量为
u ( k ) = K P e ( k ) + β K I ∑ i = 0 k e ( i ) + K D [ e ( k ) − e ( k − 1 ) ] u(k)=K_P e(k)+\beta{K_I}\sum_{i=0}^{k}{e(i)}+K_D[e(k)-e(k-1)] u(k)=KPe(k)+βKIi=0ke(i)+KD[e(k)e(k1)]
∣ e ( k ) ∣ > ε \left|{e(k)}\right|>\varepsilon e(k)>ε,\beta = 0;若 ∣ e ( k ) ∣ ≤ ε \left|{e(k)}\right|\leq\varepsilon e(k)ε,\beta = 1
注:在 ∣ e ( k ) ∣ > ε \left|{e(k)}\right|>\varepsilon e(k)>ε时,虽然控制器输出控制量中不含积分项,但控制器仍然将每次采样后所得的偏差值进行累加

变速积分的PID控制

变速积分的基本思想是改变积分项的累加速度,使其与偏差大小相对应,当偏差值较大时,积分速度减慢,当偏差值较小时,积分速度加快。这样就可以抑制积分环节产生超调,同时缩短调节时间,算法原理如下:
计算 e ( k ) = R − c ( k ) e(k)=R-c(k) e(k)=Rc(k),设定系数值 A A A,控制器输出量为
u ( k ) = K P e ( k ) + K I ∑ i = 0 k α e ( i ) + K D [ e ( k ) − e ( k − 1 ) ] u(k)=K_P e(k)+{K_I}\sum_{i=0}^{k}\alpha{e(i)}+K_D[e(k)-e(k-1)] u(k)=KPe(k)+KIi=0kαe(i)+KD[e(k)e(k1)]
其中, α = A − ∣ e ( k ) ∣ A \alpha = \frac{A-\left|{e(k)}\right|}{A} α=AAe(k)。为使 α = A − ∣ e ( n ) ∣ A ∈ [ 0 , 1 ] \alpha = \frac{A-\left|{e(n)}\right|}{A}\in[0,1] α=AAe(n)[0,1]区间之内,需使 A > ∣ e ( k ) ∣ m a x A>\left|{e(k)}\right|_{max} A>e(k)max

抗积分饱和的PID控制

积分饱和现象:当控制系统输出的被控变量长时间未达到给定值时,这段时间内积分环节所产生的控制量将形成一个很大的积累值,PID控制器的输出控制量将由于积分环节的累加作用而不断增加。当控制量达到或超出执行机构的输入信号上下限时,此后执行器将进入饱和区,不再随着输入控制量的增加而进一步动作。当偏差值反向时,控制器的输出控制量需要很长时间才能退出饱和区,这段时间内执行器停留在极限位置而暂时失去控制。

所谓抗积分饱和法,就是在计算 u ( k ) u(k) u(k)时,首先判断上一时刻的控制量 u ( k − 1 ) u(k-1) u(k1)是否已经超出了极限范围:若 u ( k − 1 ) > u m a x u(k-1)>umax u(k1)>umax,则只累加负偏差,如果 u ( k − 1 ) < u m i n u(k-1)u(k1)<umin,则只累加正偏差。

微分环节改进的PID控制

不完全微分PID控制

不完全微分算法即在原微分环节上添加一个具有低通滤波作用的惯性环节,因此不完全微分环节的传递函数为:
G ( S ) = U D ( s ) E ( s ) = K P T D s 1 + T f s G(S)=\frac{U_D(s)}{E(s)}=\frac{K_PT_Ds}{1+T_fs} G(S)=E(s)UD(s)=1+TfsKPTDs
经化简,
( 1 + T f s ) U D ( s ) = K P T D s E ( s ) ⟹ U D ( s ) + T f s U D ( s ) = K P T D s E ( s ) (1+T_fs)U_D(s)={K_PT_Ds}{E(s)}\Longrightarrow U_D(s)+T_fsU_D(s)={K_PT_Ds}{E(s)} (1+Tfs)UD(s)=KPTDsE(s)UD(s)+TfsUD(s)=KPTDsE(s)
经拉氏反变换,写成微分方程为
u D ( t ) + T f d u D ( t ) d t = K P T D d e ( t ) d t u_D(t)+T_f\frac{du_D(t)}{dt}=K_PT_D\frac{de(t)}{dt} uD(t)+TfdtduD(t)=KPTDdtde(t)
取采样时间 T T T,将上式离散化得
u D ( k ) + T f u D ( k ) − u D ( k − 1 ) T = K P T D e ( k ) − e ( k − 1 ) T u_D(k)+T_f\frac{u_D(k)-u_D(k-1)}{T}=K_PT_D\frac{e(k)-e(k-1)}{T} uD(k)+TfTuD(k)uD(k1)=KPTDTe(k)e(k1)
整理得
u D ( k ) = T f T + T f u D ( k − 1 ) + K P T D T + T f [ e ( k ) − e ( k − 1 ) ] u_D(k)=\frac{T_f}{T+T_f}u_D(k-1)+\frac{K_PT_D}{T+T_f}[e(k)-e(k-1)] uD(k)=T+TfTfuD(k1)+T+TfKPTD[e(k)e(k1)]
α = T f T + T f \alpha = \frac{T_f}{T+T_f} α=T+TfTf,则 1 − α 1-\alpha 1α = T T + T f \frac{T}{T+T_f} T+TfT,因此不完全微分算法公式为
u D ( k ) = K D ( 1 − α ) [ e ( k ) − e ( k − 1 ) ] + α u D ( k − 1 ) u_D(k)=K_D(1-\alpha)[e(k)-e(k-1)]+\alpha{u_D(k-1)} uD(k)=KD(1α)[e(k)e(k1)]+αuD(k1)

微分先行PID控制

微分先行算法适用于给定量频繁改变的控制系统,被控值与给定值的偏差若出现频繁的跳变,如果对偏差进行微分,会使微分结果产生剧烈的脉冲变化,不利于系统稳定,而控制系统的被控量输出一般不会产生突变,采用微分先行算法可改善系统的动态特性,有利于系统的稳定。

微分先行即将对偏差的微分改为对被控变量的微分,微分环节的输出为
u D ( k ) = K P T D T [ c ( k ) − c ( k − 1 ) ] u_D(k)=\frac{K_PT_D}{T}[c(k)-c(k-1)] uD(k)=TKPTD[c(k)c(k1)]

你可能感兴趣的:(pid)