pid控制死区范围,带死区的pid控制方法有何优点

  pid控制死区范围,带死区的pid控制方法有何优点

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

  1.带死区PID的基本思想

  带死区的PID控制算法是检测偏差值。如果偏差值达到一定程度,就会进行调整。如果偏差值很小,则认为没有偏差。公式如下:

  死区值的选择应根据具体对象仔细考虑,因为值太小不起作用,值太大可能造成大滞后。

  带死区的PID算法对位置和增量表达式都没有影响,但它是一个非线性系统。

  除了上面的描述,还有一个问题。零点附近偏差较小时,当偏差设为0时,积分会消失。如果系统存在静态误差,则无法消除,需要人工处理。

  2.算法实现。

  我们已经描述了带死区PID控制的基本思想。接下来我们来实现这个思路,也是分别用位置型和增量型来实现的。

  (1)位置PID算法的实现

  我们对微分项和积分项采用了不同的优化算法,它们都可以和死区一起作用于PID控制。在本节中,我们将实现一种采用反积分饱和、梯形积分、变量积分算法、不完全微分算法和死区控制的PID算法。第一步是定义PID结构。

  1 /*定义结构和公共机构*/

  2

  3 typedef结构

  4 {

  5浮动设定值;/*设定值*/

  6浮动KP;/*比例因子*/

  7 float ki/*积分系数*/

  8浮动KD;/*微分系数*/

  9 float lasterror/*先前节拍偏差*/

  10浮点预误差;/*前两拍的偏差*/

  11浮动死区;/*死区*/

  12浮点结果;/*PID控制器的计算结果*/

  13浮点输出;/*输出值0-100%*/

  最大14浮动;/*输出值上限*/

  最小15浮动;/*输出值下限*/

  16浮点误差absmax;/*最大偏差绝对值*/

  17浮点误差absmin;/*绝对偏差的最小值*/

  18浮动;/*不完全微分系数*/

  19浮动衍生工具;/*微分项*/

  20浮点积分值;/*累计积分数*/

  21 } CLASSICPID接下来,实现了带死区、反积分饱和、梯形积分、变积分算法和不完全微分算法的增量式PID控制器。

  1个空PID调节器(经典PID vPID,浮动pv)

  2 {

  3 float thisError

  4浮点结果;

  5浮动因子;

  六

  7 this error=vPID-setpoint-PV;//获取偏差值

  8结果=vPID-结果;

  九

  10 if (fabs(thisError) vPID-死区)

  11 {

  12 vPID-integral value=vPID-integral value this error;

  13

  14 //可变积分系数采集

  15 factor=VariableIntegralCoefficient(this error,vPID- errorabsmax,vPID-error absmin);

  16

  7//用不完全微分计算微分项增量

  18 vPID-derivative=KD *(1-vPID-alpha)*(this error-vPID-lasterror vPID-alpha * vPID-derivative;

  19

  20 result=vPID-KP * this error vPID-ki * vPID-integral value vPID-derivative;

  21 }

  其他22个

  23 {

  24 if((abs(vPID-设定点-vPID-最小值)vPID-死区)(abs(pv-vPID-最小值)vPID-死区))

  25 {

  26结果=vPID-最小值;

  27 }

  28 }

  29

  30 /*对于输出限值,避免过冲和积分饱和*/

  31如果(结果=vPID-最大值)

  32 {

  33结果=vPID-最大值;

  34 }

  35

  36 if(结果=vPID-最小值)

  37 {

  38结果=vPID-最小值;

  39 }

  40

  41 vPID-preerror=vPID-lasterror;//为下一次操作存储偏差。

  42 vPID-lasterror=this error;

  43 vPID-result=结果;

  四十四

  45 vPID- output=((结果-vPID-最小值)/(vPID-最大值-vPID-最小值))* 100.0;

  40} (2)增量PID算法的实现

  在位置PID中,我们实现了综合PID控制器,对于增量PID,我们也实现了相应的控制器。除了这些组合之外,还可以根据具体需要组合和实现其他优化算法。第一步是定义PID结构。

  1 /*定义结构和公共机构*/

  2 typedef结构

  3 {

  4浮动设定值;/*设定值*/

  5浮动KP;/*比例因子*/

  6 float ki/*积分系数*/

  7浮动KD;/*微分系数*/

  8 float lasterror/*先前节拍偏差*/

  9浮动预误差;/*前两拍的偏差*/

  10浮动死区;/*死区*/

  11浮点结果;/*PID控制器的计算结果*/

  12浮点输出;/*输出值0-100%*/

  13浮动最大值;/*输出值上限*/

  14浮动最小值;/*输出值下限*/

  15浮点误差absmax;/*最大偏差绝对值*/

  16浮点误差absmin;/*绝对偏差的最小值*/

  17浮动阿尔法;/*不完全微分系数*/

  18浮点deltadiff/*微分增量*/

  19 } CLASSICPID接下来,实现了带死区、反积分饱和、梯形积分、变积分算法和不完全微分算法的增量式PID控制器。

  1个空PID调节器(经典PID vPID,浮动pv)

  2 {

  3 float thisError

  4浮点结果;

  5浮动因子;

  6浮动增量;

  7 float pError,dError,iError

  八

  9 this error=vPID-setpoint-PV;//获取偏差值

  10结果=vPID-结果;

  11

  12 if (fabs(thisError) vPID-死区)

  13 {

  14 pError=this error-vPID-lasterror;

  15 I error=(thisError vPID-lasterror)/2.0;

  16 dError=this error-2 *(vPID-lasterror)vPID-preerror;

  17

  18 //可变积分系数采集

  19 factor=VariableIntegralCoefficient(this error,vPID- errorabsmax,vPID-error absmin);

  20

  1//用不完全微分计算微分项增量

  22 vPID-delta diff=KD *(1-vPID-alpha)* dError vPID-alpha * vPID-delta diff;

  23

  24增量=vPID-KP * pError vPID-ki * factor * I error vPID-delta diff;//增量计算

  25 }

  其他26个

  27 {

  28 if((fabs(vPID-设定点-vPID-最小值)vPID-死区)(fabs(pv-vPID-最小值)vPID-死区))

  29 {

  30结果=vPID-最小值;

  31 }

  32增量=0.0;

  33 }

  34

  35结果=结果增量;

  36

  37 /*对于输出限制,避免过冲和积分饱和*/

  38如果(结果=vPID-最大值)

  39 {

  40结果=vPID-最大值;

  41 }

  四十二个

  43如果(结果=vPID-最小值)

  44 {

  45结果=vPID-最小值;

  46 }

  47

  48 vPID-preerror=vPID-lasterror;//为下一次操作存储偏差。

  49 vPID-lasterror=this error;

  50 vPID-result=结果;

  51

  52 vPID- output=((结果-vPID-最小值)/(vPID-最大值-vPID-最小值))* 100.0;

  53 }3.摘要

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

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

  欢迎关注:

  想更方便及时的阅读相关文章,请关注我的微信微信官方账号【木南创智】

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • waitpid函数作用,c wait函数
  • waitpid函数作用,c wait函数,详解C语言中的wait()函数和waitpid()函数
  • ,,javascript SpiderMonkey中的函数序列化如何进行
  • spiderfoot安装,spiderfoot会被对手反扫描
  • PySpider,pyspider官方文档
  • C语言PID,pid控制算法的c语言实现
  • pid控制器中微分的作用,pid控制微分方程
  • 微分先行的pid控制算法课程设计,什么是微分先行pid控制
  • 设计pid控制器并设定参数,pid控制器参数设置
  • PID控制器百科,PID控制实现
  • PID控制算法原理,pid 控制算法
  • pid控制中积分控制指什么,数字pid控制器积分项的改进有哪些
  • pid控制器的调节原则,试说明pid控制器的优点
  • 通过进程名查找进程的pid,linux根据程序名查进程
  • 串级控制系统pid怎么调,串级控制pid参数怎么调节
  • 留言与评论(共有 条评论)
       
    验证码: