PID算法介绍

位式控制算法


流程图

tFzgYD.png

特点

  1. 位式控制算法输出信号只有H/L两种状态
  2. 算法输出信号out的依据:
    • Pv < Sv ==> H
    • Pv >=Sv ==> L
  3. 只考察控制对象当前的状态值

PID控制算法


流程图

tk9h6J.png

Sv: 用户设定值——目标值

Pv: 控制对象的当前值


PID算法分析
  1. 从开机以来,传感器的所有采样数据序列

    • X1, X2, … , Xk-1, Xk
  2. 分析采样点的数据序列:可挖掘三方面信息

    1. P算法

      Ek = Sv - Xk

      • >0 : 当前未达标
    • =0 : 正好达标

      • <0 : 当前已达标

      POUT = Kp · Ek + OUTo    ——比例控制

      Kp : 比例系数

    OUTo : 常量

    考虑当前值

    1. I 算法

      历史偏差序列:E1, E2, … , Ek-1, Ek

      Sk = E1 + E2 + … + Ek-1 + Ek

      • >0:过去大部分时间未达标
      • =0:
      • <0:过去大部分时间已超标

      IOUT = Ki · Sk + OUT0 ——积分算法

      Ki:积分系数

      OUT0:常量

      考虑过去值

    2. D算法

      最近两次偏差相减:Dk = Ek - Ek-1

      • >0 : 偏差增大趋势
      • =0 :
      • <0 : 偏差减小趋势

      DOUT = Kd · Dk + OUT0    ——微分控制

      Kd : 微分系数

      OUT0 : 常量

      考虑预测值


PID算法的数学模型


PIDout = Pout + Iout + Dout

= (Kp·Ek + OUTo)+(Kp·Sk + OUTo)+(Kp·Dk + OUTo)

= Kp · (Ek + Sk + Dk) + OUTo

PID算法的参数处理

基于单片机控制


PIDout = Pout + Iout + Dout

  1. S k S_k Sk 的处理

S k = 1 T i × ∑ k = 0 n E k × T S_k = \frac{1}{T_i} \times \sum_{k=0}^{n}{E_k} \times T Sk=Ti1×k=0nEk×T

  • T : 采用周期(计算周期)

  • T i T_i Ti : 积分常数(积分时间)

采样周期一般要大于输出到负载的信号处理时间(比如一个脉冲周期以上),否则在一个脉冲信号未结束pid算法已经又运算出新的输出导致输出信号不停的改变。

积分分离: 一般工程上一开始,第一次到达目标之前,会取 T i T_i Ti 无穷大,相当于积分项不起作用,防止累积太多正向误差;当当前值与误差值的相差一般达到70%~80%时才把积分项加进去( T i T_i Ti取适当值)

  1. D k D_k Dk 的处理

D k = T d × E k − E k − 1 T D_k = T_d \times \frac {E_k - E_{k-1}}{T} Dk=Td×TEkEk1

T d T_d Td : 微分常数

T : 相当于dt,采样周期不能太大否则变化率不明显

单片机中的PID算法表达式——位置式PID


O U T = K p E k + K p T T i ∑ k = 0 n E k + K p T d T ( E k − E k − 1 ) + O U T 0 OUT = K_p E_k + K_p \frac{T}{T_i} \sum_{k=0}^n{E_k} + K_p \frac{T_d}{T} (E_k - E_{k-1}) + OUT_0 OUT=KpEk+KpTiTk=0nEk+KpTTd(EkEk1)+OUT0

需要确定的参数: K p , T i , T d , T K_p , T_i,T_d,T Kp,Ti,Td,T

E k , E k − 1 E_k,E_{k-1} Ek,Ek1可以通过计算得到

增量式PID

计算出的是控制量的增加值


O U T k = K p E k + K p T T i ∑ k = 0 n E k + K p T d T ( E k − E k − 1 ) + O U T 0 OUT_k = K_p E_k +K_p \frac{T}{T_i} \sum_{k=0}^n{E_k} + K_p \frac{T_d}{T} (E_k - E_{k-1}) + OUT_0 OUTk=KpEk+KpTiTk=0nEk+KpTTd(EkEk1)+OUT0

O U T k − 1 = K p E k − 1 + K p T T i ∑ k = 0 n − 1 E k + K p T d T ( E k − 1 − E k − 2 ) + O U T 0 OUT_{k-1} = K_p E_{k-1} +K_p \frac{T}{T_i} \sum_{k=0}^{n-1}{E_k} + K_p \frac{T_d}{T} (E_{k-1} - E_{k-2}) + OUT_0 OUTk1=KpEk1+KpTiTk=0n1Ek+KpTTd(Ek1Ek2)+OUT0

Δ O U T = O U T k − O U T k − 1 \Delta OUT = OUT_k - OUT_{k-1} ΔOUT=OUTkOUTk1

Δ O U T = K p ( E k − E k − 1 ) + K p T T i E k + K p T d T ( E k − 2 E k − 1 + E k − 2 ) \Delta OUT = K_p (E_k-E_{k-1}) +K_p \frac{T}{T_i} E_k + K_p \frac{T_d}{T} (E_k - 2E_{k-1} + E_{k-2}) ΔOUT=Kp(EkEk1)+KpTiTEk+KpTTd(Ek2Ek1+Ek2)

E k E_k Ek: 当前(本次)偏差值

E k − 1 E_{k-1} Ek1: 上次偏差值

E k − 2 E_{k-2} Ek2: 上上次偏差值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值