配色: 字号:
51单片机PID算法程序(三)增量式PID控制算法
2013-04-16 | 阅:  转:  |  分享 
  
51单片机PID算法程序(三)增量式PID控制算法



当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步进电动机)时,需要用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程序

/=========================================================================PIDFunctionThePID(比例、积分、微分)functionisusedinmainlycontrolapplications.PIDCalcperformsoneiterationofthePIDalgorithm.WhilethePIDfunctionworks,mainisjustadummyprogramshowingatypicalusage.==========================================================================/

typedefstructPID

{

intSetPoint;//设定目标DesiredValue

longSumError;//误差累计

doubleProportion;//比例常数ProportionalConst

doubleIntegral;//积分常数IntegralConst

doubleDerivative;//微分常数DerivativeConst

intLastError;//Error[-1]

intPrevError;//Error[-2]

}PID;





staticPIDsPID;

staticPIDsptr=&sPID;

/================================================================================InitializePIDStructurePID参数初始化===============================================================================/

voidIncPIDInit(void)

{

sptr->SumError=0;

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

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

sptr->Proportion=0;//比例常数ProportionalConst

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

sptr->Derivative=0;//微分常数DerivativeConst

sptr->SetPoint=0;

}



/===============================================================================增量式PID计算部分=================================================================================/

intIncPIDCalc(intNextPoint)

{

registerintiError,iIncpid; //当前误差

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

iIncpid=sptr->ProportioniError //E[k]项

-sptr->Integralsptr->LastError //E[k-1]项

+sptr->Derivativesptr->PrevError; //E[k-2]项

//存储误差,用于下次计算

sptr->PrevError=sptr->LastError;

sptr->LastError=iError;

//返回增量值

return(iIncpid);

}



献花(0)
+1
(本文系草木戒工作...首藏)