趙 睿 ,馬殷元
(蘭州交通大學(xué) 機(jī) 電技術(shù)研究所, 蘭州 7 30070)
針對傳統(tǒng)的溫度采集方法。速度慢、多點(diǎn)信號不同步等問題,本文提出了多點(diǎn)、高速、同步溫度采集的方法,采用DS18B20數(shù)字溫度傳感器來采集溫度信號。通常在單總線上串聯(lián)很多DS18B20,需要查詢DS18B20的64位ROM才能得到對應(yīng)傳感器的溫度值,為了節(jié)省掉64位序列號的時(shí)間開銷,采取在每個(gè)總線上掛載一個(gè)DS18B20的方法,通過并口對多個(gè)DS18B20進(jìn)行統(tǒng)一操作,既節(jié)省了大量的存儲(chǔ)空間,又提高了溫度轉(zhuǎn)換的同步性和速度。
圖1 多點(diǎn)高速同步溫度采集系統(tǒng)
多點(diǎn)并行溫度采集系統(tǒng)如圖1,ATmega16單片機(jī)的每個(gè)I/O口上掛接一個(gè)DS18B20數(shù)字溫度傳感器,通過讀取每個(gè)口的電平值來同時(shí)讀取多路DS18B20的溫度值,并在LCD顯示器上顯示,同時(shí)通過RS232發(fā)送到上位機(jī)。
AVR ATmega16單片機(jī)是一款采用RISC指令的8位高速單片機(jī), 具有速度快、片上資源豐富、驅(qū)動(dòng)能力強(qiáng)、功耗低、性價(jià)比高、保密性好等眾多的優(yōu)點(diǎn)。
DS18B20溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。DS18B20采用單線的接口方式,在與微處理器連接時(shí)僅需要一條I/O 口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。并支持多點(diǎn)組網(wǎng)功能,在使用中,DS18B20不需要任何外圍元件,大大簡化了數(shù)據(jù)采集電路的設(shè)計(jì)。
另外,DS18B20輸出的信號是數(shù)字量,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力,與采集模塊之間的連接電纜可以很長,采用屏蔽3芯線作為信號線,DS18B20的可靠傳輸距離可以達(dá)到200 m。作為智能傳感器,用戶可以設(shè)定傳感器的報(bào)警溫度,此溫度值存儲(chǔ)在EEPROM中,掉電后不會(huì)丟失。DS18B20還具有自診斷功能,當(dāng)由于意外原因?qū)е聜鞲衅鞴收蠒r(shí),傳感器將返回錯(cuò)誤代碼FF。 DS18B20測溫范圍-55℃~125℃,測溫誤差在±0.5℃以內(nèi),這與各監(jiān)測點(diǎn)的溫度范圍和測量精度都是符的,所以設(shè)計(jì)時(shí)選用該溫度傳感器。
圖2 系統(tǒng)硬件電路設(shè)計(jì)
本系統(tǒng)采用一片ATmega16單片機(jī)作為核心控制單元,其中PA、PB、PC、PD口的32個(gè)引腳作為輸入輸出使用,PA、PB口的16個(gè)引腳分別掛載16個(gè)DS18B20,PC口的PC2、PC3、PC4、PC5引腳作為程序下載端口使用,PC0、PC1、PC7三個(gè)引腳分別掛載3個(gè)DS18B20,PD口的PD0和PD1作為串口通訊引腳使用,PD3~PD7,5個(gè)引腳分別掛載5個(gè)DS18B20.整個(gè)系統(tǒng)充分利用了mega16單片機(jī)的I/O資源,掛載了24個(gè)DS18B20,可同時(shí)采集24路溫度信號。由于mega16單片機(jī)價(jià)格低廉如需采集更多路的溫度信號可將多個(gè)mega16單片機(jī)并聯(lián)使用。系統(tǒng)硬件電路設(shè)計(jì)如圖2。
由于單片機(jī)與單總線溫度傳感器是通過1根信號線鏈接的,主機(jī)要實(shí)現(xiàn)各類操作命令以及溫度的讀取與設(shè)置,必須嚴(yán)格地按照DS18B20的通信協(xié)議來進(jìn)行。在進(jìn)行數(shù)據(jù)寫“0”、寫“1”時(shí)隙、讀“0”、讀“1” 時(shí)隙,所有的數(shù)據(jù)傳輸必須從字節(jié)的低位開始,編寫程序時(shí)必須按照其對應(yīng)的時(shí)序操作,否則不能獲得正確完整的數(shù)據(jù)。下面對DS18B20進(jìn)行各類操作的重要函數(shù)說明如下:
resetDS18B20_ABCD(void):發(fā)送復(fù)位脈沖,每次對DS18B20的操作必須調(diào)用此函數(shù)。
*readByteDS18B20_ABCD(void):向DS18B20讀一個(gè)字節(jié)。
writeByteDS18B20_ABCD(BYTE wb):向DS18B20寫一個(gè)字節(jié)。
*readTempDS18B20_ABCD(void):分別從24個(gè)DS18B20中讀取24路溫度。
UART_transmit():串口發(fā)送函數(shù),將24路溫度值發(fā)送上位機(jī)顯示。
在本系統(tǒng)中,DS18B20 采用9位分辨率,溫度的最大轉(zhuǎn)換時(shí)間可達(dá)到93.75 ms。采集多路溫度信號的時(shí)間約為750 ms。大大的提高了溫度采集的速度,實(shí)現(xiàn)了多路溫度的同步采集。
本系統(tǒng)采取模塊化設(shè)計(jì),首先對mega16單片機(jī)的I/O口、定時(shí)器和串口進(jìn)行初始化,然后調(diào)用resetDS18B20_ABCD(void)復(fù)位函數(shù)對24個(gè)DS18B20進(jìn)行復(fù)位操作,接著調(diào)用*readTemp-DS18B20_ABCD(void)函數(shù)讀取24路溫度值,并通過一個(gè)數(shù)據(jù)換算函數(shù)將溫度值轉(zhuǎn)化為十進(jìn)制,最后調(diào)用UART_transmit()串口發(fā)送函數(shù)將24路溫度值發(fā)送到上位機(jī)進(jìn)行顯示處理,主程序流程如圖3。
并行溫度采集的難點(diǎn)在于對多路DS18B20數(shù)字溫度傳感器的同步操作。如同步讀時(shí)序、同步寫時(shí)序等。本文設(shè)計(jì)了同步讀寫時(shí)序函數(shù),能夠同時(shí)讀寫24路DS18B20。下面對讀字節(jié)函數(shù)*read-ByteDS18B20_ABCD(void)進(jìn)行詳細(xì)說明:
圖3 主程序流程圖
定義數(shù)組Adata[24]用來存放24路溫度值,定義DATA,DATA1,DATA2,DATA3來分別存放讀取的A,B,C,D口的電平值。
每次讀取24路溫度信號的一位,并將其分別存放在數(shù)組Adata中,每次讀取完畢后將Adata中的每個(gè)數(shù)均右移一位(讀取溫度時(shí),先讀取低位信號)當(dāng)讀取完8次后,將獲得24路溫度值,程序流程如圖4。
圖4 讀字節(jié)程序流程圖
系統(tǒng)采用AVR ATmega16高速單片機(jī)和24路DS18B20數(shù)字溫度傳感器,實(shí)現(xiàn)對多路溫度信號的高速同步采集。軟件采用模塊化設(shè)計(jì),提高系統(tǒng)的執(zhí)行效率,通過設(shè)計(jì)同步讀寫多路DS18B20時(shí)序函數(shù),實(shí)現(xiàn)了同步性。通過實(shí)驗(yàn)實(shí)現(xiàn)了高速同步采集溫度的目的,具有較好的實(shí)用性。
[1] 葉 鋼. 基于DS18B20溫度控制系統(tǒng)的設(shè)計(jì)[J].電子測量與儀器學(xué)報(bào),2007,26(4):31-32.
[2]張海洋,高 成,高澤溪. 多路溫度采集系統(tǒng)[J]. 電子測量技術(shù),2005.
[3]丁幼春,熊麗榮,黃 劍. 基于AT89S52和DS18B20的多點(diǎn)溫度檢測報(bào)警系統(tǒng)[J]. 農(nóng)機(jī)化研究,2007(5).
[4]唐一鳴. 基于只能傳感器的網(wǎng)絡(luò)化多點(diǎn)溫度測量系統(tǒng)[D].成都:西南交通大學(xué)碩士論文,2009.
[5]鄧小燕,朱維璐,劉建華. 單總線溫度傳感器DS18B20及其在溫室系統(tǒng)中的應(yīng)用[J]. 冶金自動(dòng)化,2004.