1.概述
本設(shè)計(jì)為基于STC89C52單片機(jī)的智能水溫控制系統(tǒng),控制對(duì)象以500mL陶瓷水箱為容器,并使用PID控制算法來調(diào)整水箱中500ml純凈水的溫度。 水溫可以在一定范圍內(nèi)人為設(shè)定,并能實(shí)現(xiàn)在下限溫度到上限溫度之間對(duì)每個(gè)點(diǎn)溫度的控制。
主要的功能為:
1.可以通過鍵盤自由設(shè)定上限溫度和下限溫度,通過12864液晶顯示,顯示的最小區(qū)分為1度
2.可以通過DS18B20溫度傳感器測(cè)量水溫并通過12864液晶顯示水的實(shí)際溫度,最小區(qū)分為0.1度
3.系統(tǒng)應(yīng)具有在水溫下限到水溫上限全量程內(nèi)的加熱功能(當(dāng)水溫低于水溫下限時(shí)開始加熱,水溫低于水溫上限時(shí)自動(dòng)斷電停止加熱)
4.使用PID控制算法,調(diào)節(jié)溫度
5.存儲(chǔ)設(shè)定的參數(shù)到EEEPROM中,并記錄升溫曲線(程序中使用DS1302,精確設(shè)定時(shí)間間隔,使用EEPROM記錄升溫曲線)
6.可以記錄3組參數(shù)以及對(duì)應(yīng)的3組升溫曲線(每組250個(gè)溫度數(shù)據(jù))
2.硬件設(shè)計(jì)
本次設(shè)計(jì)的硬件電路是由STC89C52單片機(jī)為控制核心,通過DS18B20溫度傳感器采集的溫度,傳送給單片機(jī)進(jìn)行PID計(jì)算,將結(jié)果作為PWM的占空比來驅(qū)動(dòng)加熱棒; 同時(shí),通過LCD12864顯示屏、按鍵和DS1302時(shí)鐘芯片,可實(shí)現(xiàn)溫度值的顯示和目標(biāo)溫度的設(shè)置。 整體硬件框圖如圖所示:
(1)12V轉(zhuǎn)5V穩(wěn)壓電路
由于系統(tǒng)的供電電源采用了4節(jié)18650鋰電池供電,需要使用LM2596-ADJ芯片進(jìn)行穩(wěn)壓,轉(zhuǎn)換成12V電壓,作為加熱棒的加熱電源,并通過LM7805-5.0穩(wěn)壓芯片轉(zhuǎn)換為5V電壓,作為單片機(jī)和其他功能電路的工作電壓。 穩(wěn)壓芯片的電路可根據(jù)芯片技術(shù)手冊(cè)中的參考電路來搭建,其電路圖如圖:
(2)按鍵電路
本次設(shè)置了4個(gè)控制按鍵,分別為設(shè)置鍵、增加鍵、減少鍵和OK鍵,通過這四個(gè)按鍵,可以根據(jù)用戶的需求來調(diào)整相應(yīng)的參數(shù)。
(3) DS1302時(shí)鐘電路
DS1302時(shí)鐘電路可以為系統(tǒng)提供實(shí)時(shí)年、月、日、星期、時(shí)、分、秒。
(4)加熱控制電路
加熱電路主要三極管及功率MOS管搭建而成的,3個(gè)三極管為MOS管的提供可靠的控制電平。 如圖所示,當(dāng)單片機(jī)引腳為高電平時(shí),三極管T3導(dǎo)通,T2導(dǎo)通,T1截止,從而MOS管的G極接地,MOS管截止; 相反,當(dāng)單片機(jī)引腳為低電平時(shí),三極管T3截止,T2截止,T1導(dǎo)通,從而MOS管的G極接電源,MOS管導(dǎo)通,加熱棒加熱。
其他電路都相對(duì)簡(jiǎn)單,就不一一解釋了。
(5)總體硬件電路圖
3.軟件設(shè)計(jì)
系統(tǒng)軟件所需實(shí)現(xiàn)的功能主要為:
1.按鍵輸入與設(shè)置
2.顯示屏界面顯示
3.PID算法調(diào)節(jié)
4.時(shí)鐘讀取及顯示
由于代碼較多,這里僅列出PID及主函數(shù)部分代碼
注:PID算法的難點(diǎn)在于需要根據(jù) 具體的環(huán)境調(diào)試出性能較的PID參數(shù),因此程序用在其他環(huán)境上需要調(diào)整PID參數(shù)。
(1) PID算法調(diào)節(jié)函數(shù)
int16 Proportion = 64; // 比例常數(shù) Proportional Const
int16 Integral = 0; // 積分常數(shù) Integral Const
int16 Derivative = 54; // 微分常數(shù) Derivative Const
float LastError; // Error[-1]
float PrevError; // Error[-2]
float SumError; // Sums of Errors
float Now_temp;
float Target_temp;
float Temp_Out;
float PID_Calc(float NextPoint ,float SetPoint)
{
float D_Error,Error;
float II;
Error = SetPoint-NextPoint; //偏差
SumError+=Error; // 積分
D_Error =LastError-PrevError; // 當(dāng)前微分
PrevError = LastError;
LastError = Error;
II = Integral*SumError/10000.0; //積分縮小10000倍
if(II>30) //積分飽和限制
{
II=30;
}
return (Proportion*Error+II+Derivative*D_Error);
}
void Control_Temp(void)
{
Now_temp = Temp_numbe;
Target_temp = Set_temp;
if(Now_temp>High_temp)
{
PWM_duty = 0;
}
else
{
Temp_Out = PID_Calc(Now_temp,Target_temp);
if(Temp_Out >= 100) Temp_Out = 100;
else if(Temp_Out <=0) Temp_Out = 0;
//不同的溫度設(shè)置不同的比例補(bǔ)償熱量損失
//Temp_Out = Temp_Out+Target_temp/80.0*20;
PWM_duty = (int)Temp_Out;
}
}
(2)主函數(shù)
void main(void)
{
int16 temp; //溫度緩存值
System_Init(); //系統(tǒng)初始化
while (1)
{
LED2 = 0;
Ds1302_time();
real_time = readtime[12]*10+readtime[13]; //從1302中讀取秒值
real_time = real_time%temp_cycle;
Temp_numbe = Temp_collect(); //采集溫度
if(temp_save_flag == 1 && start_warm_flag == 1) //按下了存儲(chǔ)按鍵
{
if((real_time == start_time)&&(real_time- last_real_time!=0)) //每隔10S記錄一次時(shí)間
{
temp = (int16)(Temp_numbe*100+0.5); //將溫度值增大100倍,保留兩位小數(shù)
Write_DATA_EEPROM(temp,Write_add,time); //將溫度寫入EEPROM中保存
time++;
if(time >= 250) //最多記錄250組的值
{
time = 250;
}
}
}
last_real_time = real_time;
if(start_warm_flag == 1)
{
Control_Temp(); //溫度控制函數(shù)
}
else
{
PWM_duty = 0;
}
//上限報(bào)警
if(Temp_numbe > High_temp) LED0 = 0;
else LED0 = 1;
//下限報(bào)警
if(Temp_numbe < Low_temp) LED1 = 0;
else LED1 = 1;
Init_LCD12864_Set(); //LCD12864液晶顯示數(shù)據(jù)的標(biāo)識(shí)
LCD12864_Show_DATA(); //LCD12864液晶顯示數(shù)據(jù)
UART_Send_temp(); //將采集溫度并通過串口發(fā)送到上位機(jī)
//Uart_Send_time(); //將DS1302的時(shí)間發(fā)送給電腦
UART_Send_PWM(); //將控制加熱棒的PEM占空比實(shí)時(shí)發(fā)送監(jiān)控
UART_SendData('
');
}
}
-
單片機(jī)
+關(guān)注
關(guān)注
6023文章
44376瀏覽量
628294 -
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6417瀏覽量
110092 -
STC89C52
+關(guān)注
關(guān)注
41文章
330瀏覽量
81816 -
穩(wěn)壓電路
+關(guān)注
關(guān)注
28文章
381瀏覽量
56424 -
按鍵電路
+關(guān)注
關(guān)注
1文章
35瀏覽量
21710
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論