📄 pid.c
字号:
#include"stdio.h"
#include "math.h"
typedef struct PID
{
int SetPoint; // 设定目标 Desired Value
float Proportion; // 比例常数 Proportional Const
float Integral; // 积分常数 Integral Const
float Derivative; // 微分常数 Derivative Const
int LastError; // Error[1]
int PrevError; // Error[2]
int SumError; // 误差累计值
} PID;
PID stPID;
int fOut=0;
stPID.Proportion = 1.5; // 设置PID比例值
stPID.Integral = 0.5; // 设置PID积分值
stPID.Derivative = 0.0; // 设置PID微分值
//具体要调用的:
float PIDCalc( PID *pp, int NextPoint )
{ int dError, Error;
Error = pp->SetPoint*10 - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
);
}
void active(int fOut)
{ if(fOut<=0)
{ turn_off_relay(); //温度高于设定值,关闭电炉
turn_off_timerB(); //停止计时
}
else
{ if (fOut>30*stPID.Proportion) //温度低于设定值2摄氏度
turn_on_relay(); //开电炉加热
else
{ turn_on_relay();
SP_INT_TIMEB(); } //初始化定时器,开始定时加热
}
}
main()
{ fOut = PIDCalc ( &stPID,(int)(fT*10) ); // PID计算
active();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -