当执行机构需求的不是操控量的绝对值,而是操控量的增量(例如去驱动步进电动机)时,需求用PID的“增量算法”。
(2-5)
将(2-4)与(2-5)相减并收拾,就能够得到增量式PID操控算法公式为:
(2-6)
其间
增量式PID操控算法与方位式PID算法(2-4)比较,核算量小得多,因此在实践中得到广泛的使用。
方位式PID操控算法也能够经过增量式操控算法推出递推核算公式:
(2-7)
(2-7)便是现在在核算机操控中广泛使用的数字递推PID操控算法。
增量式PID操控算法C51程序
typedef struct PID
{
int SetPoint;
long SumError;
double Proportion;
double Integral;
double Derivative;
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;
sptr->PrevError = 0;
sptr->Proportion = 0;
sptr->Integral = 0;
sptr->Derivative = 0;
sptr->SetPoint = 0;
}
int IncPIDCalc(int NextPoint)
{
register int iError, iIncpid;
iError = sptr->SetPoint – NextPoint;
iIncpid = sptr->Proportion * iError
– sptr->Integral * sptr->LastError
+ sptr->Derivative * sptr->PrevError;
//存储差错,用于下次核算
sptr->PrevError = sptr->LastError;
sptr->LastError = iError;
//回来增量值
return(iIncpid);
}