关于增量式PID的代码(C语言)实现的详细说明
网上可以找到很多关于增量式PID的一些解释说明;
最终都可以得到如下的公式:
Δu=Kp·{e(n)-e(n-1)}+Ki·e(n)+Kd·{e(n)-2·e(n-1)+e(n-2)} ;
最终转换成代码有很多是
typedef struct
{
float Kp; //比例系数Proportional
float Ki; //积分系数Integral
float Kd; //微分系数Derivative
float Ek; //当前误差
float Ek1; //前一次误差 e(k-1)
float Ek2; //再前一次误差 e(k-2)
}PID_IncTypeDef;
//非本人编写
float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID)
{
float PIDInc; //增量
PID->Ek = SetValue - ActualValue;
PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2);
PID->Ek2 = PID->Ek1;
PID->Ek1 = PID->Ek; return PIDInc;
}
有些人对代码存在一定的疑惑,其实代码是没有问题的;
公式为: