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