0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PID控制器开发笔记之八:带死区的PID控制器的实现

bojie1024 来源:bojie1024 作者:bojie1024 2022-12-06 10:39 次阅读

在计算机控制系统中,由于系统特性和计算精度等问题,致使系统偏差总是存在,系统总是频繁动作不能稳定。为了解决这种情况,我们可以引入带死区的PID算法

1、带死区PID的基本思想

带死区的PID控制算法就是检测偏差值,若是偏差值达到一定程度,就进行调节。若是偏差值较小,就认为没有偏差。用公式表示如下:

pYYBAGOOq3mAJIWWAAAYKl8zInE772.png

其中的死区值得选择需要根据具体对象认真考虑,因为该值太小就起不到作用,该值选取过大则可能造成大滞后。

带死区的PID算法,对无论位置型还是增量型的表达式没有影响,不过它是一个非线性系统。

除以上描述之外还有一个问题,在零点附近时,若偏差很小,进入死去后,偏差置0会造成积分消失,如是系统存在静差将不能消除,所以需要人为处理这一点。

2、算法实现

前面我们描述了带死区的PID控制的基本思想。在接下来我们来实现这一思想,同样是按位置型和增量型来分别实现。

(1)位置型PID算法实现

前面我们对微分项、积分项采用的不同的优化算法,他们都可以与死区一起作用于PID控制。这一节我们就来实现一个采用抗积分饱和、梯形积分、变积分算法以及不完全微分算法和死区控制的PID算法。首先依然是定义一个PID结构体

接下来我们实现带死区、抗积分饱和、梯形积分、变积分算法以及不完全微分算法的增量型PID控制器。/*定义结构体和公用体*/

typedef struct
{
  float setpoint;               /*设定值*/
  float kp;                     /*比例系数*/
  float ki;                     /*积分系数*/
  float kd;                     /*微分系数*/
  float lasterror;              /*前一拍偏差*/
  float preerror;               /*前两拍偏差*/
  float deadband;               /*死区*/
  float result;                 /*PID控制器计算结果*/
  float output;                 /*输出值0-100%*/
  float maximum;                /*输出值上限*/
  float minimum;                /*输出值下限*/
  float errorabsmax;            /*偏差绝对值最大值*/
  float errorabsmin;            /*偏差绝对值最小值*/
  float alpha;                  /*不完全微分系数*/
  float derivative;              /*微分项*/
  float integralValue;          /*积分累计量*/
}CLASSICPID;
接下来我们实现带死区、抗积分饱和、梯形积分、变积分算法以及不完全微分算法的增量型PID控制器。
void PIDRegulator(CLASSICPID vPID,float pv)
{
  float thisError;
  float result;
  float factor;

  thisError=vPID->setpoint-pv; //得到偏差值
  result=vPID->result;

  if (fabs(thisError)>vPID->deadband)
  {
    vPID-> integralValue= vPID-> integralValue+ thisError;

    //变积分系数获取
    factor=VariableIntegralCoefficient(thisError,vPID->errorabsmax,vPID->errorabsmin);

    //计算微分项增量带不完全微分
    vPID-> derivative =kd*(1-vPID->alpha)* (thisError-vPID->lasterror +vPID->alpha*vPID-> derivative;

result=vPID->kp*thisError+vPID->ki*vPID-> integralValue +vPID-> derivative;
  }
  else
  {
    if((abs(vPID->setpoint-vPID->minimum)deadband)&&(abs(pv-vPID->minimum)deadband))
    {
      result=vPID->minimum;
    }
  }

  /*对输出限值,避免超调和积分饱和问题*/
  if(result>=vPID->maximum)
  {
    result=vPID->maximum;
  }

  if(result<=vPID->minimum)
  {
    result=vPID->minimum;
  }

  vPID->preerror=vPID->lasterror;  //存放偏差用于下次运算
  vPID->lasterror=thisError;
  vPID->result=result;

  vPID->output=((result-vPID->minimum)/(vPID->maximum-vPID->minimum))*100.0;
}

3、总结

引入死区的主要目的是消除稳定点附近的波动,由于测量值的测量精度和干扰的影响,实际系统中测量值不会真正稳定在某一个具体的值,而与设定值之间总会存在偏差,而这一偏差并不是系统真实控制过程的反应,所以引入死区就能较好的消除这一点。

当然,死区的大小对系统的影响是不同的。太小可能达不到预期的效果,而太大则可能对系统的正常变化造成严重滞后,需要根据具体的系统对象来设定。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171192
  • PID
    PID
    +关注

    关注

    35

    文章

    1446

    浏览量

    83809
  • 计算机控制
    +关注

    关注

    0

    文章

    32

    浏览量

    10694
  • PID控制器
    +关注

    关注

    2

    文章

    156

    浏览量

    18334
收藏 人收藏

    评论

    相关推荐

    PID控制器开发笔记之一:PID算法原理及基本实现

    ; //微分系数floatlasterror;//前一拍偏差floatpreerror;//前两拍偏差floatdeadband;//死区floatresult; //输出值}PID;接下来实现
    发表于 04-21 16:58

    PID控制器开发笔记之二:积分分离PID控制器实现

    `前面的文章中,我们已经讲述了PID控制器实现,包括位置型PID控制器和增量型PID
    发表于 04-28 23:33

    PID控制器开发笔记之三:抗积分饱和PID控制器实现

    饱和的思想很简单,解释在控制器输出的最大最小值附近限制积分的累积情况,以防止在恢复时没有响应。根据前面得分系我们可以得到如下的流程图:(1)位置型PID算法实现对于位置型PID的抗积分
    发表于 05-05 17:24

    PID控制器开发笔记四:梯形积分PID控制器实现

    ; //微分系数floatlasterror;//前一拍偏差floatresult; //输出值floatintegral;//积分值}PID;接下来实现PID控制器:void
    发表于 05-13 11:37

    采用Labview实现PID控制器设计

    利用LabVIEW虚拟仪器开发平台,设计一个程序,可以对3阶以内的线性被控对象快速的确定PID控制器的各个参数,完成PID控制器的设计并给出
    发表于 04-23 09:40

    PID-PID控制器参数整定与实现

    PID-PID控制器参数整定与实现
    发表于 05-12 11:30

    一种简单的PID控制器调整方法

      在进行PID控制器工作之前,必须对其进行调整以适应要控制的过程的动态。设计者给出P,I和D项的默认值,这些值不能给出期望的性能,有时会导致不稳定性和缓慢的控制性能。
    发表于 09-01 17:58

    PID控制器是什么?PID控制器各校正环节的作用有哪些?

    PID控制器是什么?PID控制规律是什么?PID控制器各校正环节的作用有哪些?增量式
    发表于 07-13 07:16

    PID控制器控制规律

    工业生产过程中,对于生产装置的温度、压力、流量、液位等工艺变量常常要求维持在一定的数值上,或按一定的规律变化,以满足生产工艺的要求。PID控制器是根据PID控制原理对整个
    发表于 09-07 08:11

    PID控制器简介

    PID控制器简介在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制PID控制器
    发表于 09-07 08:06

    PID控制器原理

    PID控制器原理PID控制器实际上是对偏差的控制,其原理图如下:其数学的表达如下: u(x)=Kp(err(t)+1T.∫err(t)dt+
    发表于 09-07 09:01

    PID控制器的设计

    目 录一、序言二、PID控制器的设计1.PID控制原理图2.PID控制器传递函数的一般表达式三、
    发表于 02-23 07:14

    什么是pid控制,什么是pid控制器

    什么是pid控制器 所谓PID控制,就是在一个闭环控制系统中,使被控物理量能够迅速而准确地无限接近于
    发表于 09-10 12:39 1.6w次阅读
    什么是<b class='flag-5'>pid</b><b class='flag-5'>控制</b>,什么是<b class='flag-5'>pid</b><b class='flag-5'>控制器</b>

    pid控制器原理

    pid控制器原理       在工程實際中,應用最為廣泛的調節器控制規律為比例積分微分控制,簡稱
    发表于 09-10 12:44 1.3w次阅读
    <b class='flag-5'>pid</b><b class='flag-5'>控制器</b>原理

    pid控制器的输入输出_PID控制器控制实现

    本文首先介绍的是PID控制器的工作原理,其次介绍的是pid控制器的输入输出,最后介绍了PID控制器
    的头像 发表于 06-01 09:09 2.6w次阅读