日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PID控制器开发笔记之四:梯形积分PID控制器的实现

發(fā)布時間:2024/7/23 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PID控制器开发笔记之四:梯形积分PID控制器的实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從微積分的基本原理看,積分的實(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。