pid控制中积分控制指什么,数字pid控制器积分项的改进有哪些

  pid控制中积分控制指什么,数字pid控制器积分项的改进有哪些

  在常用的PID控制算法中,积分系数Ki是恒定的,所以在整个控制过程中积分增量是恒定的。而系统对积分项的要求是,当系统偏差较大时,积分作用要减弱甚至不存在,当偏差较小时,积分作用要加强。如果积分系数大,会造成积分超调甚至饱和;如果很小,短时间内不会消除静态误差。因此,如何根据系统的偏差来改变积分速度是提高系统质量所必需的。变积分PID算法正好可以满足这一要求。

  1.变量积分的基本思想

  变积分PID的基本思想是试图改变积分项的累加速度,使其与偏差相对应:偏差越大,积分越慢;偏差越小,积分越快。将系数设为f(err(k)),它是err(k)的函数。当err(k)增大时,f减小,反之亦然。可变PID积分项的表达式为:

  f(err(k))和err(k)之间的函数关系可以根据具体情况设定,可以是线性的,也可以是非线性的。一般情况下,设置如下:

  从上式可以看出,f(err(k))的值在[0,1]的区间内变化。当偏差值err(k)大于分离区间A B时,当前偏差err(k)不会累加;当偏差值err(k)小于b时,加上当前偏差err(k)进行累加;当它在B和A B之间时,按照一定的函数关系随err(k)变化。那么可变积分PID算法可以表示为:

  上面提到的f(err(k))函数只是我们列举的一个。其实可以采取任何可行的方式,哪怕是非线性函数,只要更符合被控对象的特性。

  增量PID算法的变量积分表示如下:

  看到这个公式,很多人可能会觉得和之前积分分离算法的公式很像。尤其是在增量算法中,它们的形式确实是一样的,但是意义是不一样的,所以我们来看看有什么不同。稍后我们会做一个总结。

  2.算法实现。

  其实改变积分就是通过判断偏差,让积分在不同的速度下累加。这个系数在0到1之间,可以通过多种方式实现。在这里,我们线性地实现它。变量积分的控制流程图如下:

  首先,实现一个处理f(e(k))的函数。有了前面的函数关系表达式,实现为响应的代码就非常简单了:

  1 /*可变整系数处理函数,实现输出在0和1之间的分段线性函数*/

  2 /*当偏差的绝对值小于最小值时,输出为1;当偏差的绝对值大于最大值时,输出为0 */

  3 /*当偏差的绝对值在最大值和最小值之间时,输出在0和1之间变化*/

  4 /*浮点误差,当前输入偏差值*/

  5 /* float absmax,绝对偏差的最大值*/

  6 /* float absmin,绝对偏差的最小值*/

  7静态浮点变量积分系数(浮点误差、浮点absmax、浮点absmin)

  8 {

  九

  10浮动系数=0.0;

  11

  12 if(abs(误差)=absmin)

  13 {

  14

  15因子=1.0;

  16

  17 }

  18 else if(abs(误差)absmax)

  19 {

  20

  21因子=0.0;

  22

  23 }

  其他24个

  25

  26 {

  27

  28因子=(absmax-abs(误差))/(ABS max-ABS min);

  29

  30 }

  31

  32返回因子;

  33

  34 }(1)位置PID算法的实现

  基于位置PID的变积分的实现是为了获得绝对偏差更大的变积分系数。然后,实现PID算法,并且也首先定义PID对象的结构:

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

  2

  3 typedef结构

  四

  5 {

  六

  7浮动设定值;//设置值

  八

  9浮动比例增益;//比例系数

  10

  11浮点积分增益;//积分系数

  12

  13浮点导数增益;//微分系数

  14

  15浮点lasterror//前一节拍偏差

  16

  17浮点结果;//输出值

  18

  19浮点积分;//整数值

  20

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

  22

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

  24

  25 } PID接下来,实施PID控制器:

  1 void PIDRegulation(PID *vPID,浮点处理值)

  2 {

  三

  4 float thisError

  五

  6浮动因子;

  七

  8 this error=vPID-setpoint-process value;

  九

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

  11

  12

  13

  14 vPID-integral=factor * this error;

  15

  16 vPID-result=vPID-proportion gain * this error vPID-integral gain * vPID-integral vPID-derivative gain *(this error-vPID-lasterror);

  17

  18 vPID-lasterror=this error;

  19

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

  同理,基于增量式PID的变积分实现也是一样的。首先,定义PID对象的结构:

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

  2 typedef结构

  3 {

  四

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

  六

  7浮动比例增益;//比例系数

  八

  9浮点积分增益;//积分系数

  10

  11浮点导数增益;//微分系数

  12

  13浮点lasterror//前一节拍偏差

  14

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

  16

  17浮动死区;//死区

  18

  19浮点结果;//输出值

  20

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

  22

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

  24

  25 } PID接下来,实施PID控制器:

  1 void PIDRegulation(PID *vPID,浮点处理值)

  2 {

  三

  4 float thisError

  五

  6浮动增量;

  七

  8 float pError,dError,iError

  九

  10浮动系数;

  11

  12

  13

  14 this error=vPID-setpoint-process value;//获取偏差值

  15

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

  17

  18

  19

  20 pError=this error-vPID-lasterror;

  21

  22 iError=factor * thisError

  23

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

  25

  26 increment=vPID-proportion gain * pError vPID-integral gain * iError vPID-derivative gain * der error;//增量计算

  27

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

  29

  30 vPID-lasterror=this error;

  31

  32 vPID-result=增量;

  33

  34 }3.摘要

  其实积分是有一定的专家经验的,因为在极限值的选取上,用什么样的函数来计算系数,有很大的灵活性。

  前面做了积分分离的算法,这次说的是变量积分的算法。它们有相似之处,也有不同之处。以下是对它们的一些解释。

  首先,这两种算法的设计思路不同。分离的思路是在偏差较大时取消积分;当偏差较小时,引入积分。变积分的实现是试图改变积分项的积累速度,在偏差较大时弱化积分;偏差小时,积分加强。一些所谓的改进的积分分离算法,实际上已经偏离了积分分离的基本思想,而是动态地改变了积分系数。在这一点上,尤其是在增量算法中,已经属于变积分的思想。

  其次,对于积分分离,这个操作是针对整个积分项的,这一点在位置PID算法中尤为明显。对于变量积分,它是对当前偏差的积分累加,也就是说,它只影响当前积分部分。再者,在具体实现方式上也有差异,尤其是在位置PID模式上。

  我们在这里讨论他们分歧的原因。显然,我们不能同时采用这两种优化方法,只能分别实现。稍后,我们将实现基于积分项的优化。

  欢迎关注:

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

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

郑重声明:本文由网友发布,不代表盛行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参数怎么调节
  • 留言与评论(共有 条评论)
       
    验证码: