位置式和增量式PID算法

本文详细介绍了位置式和增量式PID算法的推导过程,包括模拟PID公式、离散化后的位置式和增量式PID公式。讨论了PID控制算法的特点,如技术成熟、易掌握、不需要数学模型、控制效果好、鲁棒性强。同时对比了位置式与增量式PID在运算、误差积累、安全性和适用性方面的差异,并提供了PID参数调试的口诀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PID框图:

在这里插入图片描述
在这里插入图片描述

模拟的PID公式

u(t)=Kp[e(t)+1Ti∫0te(t)dt+Tdde(t)dt]u(t) = Kp [e(t) + \frac{1}{Ti} \int ^t_0 e(t) dt + Td \frac {de(t)}{dt} ]u(t)=Kp[e(t)+Ti10te(t)dt+Tddtde(t)]

将PID公式离散化,推导出位置式PID公式

u(k)=Kp[ek+1Ti∑j=0kej+Tdek−ek−1T]u(k) = Kp [e_k + \frac{1}{Ti} \sum ^k_{j=0} e_j + Td \frac {e_k - e_{k-1}}{T} ]u(k)=Kp[ek+Ti1j=0kej+TdTekek1]

=Kp∗ek+KpTi∑j=0kej+Kp∗Tdek−ek−1T= Kp *e_k + \frac{Kp}{Ti} \sum ^k_{j=0} e_j + Kp*Td \frac {e_k - e_{k-1}}{T} =Kpek+TiKpj=0kej+KpTdTekek1

=Aek+B(∑j=0k−1ej+ek)+C(ek−ek−1)= Ae_k + B(\sum ^{k-1}_{j=0} e_j +e_{k})+C(e_{k}-e_{k-1}) =Aek+B(j=0k1ej+ek)+C(ekek1)

推导出增量式PID公式

Δuk=uk−uk−1=Kp[ek−ek−1+TTiek+Tdek−2ek−1+ek−2T]\Delta u_k= u_k- u_{k-1}= Kp [e_k - e_{k - 1}+ \frac{T}{Ti} e_k + Td \frac {e_k -2 e_{k-1} + e_{k-2}}{T} ]Δuk=ukuk1=Kp[ekek1+TiTek+TdTek2ek1+ek2]

=Kp(1+TTi+TdT)ek−Kp(1+2TdT)ek−1+KpTdTek−2= Kp(1+ \frac{T}{Ti} + \frac{Td}{T} )e_k - Kp(1+ \frac{2Td}{T} )e_{k-1}+Kp\frac{Td}{T} e_{k-2}=Kp(1+TiT+TTd)ekKp(1+T2Td)ek1+KpTTdek2

=Aek+Bek−1+Cek−2= Ae_k + Be_{k-1}+Ce_{k-2}=Aek+Bek1+Cek2

其中,偏差=目标值-反馈值 ek=r(t)−y(t)e_{k}=r(t)-y(t)ek=r(t)y(t)

实现代码:

//定义PID结构体

typedef struct 
{
  __IO int      SetPoint;                                 //设定目标 Desired Value
  __IO long     SumError;                                 //误差累计
  __IO double   Proportion;                               //比例常数 Proportional Const
  __IO double   Integral;                                 //积分常数 Integral Const
  __IO double   Derivative;                               //微分常数 Derivative Const
  __IO int      LastError;                                //Error[-1]
  __IO int      PrevError;                                //Error[-2]
}PID;
#define  P_DATA      3.2                                 //P参数
#define  I_DATA      1.1                                 //I参数
#define  D_DATA      -0.15                               //D参数

//位置式 PID 控制设计

unsigned int LocPIDCalc(int NextPoint)
{
  int iError,dError;
  iError = sptr->SetPoint - NextPoint;                //偏差
  sptr->SumError += iError;                           //积分
  dError = iError - sptr->LastError;                  //微分
  sptr->LastError = iError;
  return(sptr->Proportion * iError                   //比例项
  + sptr->Integral * sptr->SumError                  //积分项
  + sptr->Derivative * dError);                      //微分项
}

//增量式PID控制设计

int IncPIDCalc(int NextPoint) 
{
  int iError,iIncpid;                                 //当前误差
  iError=sptr->SetPoint-NextPoint;                    //增量计算
  iIncpid=(sptr->Proportion * iError)                 //E[k]项
              -(sptr->Integral * sptr->LastError)     //E[k-1]项
              +(sptr->Derivative * sptr->PrevError);  //E[k-2]项
              
  sptr->PrevError=sptr->LastError;                    //存储误差,用于下次计算
  sptr->LastError=iError;
  return(iIncpid);                                    //返回增量值
}

PID控制算法的特点:

PID控制是一个二阶线性控制器 定义:通过调整比例、积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能。
优点:
a. 技术成熟
b. 易被人们熟悉和掌握
c. 不需要建立数学模型
d. 控制效果好
e. 鲁棒性
通常依据控制器输出与执行机构的对应关系,将基本数字PID算法分为位置式PID和增量式PID两种。其实两者没有本质区别,就是数字pid的两种不同 表示形式而已

从运算角度讲:
(1)位置型需要历次的偏差信号,而增量型只需一个增量信号即可。位置型计算繁琐,保存E占用很多内存,控制不方便。
从误差积累角度讲:
(2)位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;
(3)增量设计只与本次的偏差值有关,与阀门原来的位置无关,因而增量算法易于实现手动/自动无扰动切换。不产生积分失控,但是缺点在于积分截断效应大,溢出影响大。
从安全性角度讲:
(4)由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。
从适用性角度讲:
(5)增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

PID调试口诀:

参数整定找最佳, 从小到大顺序查。
先是比例后积分, 最后再把微分加。
曲线振荡很频繁, 比例度盘要放大。
曲线漂浮绕大弯, 比例度盘往小扳。
曲线偏离回复慢, 积分时间往下降。
曲线波动周期长, 积分时间再加长。
曲线振荡频率快, 先把微分降下来。
动差大来波动慢, 微分时间应加长。
理想曲线两个波, 前高后低四比一。
一看二调多分析, 调节质量不会低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值