不完全微分PID控制算法用C语言实现!

1.不完全微分PID控制算法框图

2.不完全微分PID控制算法公式

3.不完全微分PID控制公式用C语言实现

微分先行的PID算法实现,包括位置型和增量型两种实现方式。

(1)位置型

void PIDRegulation(PID *vPID, float processValue)

{

  float thisError;
  float thisDev;
  thisError=vPID->setpoint-processValue;
  vPID->integral+=thisError;
  thisDev= vPID->derivativegain*(1- vPID-> alpha)*(thisError-vPID->lasterror)+ vPID-> alpha* vPID-> lastdev;
  vPID->result=vPID->proportiongain*thisError+vPID->integralgain*vPID->integral+ thisDev;
  vPID->lasterror=thisError;
  vPID->lastdev = thisDev;

}

/*定义结构体和公用体*/
typedef struct

{

  float setpoint;           //设定值

  float proportiongain;     //比例系数

  float integralgain;       //积分系数

  float derivativegain;     //微分系数

  float lasterror;          //前一拍偏差

  float lastdev;            //前一拍时的微分项值

  float alpha;              //不完全微分系数

  float result;             //输出值

  float integral;           //积分值

}PID;

(2)增量型

void PIDRegulation(PID *vPID, float processValue)

{

  float thisError;
  float increment;
  float deltaDev;
  float pError,dError,iError;

  thisError=vPID->setpoint-processValue; //得到偏差值
  pError=thisError-vPID->lasterror;
  iError=thisError;
  dError=thisError-2*(vPID->lasterror)+vPID->preerror;
  deltaDev= vPID->derivativegain*(1- vPID-> alpha)*dError+ vPID-> alpha* vPID-> lastdeltadev;
  increment=vPID->proportiongain*pError+vPID->integralgain*iError+ deltaDev;   //增量计算
  vPID->preerror=vPID->lasterror;  //存放偏差用于下次运算
  vPID->lasterror=thisError;
  vPID-> lastdeltadev = deltaDev;
  vPID->result+=increment;

}

/*定义结构体和公用体*/
typedef struct

{

  float setpoint;           //设定值

  float proportiongain;     //比例系数

  float integralgain;       //积分系数

  float derivativegain;     //微分系数

  float lasterror;          //前一拍偏差

  float preerror;           //前两拍偏差

  float lastdeltadev;      //前一拍时的微分项增量

  float alpha;             //不完全微分系数

  float deadband;          //死区

  float result; //输出值

}PID;


虽然微分项可以提高控制系统的达到稳态的速度,但是高频干扰信号将会对系统影响比较大,从而影响 PID 对系统的调节效果。为了避免高频信号的干扰,又要保留微分环节的作用,在PID控制器的微分环节加入低通滤波器,构成不完全微分 PID 控制器。该控制器可以对微分信号进行过滤,消除高频信号干扰。

(参考https://www.cnblogs.com/foxclever/p/9127104.html

猜你喜欢

转载自blog.csdn.net/weibo1230123/article/details/86736946