|
楼主 |
发表于 2011-11-17 09:16:35
|
显示全部楼层
void HeatControl(void)
{
static unsigned int CountT,pointPWM=900;
static uint temT,Last_temT,vT,ErrorT,SetT=450;
static uchar plvT,plErrorT,HeatingStatus,LoopPwm=0,pLoopPwm=0;
temT=(uint)Temper; //输入Temper当前温度*10, SetT设定温度*10
if(temT>SetT) { ErrorT=temT-SetT; plErrorT=1; } else {ErrorT=SetT-temT; plErrorT=0;}
if(temT>Last_temT) { vT=temT-Last_temT; plvT=1; } else { vT=Last_temT-temT; plvT=0;}
CountT++;
HeaterOff;
if(CountT>1000) //?5S
{
CountT=0;
LoopPwm++; if(LoopPwm>9) LoopPwm=0;
if((ErrorT>100)&&(plErrorT==1)) //超出设定温度很多
{
if((vT>4)&&(plvT==1)) { HeatingStatus=8; } //快速升温极热
else if((vT>0)&&(plvT==1)) { HeatingStatus=7;} //很热
else if((vT>4)&&(plvT==0)) { HeatingStatus=4;} //适中
else if((vT>0)&&(plvT==0)) { HeatingStatus=5;} //微热
else { HeatingStatus=6;} //热
}
else if((ErrorT>30)&&(plErrorT==1)) //超出设定温度多
{
if((vT>4)&&(plvT==1)) { HeatingStatus=7; } //快速升温很热
else if((vT>0)&&(plvT==1)) { HeatingStatus=6;} //热
else if((vT>4)&&(plvT==0)) { HeatingStatus=3;} //微冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=4;} //适中
else { HeatingStatus=5;} //微热
}
else if((ErrorT>5)&&(plErrorT==1)) //超出设定温度
{
if((vT>4)&&(plvT==1)) { HeatingStatus=7; } //快速升温很热
else if((vT>0)&&(plvT==1)) { HeatingStatus=6;} //热
else if((vT>4)&&(plvT==0)) { HeatingStatus=2;} //冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=4;} //适中
else { HeatingStatus=5;} //微热
}
else if((ErrorT>1)&&(plErrorT==1)) //超出设定温度
{
if((vT>4)&&(plvT==1)) { HeatingStatus=6; } //快速升温热
else if((vT>0)&&(plvT==1)) { HeatingStatus=6;} //热
else if((vT>4)&&(plvT==0)) { HeatingStatus=2;} ///冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=3;} //微冷
else { HeatingStatus=5;} //微热
}
else if((ErrorT>100)&&(plErrorT==0)) //低于设定温度很多
{
if((vT>4)&&(plvT==1)) { HeatingStatus=4; } //快速升温适中
else if((vT>0)&&(plvT==1)) { HeatingStatus=3;} //微冷
else if((vT>4)&&(plvT==0)) { HeatingStatus=0;} //极冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=1;} //很冷
else { HeatingStatus=2;} //冷
}
else if((ErrorT>30)&&(plErrorT==0)) //低于设定温度多
{
if((vT>4)&&(plvT==1)) { HeatingStatus=6; } //快速升温热
else if((vT>0)&&(plvT==1)) { HeatingStatus=4;} //适中
else if((vT>4)&&(plvT==0)) { HeatingStatus=1;} //很冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=2;} //冷
else { HeatingStatus=3;} //微冷
}
else if((ErrorT>5)&&(plErrorT==0)) //低于设定温度
{
if((vT>4)&&(plvT==1)) { HeatingStatus=6; } //快速升温热
else if((vT>0)&&(plvT==1)) { HeatingStatus=4;} //适中
else if((vT>4)&&(plvT==0)) { HeatingStatus=1;} //很冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=2;} //冷
else { HeatingStatus=3;} //微冷
}
else if((ErrorT>1)&&(plErrorT==0)) //低于设定温度
{
if((vT>4)&&(plvT==1)) { HeatingStatus=6; } //快速升温热
else if((vT>0)&&(plvT==1)) { HeatingStatus=5;} //微热
else if((vT>4)&&(plvT==0)) { HeatingStatus=2;} //冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=2;} //冷
else { HeatingStatus=3;} //微冷
}
else //接近设定温度
{
if((vT>4)&&(plvT==1)) { HeatingStatus=6; } //快速升温热
else if((vT>0)&&(plvT==1)) { HeatingStatus=5;} //微热
else if((vT>4)&&(plvT==0)) { HeatingStatus=2;} //冷
else if((vT>0)&&(plvT==0)) { HeatingStatus=3;} //微冷
else { HeatingStatus=4;} //适中
}
switch(HeatingStatus)
{
case 0: { pointPWM=0; } break; //极冷
case 1: { if(pointPWM>50) pointPWM-=50; } break;
case 2: { if(pointPWM>10) pointPWM-=3; } break;
case 3: { if(pLoopPwm>0) pLoopPwm--;
else { if(pointPWM>0) pointPWM--; pLoopPwm=9; } } break;
case 4: ; break;
case 5: { if(pLoopPwm<9) pLoopPwm++;
else { if(pointPWM<999) pointPWM++; pLoopPwm=0; } } break;
case 6: { if(pointPWM<990) pointPWM+=3; } break;
case 7: { if(pointPWM<900) pointPWM+=50;} break;
case 8: { pointPWM=1000; } break; //极热
default: { pointPWM=1001; } break;
}
Last_temT=temT;
}
if(CountT>pointPWM) HeaterOn;
else if(CountT<pointPWM) HeaterOff;
else { if(LoopPwm>pLoopPwm) HeaterOn; else HeaterOff; } //输出HeaterOn开加热,HeaterOff关加热
} |
|