楊 宇
(昆明冶金高等??茖W(xué)校電氣與機械學(xué)院,云南 昆明 650033)
隨著社會經(jīng)濟的發(fā)展,溫度控制在人們生產(chǎn)和生活的方方面面變得越來越普及和重要,在許多需要溫度控制的場合,比如蔬菜水果大棚、食品儲藏室、智能家居和樓宇等系統(tǒng)中,對溫度數(shù)據(jù)進行快速、精確、可靠地采集和控制是必不可少的。
傳統(tǒng)的測溫方法主要依靠一些熱敏電子元器件進行溫度采集,比如熱敏電阻等,這類方法存在精度低、速度慢、需額外增加轉(zhuǎn)換器件和電路的缺點。該文闡述基于AT89C51單片機和美國Dallas公司的單總線數(shù)字溫度傳感器DS18B20的溫度監(jiān)控系統(tǒng)的設(shè)計,該系統(tǒng)能夠克服傳統(tǒng)控制方式的缺點,實現(xiàn)精確、快速、可靠的溫度采集和控制。
該系統(tǒng)的硬件部分主要由AT89C51單片機、溫度傳感器DS18B20、4個7段數(shù)碼管和2個LED指示燈構(gòu)成,AT89C51的引腳P1.0與DS18B20的信號輸入輸出端DQ相連,DS18B20的其余2只引腳接直流電源的正負極,AT89C51的引腳P3.6和P3.7與2個LED指示燈相連,2個LED分別為綠燈和紅燈。P2口的8個引腳以及P3口的4個引腳和數(shù)碼管相連,P2口為顯示的段選端,P3口為顯示的位選端,見圖1。AT89C51實時采集DS18B20送來的溫度值,并將溫度值顯示在數(shù)碼管上,溫度值精確到小數(shù)點后1位。如果溫度值低于設(shè)定的下限溫度或者高于設(shè)定的上限溫度,紅色指示燈點亮,綠色指示燈熄滅,如果溫度值處于正常溫度范圍,綠色指示燈點亮,紅色指示燈熄滅。由圖1可見,該系統(tǒng)具有硬件結(jié)構(gòu)簡單、所含元器件較少、容易維護等優(yōu)點。
圖1 系統(tǒng)結(jié)構(gòu)原理圖Fig.1 Schematic diagram of the system
DS18B20是一種來自美國Dallas公司的單總線數(shù)字化溫度傳感器。它的溫度測量范圍為-55~125 ℃,能夠以9位、10位、11位和12位的分辨率對模擬量的溫度值進行轉(zhuǎn)換和表示,以上4種分辨率分別對應(yīng)的單位溫度值為0.5、0.25、0.125、0.0625攝氏度。DS18B20出廠默認的分辨率為12位,該系統(tǒng)中的DS18B20采用的分辨率就是默認的12位。單片機首先要對DS18B20進行使能操作,才能使其進入溫度轉(zhuǎn)換狀態(tài),單片機是通過向DS18B20寫數(shù)據(jù)44H來進行使能操作的。溫度轉(zhuǎn)換的結(jié)果以二進制補碼的形式存放在DS18B20的內(nèi)存中,分辨率為12位的轉(zhuǎn)換結(jié)果存放在2個字節(jié)的內(nèi)存單元中,最高5位為符號位,其余11位為數(shù)值位。單片機讀取溫度數(shù)據(jù)時,先讀低字節(jié),再讀高字節(jié),然后拼接2個字節(jié)的數(shù)據(jù)。如果單片機讀取的溫度值為正值,則這5個符號位均為0,可以將測得的數(shù)值乘以0.062 5就可得到實際的溫度值,如果單片機讀取的溫度值為負值,則這5個符號位均為1,要得到正確的實際溫度值,根據(jù)補碼轉(zhuǎn)原碼的原理,要先將測得的溫度值取反加1,再乘以0.062 5。
根據(jù)以上DS18B20的工作原理,可以創(chuàng)建系統(tǒng)的工作流程圖以及編寫系統(tǒng)的控制程序,圖2為系統(tǒng)的工作流程圖,圖3-5為系統(tǒng)的控制程序。根據(jù)系統(tǒng)的工作流程圖可以看出,該系統(tǒng)主要由5大功能模塊構(gòu)成:使能DS18B20模塊、從DS18B20讀取溫度值模塊、判斷溫度值是否異常模塊、分離溫度值模塊和顯示溫度值模塊。使能DS18B20模塊的功能由函數(shù)Enable()來實現(xiàn),主要是對DS18B20進行初始化操作;從DS18B20讀取溫度值是控制程序的關(guān)鍵部分,由函數(shù)tmp()來實現(xiàn)該功能,函數(shù)tmp()首先依靠函數(shù)tmpread()讀取DS18B20中測得的2個字節(jié)的溫度數(shù)據(jù),然后將2個字節(jié)數(shù)據(jù)拼接成1個數(shù)據(jù)存放在變量中,根據(jù)該數(shù)據(jù)的正負對數(shù)據(jù)進行處理,如果是正數(shù),直接乘以0.062 5,如果是負數(shù),則進行取反加1,這樣就可以得到實際的溫度值,最后進行乘以10的操作是為了讓溫度值保留1位小數(shù),該值在數(shù)碼管上顯示的時候,最后1位數(shù)值前為小數(shù)點;判斷溫度值是否異常模塊對函數(shù)tmp()返回的溫度值進行判斷是否超限,該程序中設(shè)定的下限溫度為-30 ℃,上限溫度為100 ℃,當(dāng)實際溫度值低于-30 ℃或高于100 ℃時,報警紅燈點亮,綠燈熄滅,當(dāng)實際溫度值處于正常區(qū)間時,報警紅燈熄滅,綠燈點亮;分離溫度值模塊的功能由函數(shù)detach()來實現(xiàn),主要是通過C語言的相關(guān)算術(shù)運算符,將實際溫度值的各個數(shù)位分離出來并存放到變量num1到num4中;顯示溫度值模塊的功能由函數(shù)display()來實現(xiàn),該系統(tǒng)用4個7段數(shù)碼管實時顯示測得的溫度值,最后1個數(shù)碼管顯示小數(shù)位,前3個數(shù)碼管顯示整數(shù)位。函數(shù)display()根據(jù)測得的實際溫度值的正負,采用動態(tài)顯示的方式將溫度值顯示到數(shù)碼管,顯示負值溫度時用最高位的數(shù)碼管顯示負號,顯示正值溫度時不顯示正號。這5個功能模塊通過主程序中的while(1)語句循環(huán)執(zhí)行。
圖2 系統(tǒng)工作流程圖Fig.2 Flowchart of the system
圖3 控制程序1Fig.3 Control routine 1
圖4 控制程序2Fig.4 Control routine 2
圖5 控制程序3Fig.5 Control routine 3
該設(shè)計以Proteus仿真軟件和Keil 51編程軟件作為開發(fā)工具,以AT89C51單片機作為控制核心,使用DS18B20芯片作為溫度傳感器,加上適當(dāng)?shù)耐鈬娐?,?gòu)成了智能實時溫度監(jiān)控系統(tǒng),該系統(tǒng)不僅能夠?qū)崟r采集并顯示溫度值,還能對低于下限溫度和高于上限溫度的情況進行報警。與傳統(tǒng)溫度控制系統(tǒng)相比,該系統(tǒng)在易用性、可靠性、實時性等方面均有極大提升,并適用于很多需要溫度控制的場合。