typedef struct
{
float SV ;//用户设定值
float PV ;//当前值
float Kp ;//比例系数
float T ;//PID计算周期 采样周期
float Ti ;//积分时间
float Td ;//微分时间
//中间变量
float Ek ;//本次偏差
float Ek_1 ;//上一次偏差
float SEk ;//历史偏差之和
//中间计算结果
float Pout ;//
float Iout ;//
float Dout ;//
float OUT0 ;//补偿
float OUT ;//最终的计算结果
uint16_t c10ms ;//时间计数
uint16_t pwmcycle ;//PWM周期
}PID ;
void PID_Init(void)
{
pid.SV = 120 ;
pid.Kp = 30 ;
pid.T = 500 ;//PID计算周期
pid.Ti = 5000000 ;//温度惯性大取5000S 积分时间
pid.Td = 1000 ;//1S 微分时间 传感器采样反馈回来的温度变化率
pid.pwmcycle = 200;//PWM调制的周期
pid.OUT0 = 1;//默认最小值
}
uint16_t PID_Calc(void)
{
float DelEk ;
float ti,Ki ;
float td;
float kd;
float out ;
if(pid.c10mspid.pwmcycle) pid.OUT=pid.pwmcycle;//限制幅度
else if(out