新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機PID算法程序(三)增量式PID控制算法

51單片機PID算法程序(三)增量式PID控制算法

作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

當執(zhí)行機構(gòu)需要的不是控制量的絕對值,而是控制量的增量(例如去驅(qū)動步進電動機)時,需要用PID的“增量算法”。

本文引用地址:http://m.butianyuan.cn/article/201611/320783.htm


增量式PID控制算法可以通過(2-4)式推導(dǎo)出。由(2-4)可以得到控制器的第k-1個采樣時刻的輸出值為:


(2-5)


將(2-4)與(2-5)相減并整理,就可以得到增量式PID控制算法公式為:


(2-6)


其中



由(2-6)可以看出,如果計算機控制系統(tǒng)采用恒定的采樣周期T,一旦確定A、B、C,只要使用前后三次測量的偏差值,就可以由(2-6)求出控制量。


增量式PID控制算法與位置式PID算法(2-4)相比,計算量小得多,因此在實際中得到廣泛的應(yīng)用。


位置式PID控制算法也可以通過增量式控制算法推出遞推計算公式:


(2-7)


(2-7)就是目前在計算機控制中廣泛應(yīng)用的數(shù)字遞推PID控制算法。



增量式PID控制算法C51程序



typedef struct PID


{


int SetPoint;//設(shè)定目標Desired Value


long SumError;//誤差累計


double Proportion;//比例常數(shù)Proportional Const


double Integral;//積分常數(shù)Integral Const


double Derivative;//微分常數(shù)Derivative Const


int LastError; //Error[-1]


int PrevError; //Error[-2]


} PID;

static PID sPID;

static PID *sptr = &sPID;

void IncPIDInit(void)

{

sptr->SumError = 0;

sptr->LastError = 0;//Error[-1]


sptr->PrevError = 0;//Error[-2]


sptr->Proportion = 0;//比例常數(shù)Proportional Const


sptr->Integral = 0;//積分常數(shù)Integral Const


sptr->Derivative = 0;//微分常數(shù)Derivative Const


sptr->SetPoint = 0;


}




int IncPIDCalc(int NextPoint)


{


register int iError, iIncpid;//當前誤差


iError = sptr->SetPoint - NextPoint;//增量計算


iIncpid = sptr->Proportion * iError//E[k]項


- sptr->Integral * sptr->LastError//E[k-1]項


+ sptr->Derivative * sptr->PrevError;//E[k-2]項


//存儲誤差,用于下次計算


sptr->PrevError = sptr->LastError;


sptr->LastError = iError;


//返回增量值


return(iIncpid);


}



評論


技術(shù)專區(qū)

關(guān)閉