📄 pid.c
字号:
typedef struct PID {
int SetPoint; // 设定目标 Desired value
int Proportion; // 比例常数 Proportional Const
int Integral; // 积分常数 Integral Const
int Derivative; // 微分常数 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors
// double Lastout; //上次输出
unsigned int E1; // e1>e2
unsigned int E2; //
int Pmax;//上限
int Pmin;//下限
} PID;
/*====================================================================================================
PID计算部分,遇限消弱积分PID防饱和,积分分离算法实现
=====================================================================================================*/
int PIDCalc( PID *pp, unsigned int NextPoint )
{
int dError,
Error;
Error = pp->SetPoint - NextPoint; //偏差
if (Error<=-pp->E1) return (pp->Pmin); //饱和
else if (Error>=pp->E1)
return (pp->Pmax);
else
{
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
if (Error>=pp->E2||Error<=-pp->E2) //分离
return (pp->Proportion * Error // 比例项
+ pp->Derivative * dError );//PD,考虑限幅
else //位置式
{
pp->SumError += Error; // 积分
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项 //PID
);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -