PID控制器开发笔记之四:梯形积分PID控制器的实现
從微積分的基本原理看,積分的實(shí)現(xiàn)是在無限細(xì)分的情況下進(jìn)行的矩形加和計(jì)算。但是在離散狀態(tài)下,時間間隔已經(jīng)足夠大,矩形積分在某些時候顯得精度要低了一些,于是梯形積分被提出來以提升積分精度。
1、梯形積分基本思路
在PID控制其中,積分項(xiàng)的作用是消除余差,為了盡量減小余差,應(yīng)提高積分項(xiàng)的運(yùn)算精度。在積分項(xiàng)中,默認(rèn)是按矩形方式來計(jì)算積分,將矩形積分改為梯形積分可以提高運(yùn)算精度。其計(jì)算公式為:
于是如果在位置型PID算法中引入梯形積分則可以修改計(jì)算公式如下:
同樣要在增量型PID算法中引入梯形積分則可以修改計(jì)算公式如下:
2、算法實(shí)現(xiàn)
從微積分的角度來說,當(dāng)微分分到無限小時,矩形積分與梯形積分是沒有區(qū)別的。但事實(shí)上我們的采樣時間不可能無限小,而且也不可能是連續(xù)的,那么采樣周期越大,那么矩形近似于實(shí)際曲線間的偏差就越大,而梯形積分則可以更加接近實(shí)際曲線,所以采用梯形積分代替矩形積分就可以得到更高的精度。
2.1、位置型PID算法實(shí)現(xiàn)
位置型PID的實(shí)現(xiàn)在前面就已經(jīng)完成,所不同的是前面使用的是矩形積分,在這一節(jié)我們將舉行積分部分改為梯形積分,同樣首先定義PID對象的結(jié)構(gòu)體:
/*定義結(jié)構(gòu)體和公用體*/ typedef struct {floatsetpoint;?????? //設(shè)定值floatproportiongain;???? //比例系數(shù)floatintegralgain;????? //積分系數(shù)floatderivativegain;??? //微分系數(shù)floatlasterror;???? //前一拍偏差floatresult; //輸出值floatintegral;//積分值 }PID;接下來實(shí)現(xiàn)PID控制器:
void PIDRegulation(PID *vPID, float processValue) {floatthisError;thisError=vPID->setpoint-processValue;vPID->integral+=(thisError+ vPID-> lasterror)/2;vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+vPID->derivativegain*(thisError-vPID->lasterror);vPID->lasterror=thisError; }從上述實(shí)現(xiàn)我們不難看出,變化僅僅只是在做積分累計(jì)vPID->integral時,將累計(jì)量按梯形方式累計(jì)。
2.2、增量型PID算法實(shí)現(xiàn)
同樣的增量型PID的梯形積分實(shí)現(xiàn)也就是即將積分部分有矩形積分部分換成梯形積分即可。首先定義PID對象的結(jié)構(gòu)體:
/*定義結(jié)構(gòu)體和公用體*/ typedef struct {floatsetpoint;?????? //設(shè)定值floatproportiongain;???? //比例系數(shù)floatintegralgain;????? //積分系數(shù)floatderivativegain;??? //微分系數(shù)floatlasterror;???? //前一拍偏差floatpreerror;???? //前兩拍偏差floatdeadband;???? //死區(qū)floatresult; //輸出值 }PID;接下來實(shí)現(xiàn)PID控制器:
void PIDRegulation(PID *vPID, float processValue) {floatthisError;floatincrement;floatpError,dError,iError;thisError=vPID->setpoint-processValue; //得到偏差值pError=thisError-vPID->lasterror;iError=(thisError+vPID-> lasterror)/2;dError=thisError-2*(vPID->lasterror)+vPID->preerror;increment=vPID->proportiongain*pError+vPID->integralgain*iError+vPID->derivativegain*dError;?? //增量計(jì)算vPID->preerror=vPID->lasterror;?//存放偏差用于下次運(yùn)算vPID->lasterror=thisError;vPID->result+=increment; }3、總結(jié)
積分項(xiàng)的引入目的就是為了消除系統(tǒng)的余差,那么積分項(xiàng)的計(jì)算精度越高,對消除系統(tǒng)的余差就越有利。梯形積分相較于矩形積分其精度有比較大的提高,所以對消除余差也就越有效。
歡迎關(guān)注:
總結(jié)
以上是生活随笔為你收集整理的PID控制器开发笔记之四:梯形积分PID控制器的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wxPython做界面的适用性
- 下一篇: AES算法重点详解和实现