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