标题:
请帮忙解读下单片机PID温度控制程序,看不懂
[打印本页]
作者:
我不会数学
时间:
2020-4-19 19:37
标题:
请帮忙解读下单片机PID温度控制程序,看不懂
u8 err = 0,last_err = 0,err_add = 0,err_weifen = 0;
void Timer1Interrupt(void) interrupt 3
{
static u16 value1,cnt_10ms=0;
TH1 = 0x3C; //10ms
TL1 = 0xB0;
value1++;
cnt_10ms = 0;
if(tDisp < Set_Num) //实际温度较低 升温
{
err = (Set_Num - tDisp)/10.0; //误差
err_add += err; //累计误差
err_weifen = err - last_err; //误差变化率
last_err = err; //更新误差
PWM_SW = PID_P * err + PID_I * err_add + PID_D * err_weifen;
if(PWM_SW == 1)PWM_SW = 2;
Shengwen_IN1 = 1;
Shengwen_IN2 = 0;
Jiangwen_IN1 = 0;
Jiangwen_IN2 = 0;
PWM_JW = 0;
}
else if(tDisp > Set_Num) //实际温度较高 降温
{
err = (tDisp - Set_Num)/10.0; //误差
err_add += err; //累计误差
err_weifen = err - last_err; //误差变化率
last_err = err; //更新误差
PWM_JW = PID_P * err + PID_I * err_add + PID_D * err_weifen;
if(PWM_JW == 1)PWM_JW = 2;
Shengwen_IN1 = 0;
Shengwen_IN2 = 0;
Jiangwen_IN1 = 1;
Jiangwen_IN2 = 0;
PWM_SW = 0;
}
else
{
PWM_SW = 0;
PWM_JW = 0;
}
if(value1<PWM_SW)
{
ENSW = 1;
}
else
{
ENSW = 0;
}
if(value1<PWM_JW) //
{
ENJW = 1;
}
else
{
ENJW = 0;
}
if(value1>10)
{
value1 = 0;
}
}
作者:
我不会数学
时间:
2020-4-20 08:58
有人帮忙解答下吗?
作者:
mengzhixinheng
时间:
2020-4-20 11:51
这个是个复杂的问题,最好自己还是先学下理论。如果可以自己写更好,不能就调用别人写好的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1