楊 宇
(昆明冶金高等專科學(xué)校電氣與機(jī)械學(xué)院,云南 昆明 650033)
隨著社會(huì)經(jīng)濟(jì)的發(fā)展,溫度控制在人們生產(chǎn)和生活的方方面面變得越來(lái)越普及和重要,在許多需要溫度控制的場(chǎng)合,比如蔬菜水果大棚、食品儲(chǔ)藏室、智能家居和樓宇等系統(tǒng)中,對(duì)溫度數(shù)據(jù)進(jìn)行快速、精確、可靠地采集和控制是必不可少的。
傳統(tǒng)的測(cè)溫方法主要依靠一些熱敏電子元器件進(jìn)行溫度采集,比如熱敏電阻等,這類方法存在精度低、速度慢、需額外增加轉(zhuǎn)換器件和電路的缺點(diǎn)。該文闡述基于AT89C51單片機(jī)和美國(guó)Dallas公司的單總線數(shù)字溫度傳感器DS18B20的溫度監(jiān)控系統(tǒng)的設(shè)計(jì),該系統(tǒng)能夠克服傳統(tǒng)控制方式的缺點(diǎn),實(shí)現(xiàn)精確、快速、可靠的溫度采集和控制。
該系統(tǒng)的硬件部分主要由AT89C51單片機(jī)、溫度傳感器DS18B20、4個(gè)7段數(shù)碼管和2個(gè)LED指示燈構(gòu)成,AT89C51的引腳P1.0與DS18B20的信號(hào)輸入輸出端DQ相連,DS18B20的其余2只引腳接直流電源的正負(fù)極,AT89C51的引腳P3.6和P3.7與2個(gè)LED指示燈相連,2個(gè)LED分別為綠燈和紅燈。P2口的8個(gè)引腳以及P3口的4個(gè)引腳和數(shù)碼管相連,P2口為顯示的段選端,P3口為顯示的位選端,見圖1。AT89C51實(shí)時(shí)采集DS18B20送來(lái)的溫度值,并將溫度值顯示在數(shù)碼管上,溫度值精確到小數(shù)點(diǎn)后1位。如果溫度值低于設(shè)定的下限溫度或者高于設(shè)定的上限溫度,紅色指示燈點(diǎn)亮,綠色指示燈熄滅,如果溫度值處于正常溫度范圍,綠色指示燈點(diǎn)亮,紅色指示燈熄滅。由圖1可見,該系統(tǒng)具有硬件結(jié)構(gòu)簡(jiǎn)單、所含元器件較少、容易維護(hù)等優(yōu)點(diǎn)。

圖1 系統(tǒng)結(jié)構(gòu)原理圖Fig.1 Schematic diagram of the system
DS18B20是一種來(lái)自美國(guó)Dallas公司的單總線數(shù)字化溫度傳感器。它的溫度測(cè)量范圍為-55~125 ℃,能夠以9位、10位、11位和12位的分辨率對(duì)模擬量的溫度值進(jìn)行轉(zhuǎn)換和表示,以上4種分辨率分別對(duì)應(yīng)的單位溫度值為0.5、0.25、0.125、0.0625攝氏度。DS18B20出廠默認(rèn)的分辨率為12位,該系統(tǒng)中的DS18B20采用的分辨率就是默認(rèn)的12位。單片機(jī)首先要對(duì)DS18B20進(jìn)行使能操作,才能使其進(jìn)入溫度轉(zhuǎn)換狀態(tài),單片機(jī)是通過(guò)向DS18B20寫數(shù)據(jù)44H來(lái)進(jìn)行使能操作的。溫度轉(zhuǎn)換的結(jié)果以二進(jìn)制補(bǔ)碼的形式存放在DS18B20的內(nèi)存中,分辨率為12位的轉(zhuǎn)換結(jié)果存放在2個(gè)字節(jié)的內(nèi)存單元中,最高5位為符號(hào)位,其余11位為數(shù)值位。單片機(jī)讀取溫度數(shù)據(jù)時(shí),先讀低字節(jié),再讀高字節(jié),然后拼接2個(gè)字節(jié)的數(shù)據(jù)。如果單片機(jī)讀取的溫度值為正值,則這5個(gè)符號(hào)位均為0,可以將測(cè)得的數(shù)值乘以0.062 5就可得到實(shí)際的溫度值,如果單片機(jī)讀取的溫度值為負(fù)值,則這5個(gè)符號(hào)位均為1,要得到正確的實(shí)際溫度值,根據(jù)補(bǔ)碼轉(zhuǎn)原碼的原理,要先將測(cè)得的溫度值取反加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()來(lái)實(shí)現(xiàn),主要是對(duì)DS18B20進(jìn)行初始化操作;從DS18B20讀取溫度值是控制程序的關(guān)鍵部分,由函數(shù)tmp()來(lái)實(shí)現(xiàn)該功能,函數(shù)tmp()首先依靠函數(shù)tmpread()讀取DS18B20中測(cè)得的2個(gè)字節(jié)的溫度數(shù)據(jù),然后將2個(gè)字節(jié)數(shù)據(jù)拼接成1個(gè)數(shù)據(jù)存放在變量中,根據(jù)該數(shù)據(jù)的正負(fù)對(duì)數(shù)據(jù)進(jìn)行處理,如果是正數(shù),直接乘以0.062 5,如果是負(fù)數(shù),則進(jìn)行取反加1,這樣就可以得到實(shí)際的溫度值,最后進(jìn)行乘以10的操作是為了讓溫度值保留1位小數(shù),該值在數(shù)碼管上顯示的時(shí)候,最后1位數(shù)值前為小數(shù)點(diǎn);判斷溫度值是否異常模塊對(duì)函數(shù)tmp()返回的溫度值進(jìn)行判斷是否超限,該程序中設(shè)定的下限溫度為-30 ℃,上限溫度為100 ℃,當(dāng)實(shí)際溫度值低于-30 ℃或高于100 ℃時(shí),報(bào)警紅燈點(diǎn)亮,綠燈熄滅,當(dāng)實(shí)際溫度值處于正常區(qū)間時(shí),報(bào)警紅燈熄滅,綠燈點(diǎn)亮;分離溫度值模塊的功能由函數(shù)detach()來(lái)實(shí)現(xiàn),主要是通過(guò)C語(yǔ)言的相關(guān)算術(shù)運(yùn)算符,將實(shí)際溫度值的各個(gè)數(shù)位分離出來(lái)并存放到變量num1到num4中;顯示溫度值模塊的功能由函數(shù)display()來(lái)實(shí)現(xiàn),該系統(tǒng)用4個(gè)7段數(shù)碼管實(shí)時(shí)顯示測(cè)得的溫度值,最后1個(gè)數(shù)碼管顯示小數(shù)位,前3個(gè)數(shù)碼管顯示整數(shù)位。函數(shù)display()根據(jù)測(cè)得的實(shí)際溫度值的正負(fù),采用動(dòng)態(tài)顯示的方式將溫度值顯示到數(shù)碼管,顯示負(fù)值溫度時(shí)用最高位的數(shù)碼管顯示負(fù)號(hào),顯示正值溫度時(shí)不顯示正號(hào)。這5個(gè)功能模塊通過(guò)主程序中的while(1)語(yǔ)句循環(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è)計(jì)以Proteus仿真軟件和Keil 51編程軟件作為開發(fā)工具,以AT89C51單片機(jī)作為控制核心,使用DS18B20芯片作為溫度傳感器,加上適當(dāng)?shù)耐鈬娐罚瑯?gòu)成了智能實(shí)時(shí)溫度監(jiān)控系統(tǒng),該系統(tǒng)不僅能夠?qū)崟r(shí)采集并顯示溫度值,還能對(duì)低于下限溫度和高于上限溫度的情況進(jìn)行報(bào)警。與傳統(tǒng)溫度控制系統(tǒng)相比,該系統(tǒng)在易用性、可靠性、實(shí)時(shí)性等方面均有極大提升,并適用于很多需要溫度控制的場(chǎng)合。