关于PID温度控制,在网上找了个程序,看了看有个问题弄不懂,请教各位高手,就是下面程序中的最后几行,当实际温度大于等于设定温度时,应该就关闭加热了,hightime应该等于0啊,但为...
关于PID温度控制,在网上找了个程序,看了看有个问题弄不懂,请教各位高手,就是下面程序中的最后几行,当实际温度大于等于设定温度时,应该就关闭加热了,hightime应该等于0啊,但为什么会出来如下这几行,搞不懂。请教高手。谢谢!
if(uk<0)
{
hightime=100-(-uk);
}
else
{
hightime=100-uk;
}
下面是程序:
/******************************
温度比较 PID算法
*******************************/
void pid_ys()
{
if(rltemp
{
if(settemp-rltemp>20) // 如果相差2度
{
hightime=100;//全速加热
}
else //否则运行PID算法进行平滑加热
{
e1 = settemp-rltemp;
duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
uk = uk+duk;
if(uk>100)
uk = 100;
else if(uk
uk = -100;
if(uk<0)
{
hightime=-uk;
}
else
{
hightime=uk;
}
e3 = e2;
e2 = e1;
}
}
if(rltemp>=settemp)//如果实际温度大于设定值
{
if(rltemp-settemp>0) //只要实际温度与设定值有偏差
{
hightime=0; //停止加热
}
else //其他情况运行PID算法,但参数与前面的刚好相反
{
e1 = rltemp-settemp;
duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
uk = uk+duk;
if(uk>100)
uk = 100;
else if(uk
uk = -100;
if(uk<0)
{
hightime=100-(-uk);
}
else
{
hightime=100-uk;
}
e3 = e2;
e2 = e1;
}
}
展开