void Timer1Interrupt(void) interrupt 3
{
static unsigned int value1,cnt_10ms=0;
TH1 = 0x0D8;//10ms
TL1 = 0x0F0;
value1++;
cnt_10ms = 0;
if(wendu > 20) //实际温度过高 打开PID 制冷
{
err = wendu - 20; //误差
err_add += err; //累计误差
err_weifen = err - last_err; //误差变化率
last_err = err; //更新误差
PWM_Fan = PID_P * err + PID_I * err_add + PID_D * err_weifen;
PWM_Heat = 0;
}
else if(wendu < 20) //实际温度过低 打开PID 运行加热
{
err = 20 - wendu; //误差
err_add += err; //累计误差
err_weifen = err - last_err; //误差变化率
last_err = err; //更新误差
PWM_Heat = PID_P * err + PID_I * err_add + PID_D * err_weifen;
PWM_Fan = 0;
}
else
{
PWM_Heat = 0;
PWM_Fan = 0;
}
if(value1<PWM_Fan)//占空比控制输出
{
Fan_Diode = 1;
}
else
{
Fan_Diode = 0;
}
if(value1<PWM_Heat)//占空比控制输出
{
Heat_Diode = 1;
}
else
{
Heat_Diode = 0;
}
if(value1>100)
{
value1 = 0;
}
}
|