试分析抗积分饱和PID对控制系统性能的影响以及其原因,抗积分饱和pid算法
引入积分功能,消除系统的静态误差,提高控制精度。但是,如果一个系统总是在一个方向上有一个均匀的偏差,那么它可能会无限积累,然后饱和,这将极大地影响系统性能。反积分饱和是解决这一问题的方法之一。在本节中,我们将针对积分饱和实施PID算法。
1、反积分饱和的基本思想
所谓积分饱和,是指系统在一个方向上出现偏差,PID控制器的输出由于积分的积累而扩大,导致控制器的输出增加超出正常范围,进入饱和区。当系统出现响应偏差时,需要先从饱和区退出,而不能快速响应反向偏差。
为了解决积分饱和问题,引入了抗积分饱和的PID算法。所谓反积分饱和算法的思想是在计算U(k)时,确定最后时刻的控制量U(k-1)是否已经超出极限范围。如果U(k-1) Umax,只会累积负偏差;如果U(k-1) Umin,只会累加正偏差。从而避免控制量长时间停留在饱和区域。
2.算法实现。
积分反饱和的思想很简单。它解释了如何限制控制器输出的最大值和最小值附近的积分累积,以防止恢复期间无响应。根据前面的评分系统,我们可以得到如下流程图:
(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浮动;//最大值
22
23浮动最小值;//最小值
24
25 } PID接下来,实施PID控制器:
1 void PIDRegulation(PID *vPID,浮点处理值)
2
3 {
四
5 float thisError
六
7 this error=vPID-setpoint-process value;
八
9如果(vPID-结果vPID-最大值)
10
11 {
12
13如果(thisError=0)
14
15 {
16
17 vPID-integral=this error;
18
19 }
20
21 }
22
23 else if(vPID-结果vPID-最小值)
24
25 {
26
27如果(thisError=0)
28
29 {
30
31 vPID-integral=this error;
32
33 }
34
35 }
36
其他37个
38
39 {
40
41 vPID-integral=this error;
四十二个
43 }
四十四
45
46
47 vPID-result=vPID-proportion gain * this error vPID-integral gain * vPID-integral vPID-derivative gain *(this error-vPID-lasterror);
48
49 vPID-lasterror=this error;
50
1} (2)增量PID算法的实现
增量式PID的反积分饱和的实现是一样的。在最基本的增量式PID算法中引入最大和最小限值,通过算法中限值的比较实现抗饱和操作。
首先,定义PID对象的结构:
1 /*定义结构和公共机构*/
2
3 typedef结构
四
5 {
六
7浮动设定值;//设置值
八
9浮动比例增益;//比例系数
10
11浮点积分增益;//积分系数
12
13浮点导数增益;//微分系数
14
15浮点lasterror//前一节拍偏差
16
17浮动预误差;//前两拍的偏差
18
19浮动死区;//死区
20
21浮点结果;//输出值
22
最大浮动23;//最大值
24
最小25浮动;//最小值
26
27 } PID接下来,实施PID控制器:
1 void PIDRegulation(PID *vPID,浮点处理值)
2
3 {
四
5 float thisError
六
7浮动增量;
八
9 float pError,dError,iError
10
11
12
13 this error=vPID-setpoint-process value;//获取偏差值
14
15 pError=this error-vPID-lasterror;
16
17 I error=0;
18
19 dError=this error-2 *(vPID-lasterror)vPID-preerror;
20
21
22
23 if(vPID-结果vPID-最大值)
24
25 {
26
27如果(thisError=0)
28
29 {
30
31 iError=thisError
32
33 }
34
35 }
36
37 else if(vPID-结果vPID-最小值)
38
39 {
40
41如果(thisError=0)
四十二个
43 {
四十四
45 iError=thisError
46
47 }
48
49 }
50
51其他
五十二个
53 {
54
55 iError=thisError
五十六岁
57 }
58
59 increment=vPID-proportion gain * pError vPID-integral gain * iError vPID-derivative gain * der error;//增量计算
60
61 vPID-preerror=vPID-lasterror;//为下一次操作存储偏差。
62
63 vPID-lasterror=this error;
64
65 vPID-result=增量;
66
67 }3.摘要
反积分饱和是为了防止由于长时间一个方向的偏差而导致对反方向偏差的滞后反应。本文的方法是,达到极值后,不再对一个方向的偏差做出反应,只对另一个方向的偏差做出反应。事实上,偏差可能会导致输出值超出限值,因此需要对输出值进行限制。
欢迎关注:
想更方便及时的阅读相关文章,请关注我的微信微信官方账号【木南创智】
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。