徐麗麗 楊 風(fēng) 李 健
(中北大學(xué)信息與通信工程學(xué)院,太原 030051)
溫度是生產(chǎn)過程和科學(xué)實(shí)驗(yàn)中非常普遍而又十分重要的物理參數(shù)。在工業(yè)生產(chǎn)過程中,為了高效地進(jìn)行生產(chǎn),必須對生產(chǎn)工藝過程中的主要參數(shù),如溫度、壓力、流量、速度等進(jìn)行有效的控制,其中溫度控制在生產(chǎn)過程中占有相當(dāng)大的比例。準(zhǔn)確地測量和有效地控制溫度是優(yōu)質(zhì)、高產(chǎn)、低耗和安全生產(chǎn)的重要條件。而且在我們的日常生活中也使用微波爐、電烤箱、電熱水器、空調(diào)等家用電器,溫度與我們息息相??梢姕囟瓤刂齐娐窂V泛應(yīng)用于社會(huì)生活的各個(gè)領(lǐng)域,所以對溫度進(jìn)行控制是非常有必要和有意義的。
本文設(shè)計(jì)的溫控系統(tǒng)是以89C52單片機(jī)為核心,智能溫度傳感器DS18B20為控制對象,用七段數(shù)碼管顯示當(dāng)前室內(nèi)溫度,當(dāng)當(dāng)前室內(nèi)溫度高于20攝氏度時(shí),發(fā)光二極管就會(huì)點(diǎn)亮報(bào)警。美國DALLAS半導(dǎo)體公司推出的數(shù)字化溫度傳感器DS18B20采用單線協(xié)議,即與單片機(jī)接口僅需占用一個(gè)I/O端口,無需任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化成數(shù)字信號(hào),以數(shù)字碼方式串行輸出,從而大大簡化了傳感器與微處理器的接口。鑒于DS18B20比傳統(tǒng)的模擬溫度傳感器有很多優(yōu)點(diǎn),本文采用的溫度傳感器正是DS18B20。
DS18B20與89C52單片機(jī)的硬件連接圖是用仿真工具畫的。從圖1可以看出,DS18B20和單片機(jī)的連接非常簡單,單片機(jī)只需要一個(gè)I/O口就可以控制。Vcc管腳接+5V電壓給傳感器供電。I/O管腳與89C52單片機(jī)的P2.2引腳相連,GND管腳接地。溫度傳感器DS18B20將被測溫度轉(zhuǎn)化為數(shù)字信號(hào)。顯示模塊由3個(gè)共陰極的七段數(shù)碼管組成。所有數(shù)碼管的陰極,即標(biāo)有a,b,c,d,e,f,g,h的引腳全部連接在一起,然后與U1元件74HC753鎖存器的數(shù)據(jù)輸出端相連,鎖存器的輸入端連接單片機(jī)的P0口,P0口同時(shí)加上了上拉電阻。數(shù)碼管中的WE1,WE2,WE3是它們的位選端,每一個(gè)數(shù)碼管對應(yīng)一個(gè)位選端,與U2元件74HC573的數(shù)據(jù)輸出端相連,U2的數(shù)據(jù)輸入端也連接到單片機(jī)的P0口。兩個(gè)鎖存器的鎖存端與單片機(jī)的P2.6和P2.7相。報(bào)警模塊由一個(gè)發(fā)光二極管構(gòu)成。發(fā)光二極管一端接電源,并連接1k歐姆的電阻限流,另一端受單片機(jī)的P1.0腳控制。當(dāng)測得的溫度高于20時(shí),發(fā)光二極管會(huì)點(diǎn)亮進(jìn)行報(bào)警。這個(gè)系統(tǒng)的工作是在程序的控制下,完成對傳感器的讀寫和對溫度的顯示。
圖1 基于89C52的溫度測控系統(tǒng)硬件連接圖
1.3.1 初始化
圖2 初始化時(shí)序圖
結(jié)合圖2的時(shí)序圖,可以得知,DS18B20的初始化過程:給DS18B20單總線至少480微秒的低電平信號(hào),當(dāng)接收到此復(fù)位信號(hào)后,則會(huì)在15~60微秒后回發(fā)一個(gè)芯片的存在脈沖。至此,通信雙方已經(jīng)達(dá)成了基本的協(xié)議,接下來將會(huì)是控制器與DS18B20間的數(shù)據(jù)通信。
1.3.2 控制器發(fā)送ROM命令
ROM指令有5條,每一個(gè)工作周期只能發(fā)一條,ROM 指令分別是讀ROM數(shù)據(jù)(33H)、指定匹配芯片(55H)、跳躍ROM(CCH)、芯片搜索(F0H)、報(bào)警芯片搜索(ECH)。本文設(shè)計(jì)的溫控系統(tǒng)只接了單個(gè)DS18B20芯片,因此可以跳過ROM指令(注意:此處指的跳過ROM指令并非不發(fā)送ROM 指令,而是用特有的一條“跳過指令”)。
1.3.3 控制器發(fā)送存儲(chǔ)器操作命令
存儲(chǔ)器操作指令有6條,分別是寫RAM數(shù)據(jù)(4EH)、讀RAM數(shù)據(jù)(BEH)、將 RAM 數(shù)據(jù)復(fù)制到 EEPROM(48H)、溫度轉(zhuǎn)換(44H)、將EEPROM中的報(bào)警值復(fù)制到 RAM(B8H)、工作方式切換(B4H)。存儲(chǔ)器操作指令的功能是命令DS18B20 做什么樣的工作,是芯片控制的關(guān)鍵。
1.3.4 控制器處理數(shù)據(jù)
寫時(shí)間隙分為寫“0”和寫“1”,時(shí)序如圖3。在寫數(shù)據(jù)時(shí)間隙的前15微秒,總線需要是被控制器拉置低電平,而后則將是芯片對總線數(shù)據(jù)的采樣時(shí)間,采樣時(shí)間在15 ~60 微秒,采樣時(shí)間內(nèi)如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。每一位的發(fā)送都應(yīng)該有一個(gè)至少15 微秒的低電平起始位,隨后的數(shù)據(jù)“0”或“1”應(yīng)該在45 微秒 內(nèi)完成。整個(gè)位的發(fā)送時(shí)間應(yīng)該保持在60 ~120 微秒,相鄰兩個(gè)寫時(shí)隙必須要有至少1微秒的恢復(fù)時(shí)間,否則不能保證通信的正。
圖3 寫數(shù)據(jù)時(shí)序圖
讀時(shí)間隙也是必須先由主機(jī)產(chǎn)生至少1微秒的低電平,表示讀時(shí)間的起始。隨后在總線被釋放后的15微秒中DS18B20 會(huì)發(fā)送內(nèi)部數(shù)據(jù)位,這時(shí)控制器如果發(fā)現(xiàn)總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數(shù)據(jù)“0”。每一位的讀取之前都由控制器加一個(gè)起始信號(hào)。注意:如圖4 所示,必須在讀間隙開始的15微秒內(nèi)讀取數(shù)據(jù)位才可以保證通信的正確。
圖4 讀數(shù)據(jù)時(shí)序圖
若要讀出當(dāng)前的溫度數(shù)據(jù)需要執(zhí)行兩次工作周期,第一個(gè)周期為復(fù)位、跳過ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲(chǔ)器操作指令、等待500 微秒溫度轉(zhuǎn)換時(shí)間。緊接著執(zhí)行第二個(gè)周期為復(fù)位、跳過ROM指令、執(zhí)行讀RAM 的存儲(chǔ)器操作指令、讀數(shù)據(jù)。
2.2.1 DS18B20的初始化函數(shù)
2.2.2 讀寫一個(gè)字節(jié)數(shù)據(jù)函
2.2.3 讀取溫度并計(jì)算函數(shù)
圖6 實(shí)驗(yàn)測試結(jié)果
根據(jù)圖6(1)(2)所示,早晨測得室內(nèi)的溫度是18.8度,旁邊的第一個(gè)發(fā)光二極管沒有亮;快接近中午時(shí),測得的溫度是20.4度,旁邊的發(fā)光二極管點(diǎn)亮報(bào)警。本設(shè)計(jì)的目的是當(dāng)室內(nèi)溫度高于20度時(shí)點(diǎn)亮二極管報(bào)警。很明顯,該設(shè)計(jì)的方案是成功的。
[1] 農(nóng)靜.單總線數(shù)字溫度傳感器DSl8B20 原理及應(yīng)用[J].貴州師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,(25):120-122.
[2] 趙晶.Protel99 高級(jí)應(yīng)用[M].北京:人民郵電出版社,2000,156-160
[3] 柳春鋒. Protel99 SE 實(shí)用教程[M].北京:高等教育出版社,2007,110-112
[4] 周月霞,孫傳友.DSl8820 硬件連接與軟件編程[J].傳感器世界,2001(12):25-29.
[5] 胡漢才.單片機(jī)原理及其接口技術(shù)(第二版)[M].北京:清華大學(xué)出版社,2004,49-51
[6] 易麗華.基于AT89C51單片機(jī)與DS18B20的溫度測量系統(tǒng)[J]. 電子與封裝,2008,(5),41-42
[7] 譚浩強(qiáng).C 語言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999,
[8] 郭天祥.51單片機(jī)C語言教程[M].北京:電子工業(yè)出版社,2011,349-352