|
控溫烙鐵程式撰寫過程中,陸續出了幾個問題, 溫度變化過大,系統會LOCK ...
1.溫度變化過大,一加熱旁邊的溫度SENSOR立即反應,上升速度快,還沒反映到烙鐵頭又要降溫了,有人把溫度程式做了平均化,如此就比較不會有太大變異,甚至把最高最低去除..
2.加溫方面,60HZ的SSR加熱每一個週期 16ms,若是加熱的動作時間沒配合好,或許空溫會不準. 可能會改回去使用 DC+MOSFET..
3.系統LOCK著問題,雖然加入看門狗可以自動RESET但是問題仍需要找出來,溫度設定上面一但高到400度,AD到200(0~255)就容易發生,我把溫度固定在400還是發生,可見是 TC 讀取的地方出問題...
void main(void)
{
Init_Timer0();//起始定時器
LCD_Init();// LCM 啟動
LCD_Clear();//LCM清屏
//sprintf(DisplayWord," AD data %5d",00000);//顯示AD為零
Fire=1;//OFF Power
WDT_CONTR = 0x3d;//餵狗2.27s
while(1)
{
if(TimeFlag==1)//每1000Ms 更新一次
{
TimeFlag=0;//清除定時旗標
if(SH_flag==1)// show flag
{
SH_flag=0;
// sprintf(DisplayWord,"SET:%3d TC:%3d",(int)ADTT,(int)ADT);// ADT熱偶溫度 ADTT設定溫度顯示第一組的計數 第二組的計數
DisplayWord[0]=' ';
DisplayWord[1]='S';//Tab[IRcord[0]/16];
DisplayWord[2]='E';//Tab[IRcord[0]%16];
DisplayWord[3]='T';
DisplayWord[4]='=';//time_buf1[5]/10+'0';
DisplayWord[5]= ADTT/100+'0';
DisplayWord[6]= ADTT/10%10+'0';
DisplayWord[7]= ADTT%10%10+'0';
DisplayWord[8]= ' ';
DisplayWord[9]= 'T';
DisplayWord[10]='C';
DisplayWord[11]=':';
DisplayWord[12]= ADT/100+'0';;
DisplayWord[13]= ADT/10%10+'0';
DisplayWord[14]= ADT%10%10+'0';
DisplayWord[15]=' ';
// ADT熱偶溫度 ADTT設定溫度顯示第一組的計數 第二組的計數
LCD_Write_String(0,0, DisplayWord);//顯示在第一行
SV=ADTT*1.5+200;AV=ADT*2.0;//20130109 設定值增加100度
// sprintf(DisplayAWord,"SET=%3.0f TC=%3.0f",(int)ADTT*1.5+200,(int)ADT*2.0);//轉換成電壓 和 溫度
DisplayWord[0]=' ';
DisplayWord[1]='S';//Tab[IRcord[0]/16];
DisplayWord[2]='E';//Tab[IRcord[0]%16];
DisplayWord[3]='T';
DisplayWord[4]='=';//time_buf1[5]/10+'0';
DisplayWord[5]= SV/100+'0';
DisplayWord[6]= SV/10%10+'0';
DisplayWord[7]= SV%10%10+'0';
DisplayWord[8]= ' ';
DisplayWord[9]= 'T';
DisplayWord[10]='C';
DisplayWord[11]=':';
DisplayWord[12]= AV/100+'0';;
DisplayWord[13]= AV/10%10+'0';
DisplayWord[14]= AV%10%10+'0';
DisplayWord[15]=' ';
//sprintf(DisplayAWord,"SET=%3.0f TC=%3.0f",(int)SV,(int)AV);//20130101
LCD_Write_String(0,1, DisplayWord);//顯示在第二行
Fireout();
WDT_CONTR = 0x3d;//餵狗
}
}
if(AV>450)
{
Fire=1;
}
}
}
|
|