微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机PID算法程序(三)增量式PID控制算法

51单片机PID算法程序(三)增量式PID控制算法

时间:11-24 来源:互联网 点击:

当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步进电动机)时,需要用PID的“增量算法”。


增量式PID控制算法可以通过(2-4)式推导出。由(2-4)可以得到控制器的第k-1个采样时刻的输出值为:


(2-5)


将(2-4)与(2-5)相减并整理,就可以得到增量式PID控制算法公式为:


(2-6)


其中



由(2-6)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C,只要使用前后三次测量的偏差值,就可以由(2-6)求出控制量。


增量式PID控制算法与位置式PID算法(2-4)相比,计算量小得多,因此在实际中得到广泛的应用。


位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:


(2-7)


(2-7)就是目前在计算机控制中广泛应用的数字递推PID控制算法。



增量式PID控制算法C51程序



typedef struct PID


{


int SetPoint;//设定目标Desired Value


long SumError;//误差累计


double Proportion;//比例常数Proportional Const


double Integral;//积分常数Integral Const


double Derivative;//微分常数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;//比例常数Proportional Const


sptr->Integral = 0;//积分常数Integral Const


sptr->Derivative = 0;//微分常数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);


}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top