-
- #define DEAD_BAND 50//死区控制值
- #define PID_OUT_MAX 200 //PID输出上限
- #define PID_OUT_MAX 200 //PID输出上限
- #include "math.h"
- //PID结构体
- typedef struct
- {
- volatile float Proportion; // 比例常数 Proportional Const
- volatile float Integral; // 积分常数 Integral Const
- volatile float Derivative; // 微分常数 Derivative Const
- volatile int Error1; // Error[n-1]
- volatile int Error2; // Error[n-2]
- volatile int iError; // Error[n]
- volatile int Error_sum;
- } PID
- /****************************************************************************************/ // 位置式PID
- // //pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
- /****************************************************************************************/
- float PID_Postion (float set_point,,float now_point,PID* sptr)
- {
- float iIncpid=0;
- sptr->iError=now_point-set_point; // 计算当前误差
- //死区控制算法
- if(fabs(sptr->iError)>DEAD_BAND)
- {
- sptr->Error_sum+=sptr->iError;//积分项
- iIncpid=sptr->Proportion * sptr->iError // P
- +sptr->Integral * sptr->Error_sum // I
- +sptr->Derivative * (sptr->iError-sptr->Error1); // D
- sptr->Error1=sptr->iError ; // 存储误差,用于下次计算
- }
- else
- {
- iIncpid=0;
- //sptr->Error_sum+=sptr->iError;//积分项
- sptr->Error1=sptr->iError; // 存储误差,用于下次计算
- }
-
- return(iIncpid); // 返回计算值
- }
- /****************************************************************************************/ //增量式PID
- // pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)] //
- /****************************************************************************************/
- float PID_increase(int iError,PID* sptr)
- {
-
- float iIncpid=0;
- sptr->iError=iError;//直接检测当前偏差
- if(fabs(sptr->iError)>DEAD_BAND)
- {
- iIncpid=sptr->Proportion * (sptr->iError-sptr->Error1) // P
- +sptr->Integral * sptr->iError // I
- +sptr->Derivative * (sptr->iError-2*sptr->Error1+sptr->Error2); // D
- sptr->Error2=sptr->Error1; // 存储误差,用于下次计算
- sptr->Error1=sptr->iError;
-
- }
- else
- {
- iIncpid=0;//输出增量值为0
- sptr->Error2=sptr->Error1; // 存储误差,用于下次计算
- sptr->Error1=sptr->iError;
- }
- return(iIncpid); // 返回增量值
- }
|