曾麗麗,李瑞盈,朱齊媛(嶺南師范學院信息科學與技術學院,廣東湛江524048)
基于51單片機的自動恒溫控制電路的設計
曾麗麗,李瑞盈,朱齊媛*
(嶺南師范學院信息科學與技術學院,廣東湛江524048)
本文以ATMEL公司的AT89C51為控制核心,采用數字溫度傳感器DS18B20采集水溫數據,通過繼電器控制加熱,使水溫達到50℃到70℃的設定溫度范圍內,從而實現自動恒溫控制。本設計在很大程度上可以實現對溫度的控制,同時也提高了單片機的開發能力,具有一定的實用性。
51單片機;溫度傳感器;恒溫控制
在國外,關于恒溫控制的課題研究起步較早,世界上各國在技術上發展很快,一些國家已經在實現自動化的基礎上向著完全自動化、無人化方向發展。而我國關于恒溫控制的課題研究起步較晚,目前在恒溫控制技術這方面的總體技術處于20世紀80年代中后期水平,成熟產品主要以“點位”控制為主。由于這些溫度控制系統都具有非線性時變、響應速度慢、時滯和的動態特性,能適應一般溫度系統的控制,難以準確地實現良好的控制性能[1]。本文介紹了一種自動恒溫控制系統,利用單片機AT89C51再結合PID控制調節實現水溫的智能控制,采用DS18B20讀出溫度,對水溫進行調節處理,使溫度可以保持在設定的范圍內,并在此基礎上并通過液晶顯示屏實現當前溫度的實時顯示。
本系統以AT89C51單片機為核心,加上電源電路、溫度采集電路、溫度設定及顯示電路、保護電路等部分組成。系統硬件結構框圖如圖1所示。
1.1單片機系統
單片機是整個控制系統的核心,是整個控制系統的中樞神經。在選擇單片機時,主要考慮到單片機的處理速度、數據儲存能力、價格以及通信方式,采用ATMEL公司的AT89C51單片機作為系統控制器。該單片機具有算術運算功能強,軟件編程靈活、自由度大,可用軟件編程實現各種算法和邏輯控制,并且其功耗低、體積小、成本低等優點,有效水溫采集和實時顯示以及加熱裝置進行控制[2]。
1.2溫度采集模塊
溫度采集模塊采集實時水溫,當水溫低于設定溫度值則加熱裝置自動啟動,相反,當水溫高于設定溫度值則加熱裝置自動關閉。本文采用DS18B20作為溫度采集模塊芯片。DSl8B20是DALLAS公司生產的單線數字溫度傳感器芯片,一種具有精度更高、適用電壓更寬、采用單總線、可組網等優點,在實際應用中可以將模擬信號轉換為串行數字信號,以供單片機處理。它的供電范圍為+3.0V~+5.5V,測溫范圍為-55~+125℃,溫度檢測精度可精確到0.0625℃,采用12位數字讀寫方式[3]。
本文擬設計的溫度控制系統水溫變動范圍為50~70℃,水溫測控精度為1℃,使用DS18B20可以很好的滿足該電路。DSl8B20內部功能模塊如圖2所示,主要由4部分組成:64位光刻ROM、溫度傳感器、非易失性的溫度報警觸發器TH和TI、配置寄存器[4]。
1.3溫度顯示電路
本系統擬采用LCD12864液晶顯示屏作為溫度顯示的元件。128X64是一種圖形點陣液晶顯示其,主要由驅動器/列驅動器及128x64全點陣液晶顯示器組成,可完成圖形顯示,也可顯示8x4個(16x16)漢字[5]。并且具有4位/8位并行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊。模塊顯示采用了分屏顯示的方式進行,分為左半屏和右半屏,它是通過口線CS1和CS2進行控制的,高電平有效[6]。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面。低電壓低功耗是其又一顯著特點。
1.4加熱電路
系統根據溫度采集電路,將檢測到的當前溫度值與下限溫度50℃進行比較,判斷是否需要起動加熱電路。根據系統要求,當水溫低于下限溫度值50℃時加熱;當水溫大于上限溫度值70℃時,保持當前溫度。在正常條件下,使用光耦繼電器可以很容易實現地通過較高的電壓和電流,工作十分可靠[7]。本系統決定采用繼電器控制加熱電路,如圖3所示。
1.5報警電路
本系統利用有源蜂鳴器進行報警輸出,采用直流供電。當單片機長期檢測不到溫度或檢測的溫度長期達不到預定的溫度限值或與預定的溫度限值相差太大,均亮報警指示燈。
2.1軟件主程序的設計
主程序主要用來實現對單片機和加熱控制系統各部件的初始化,以及實現各功能子程序的調用,協調各個功能模塊,采用循環查詢的方法來實現對溫度的采集和控制以及溫度的顯示。主程序流程圖如圖4所示:
2.2子程序
主要由溫度采集子程序、溫度設定子程序、溫度比較處理子程序、報警子程序、溫度顯示子程序等組成。溫度采集子程序主要是運用了DS18B20進行溫度采集及計算,溫度設定子程序用于對系統進行設定適合的溫度范圍[8];溫度處理比較子程序把采集的實際溫度與設定溫度值比較,調用PID算法[9],輸出控制信號;報警子程序用于控制非法輸入溫度值。顯示子程序用于顯示設定溫度和實際溫度。其中PID調節程序、溫度比較程序、溫度處理子程序如下所示://PID初始化
voidPIDInit(structPID*pp)
{memset(pp,0,sizeof(structPID));
}
unintPIDCalc(structPID*pp)
{
unintdError,Error,pError;
Error=set_Temperature-Temperature;//ek
pError=Error-pp->LastError;//ek-e(k-1)
dError=Error-2*pp->LastError+pp->PrevError;//e(k)-2*e(k-1)+e(k-2)
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*pError+pp->Integral*Error+pp->Derivative*dError);//增量型PID返回值
}
//溫度比較
voidcompare_temperature()
{unchari;
if(set_Temperature>Temperature)
{if(set_Temperature-Temperature>20)
{JR=0;pwml=0xff;pidz=0;
}
else
{for(i=0;i<10;i++)
{pidz=PIDCalc(&pidfh);pwml=pidz;pwm();
}}}
if(set_Temperature<=Temperature)
{JR=1;pwml=0x00;pidz=0;
}}
//溫度處理
voidchuliwendu(unchargaowei,unchardiwei)
{Temperature=(diwei+gaowei*256)*(0.0625*10);//Temperature=125
shiwei=Temperature/100;gewei=Temperature/10%10;xiaoshu=Temperature%10;}
本文介紹了基于AT89C51單片機的自動恒溫控制電路,概述了電路的總體設計,硬件結構的各個模塊以及軟件設計的主體思路,運用數字式溫度傳感器DS18B20采集溫度,電路設計簡單,成本低廉,工作性能可靠,有較高的推廣價值。該設計方案的運行結果如圖4.1所示:
[1]Shiuh-JerHuang,Hung-YiChen.《Un-symmetricInputTemperatureControlbyusingFuzzySlidingModeControllerwithGainAuto-tuning》[M].InternationalJournalofControl,Automation,andSystems.201412(2):422-430.
[2]宋慧,王智檀.《基于單片機的溫度控制系統研究》[J].信息工程,2014.
[3]張齊.《單片機原理與應用系統設計——基于C51的Proteus仿真實驗與解題指導》[M].電子工業出版社,2011.
[4]劉坤,趙紅波,張憲棟.《51單片機C語言應用開發技術大全(第
2版)》[M].人民郵電出版社,2012.
[5]孫鵬.《51單片機綜合學習系統——12864點陣型液晶顯示篇》[J].電子制作,2008.
[6]張志科,趙玉建.《點陣液晶顯示屏SG12864-01D應用實踐》[J].現代顯示,2009(105).
[7]孫明超,靳亞林,肖術雷.基于AT89C51單片機的水溫控制系統[J].數字技術與應用,2011.
[8]黃曉林.一種實用型智能恒溫控制系統設計[J].自動化技術與應用,2011(30).
[9]王小虎,盧超.基于PID算法的溫度控制系統的設計[J].實驗室科學,2009.
廣東省大學生創新創業訓練計劃項目
曾麗麗,在讀本科生。