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

    文章

    16153

    浏览量

    177269
  • PID
    PID
    +关注

    关注

    35

    文章

    1470

    浏览量

    85251
  • 计算机控制
    +关注

    关注

    0

    文章

    36

    浏览量

    10746
  • PID控制器
    +关注

    关注

    2

    文章

    172

    浏览量

    18546
收藏 人收藏

    评论

    相关推荐

    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

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

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

    Smith预估的预测PID控制器的设计

    Smith预估的预测PID控制器的设计  PID控制器因算法简单、鲁棒性好、可靠
    发表于 10-25 11:07 6608次阅读
    <b class='flag-5'>带</b>Smith预估<b class='flag-5'>器</b>的预测<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>的设计

    13个基于PID控制器的设计实例

    PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元比例P(proportion)、积分单元I(integration)和微分单元D
    发表于 11-15 11:36 72次下载

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

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

    PID控制器控制电压的详细介绍和PID控制器的C程序的概述

    本文档的主要内容介绍的是PID控制器控制电压的详细介绍和PID控制器的C程序的概述
    发表于 06-07 08:00 71次下载
    <b class='flag-5'>PID</b><b class='flag-5'>控制器</b><b class='flag-5'>控制</b>电压的详细介绍和<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>的C程序的概述

    pid控制器工作原理

    PID控制器广泛应用于工业过程控制。工业自动化领域的大约95%的闭环操作使用PID控制器控制器
    发表于 07-18 15:10 1.1w次阅读
    <b class='flag-5'>pid</b><b class='flag-5'>控制器</b>工作原理

    PID控制的理论和PID控制器设计的及PID控制器参数整定的以及分析

    PID控制作为一种经典的控制方法而广泛应用于工业控制中,是实际工业生产过程正常运行的基本保障。随着计算机技术的飞跃发展和人工智能技术渗透到自动控制
    发表于 12-04 08:00 26次下载
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b>的理论和<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>设计的及<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>参数整定的以及分析

    PID控制器的含义

    PID控制器的含义 PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差
    发表于 03-09 14:22 3640次阅读

    PID控制器与PWM控制器的区别

    在工业自动化和控制系统设计中,PID控制器(比例-积分-微分控制器)和PWM控制器(脉冲宽度调制控制器
    的头像 发表于 06-05 18:25 2696次阅读

    PID控制器的类型和选择指南

    PID控制器是一种广泛应用于工业控制系统中的控制器,它根据系统的偏差来计算控制量,以实现对系统的
    的头像 发表于 11-06 10:37 224次阅读