基于DS18B20和nRF2401的庫區測溫網(wǎng)絡(luò )無(wú)線(xiàn)傳輸系統
摘要:為解決庫區溫度測量布線(xiàn)難度大、材料成本高、維護檢修難的問(wèn)題,論文提出了一種用單片機作為控制核心,用DS18B20搭建多點(diǎn)測溫網(wǎng)絡(luò ),nRF2401作為傳輸器件的庫區溫度數據無(wú)線(xiàn)傳輸系統。經(jīng)實(shí)際測試,該系統測量準確度高、傳輸距離遠、性能可靠,具有較好的應用前景。
本文引用地址:http://dyxdggzs.com/article/280695.htm引言
庫區溫度直接關(guān)系到庫存物資的安全與性能,目前庫區溫度數據的傳輸大多采用有線(xiàn)方式,存在布線(xiàn)難度大、材料成本高、維護檢修不便等不足[1-2],并且數據線(xiàn)纜還易受雨雪、潮濕、鼠害等破壞。為克服此類(lèi)弊端,本文采用nRF2401無(wú)線(xiàn)傳輸模塊,結合1-Wire器件DS18B20,設計開(kāi)發(fā)一款庫區溫度數據無(wú)線(xiàn)傳輸系統。
1 總體方案
系統分為上位機與下位機兩大部分,二者之間的通信通過(guò)nRF2401實(shí)現,如圖1所示。上位機主要包括PC機和上位單片機,其功能是負責接收下位機傳送的溫度數據和應用程序的運行,這一部分技術(shù)較為成熟,可借鑒的資料較多,不作為本文的重點(diǎn);下位機采用51系列單片機AT89S51作為控制器,主要負責溫度數據的采集、處理和傳輸,圖1僅畫(huà)出兩組溫度傳感器和繼電器,實(shí)際連接10組。本文將著(zhù)重介紹其硬件電路和軟件設計。
2 電路設計
下位機電路設計的重點(diǎn)是測溫網(wǎng)絡(luò )和無(wú)線(xiàn)傳輸模塊的搭建,為實(shí)現多點(diǎn)測溫,選用Dallas公司出品的DS18B20,構建一個(gè)1-Wire總線(xiàn)的測溫網(wǎng)絡(luò )。DS18B20是1-Wire總線(xiàn)的數字溫度傳感器,可直接將被測溫度轉化成串行數字信號供單片機處理,適用于惡劣環(huán)境的現場(chǎng)溫度測量[3-4];無(wú)線(xiàn)傳輸模塊選用新型單片射頻收發(fā)器件nRF2401,該器件工作于2.4 GHz~2.5 GHz ISM頻段,輸出功率和通信頻道可通過(guò)編程進(jìn)行配置[5],同時(shí),nRF2401功耗低,在以-6dBm的功率發(fā)射時(shí),工作電流僅9mA,接收信號時(shí),工作電流也僅12.3 mA,特別適合單片機應用場(chǎng)合[6-8]。
圖2是市售nRF2401無(wú)線(xiàn)模塊,設計上位機、下位機電路時(shí),只需留出相應接口即可。
圖3是設計的電路原理圖,單片機P12口連接10個(gè)測溫器件(圖中僅畫(huà)出3個(gè)),從而構建一個(gè)小型1-Wire總線(xiàn)測溫網(wǎng)絡(luò ),可實(shí)現10個(gè)庫區的溫度測量;單片機其他口線(xiàn)連接有10個(gè)繼電器(圖中畫(huà)出2個(gè)),用來(lái)控制10個(gè)庫區散熱風(fēng)扇的運轉;無(wú)線(xiàn)模塊nRF2401通過(guò)接口端子與單片機連接,此處注意nRF2401工作電壓是3.3V,需增加電壓轉換芯片,為節省篇幅圖中并未畫(huà)出。
上位機接收部分的電路主要由上位單片機、無(wú)線(xiàn)模塊接口和電平轉換部分組成,這是由于nRF2401輸出數據格式是TTL電平,而PC機串口是MAX232電平,為此需要增加一個(gè)電平轉換電路進(jìn)行匹配。
3 軟件編程
下位機編程重點(diǎn)在于溫度數據的采集與傳送,也就是DS18B20和nRF2401的軟件設計。
3.1 1-wire 總線(xiàn)的基本原理和操作
軟件設計之前,首先要了解1-wire 總線(xiàn)的原理。1-wire總線(xiàn)的特點(diǎn)是用一條數據線(xiàn)同時(shí)傳輸時(shí)鐘信號和數據,總線(xiàn)上每一個(gè)器件都有一個(gè)唯一的地址,包括48位的序列號、8位的家族碼和8位的CRC碼,主機對各器件的尋址依據這64位的ID碼來(lái)進(jìn)行。
為保證在一條數據線(xiàn)上實(shí)現雙向通信,對DS18B20的操作必須遵循嚴格的讀寫(xiě)時(shí)序[9]。以下介紹基于1-wire總線(xiàn)的幾種典型操作,其余的1-wire總線(xiàn)命令都是由這些典型操作而來(lái)。
3.1.1 復位子函數
在復位與應答時(shí)序中,主機發(fā)出復位信號,要求1-wire器件在規定的時(shí)間內送回應答信號。
首先主機將總線(xiàn)拉低480μs,發(fā)出復位脈沖,然后產(chǎn)生一個(gè)上升沿的跳變,并延時(shí)60μs等待1-wire器件的應答;1-wire器件將總線(xiàn)拉低240μs,發(fā)出應答,主機收到應答后,再對DS18B20進(jìn)行ROM命令。
3.1.2 讀寫(xiě)操作
所有的讀寫(xiě)時(shí)序至少需要60μs,在位讀和位寫(xiě)時(shí)序中,主機要在規定的時(shí)間內讀回或寫(xiě)出數據。
寫(xiě)時(shí)序時(shí),主機在拉低總線(xiàn)15μs之內釋放總線(xiàn),并向1-wire器件寫(xiě)1;讀時(shí)序時(shí),主機發(fā)出讀數據命令,產(chǎn)生讀時(shí)序,1-wire器件隨即向主機傳輸數據。
3.2 DS18B20的溫度轉換
DS18B20網(wǎng)絡(luò )溫度測量的步驟一般是:器件初始化、復位、ROM操作、溫度轉換。初始化及復位完成后,要對網(wǎng)絡(luò )中的器件進(jìn)行ROM識別,然后再讀取溫度數據。
3.2.1 利用二叉樹(shù)遍歷算法進(jìn)行器件識別
二叉樹(shù)遍歷算法是搜索識別網(wǎng)絡(luò )中1-Wire器件的編程首選,二叉樹(shù)遍歷算法的要點(diǎn)可歸納為“讀2位,寫(xiě)1位” [4]。
首先主機向從機發(fā)出搜索命令,等待從機向主機發(fā)回當前位之后,再讀從機發(fā)回當前位的反碼,這兩個(gè)位數據的編碼存在4種可能:00、01、10和11。
00表示從機在當前位上有位分叉,即0和1兩個(gè)分支;
01表示從機的當前位均為0;
10表示從機的當前位均為1;
11表示總線(xiàn)上無(wú)器件響應。
顯然,出現11時(shí)搜索應退出。
對于前3種情況,根據搜索策略,主機向從機寫(xiě)1位數據,決定繼續搜索哪一分支。第2和第3種情況下,搜索僅有一個(gè)方向,如果是第1種情況即出現00時(shí),需要選擇下一步搜索路徑,方法是比較搜索位所在位置和最后一次發(fā)生位差異的所在位置,若二者相等,搜索1分支,若前者>后者,搜索0分支,若前者<后者,則采用上一次的搜索路徑。
在此需要注意兩點(diǎn):一是網(wǎng)絡(luò )上DS18B20發(fā)回的位數據呈“線(xiàn)與”關(guān)系[10];二是DS18B20中64位ID碼標記為第1—64位,而不是0—63位,空出來(lái)的0用來(lái)表示差異位位置記錄的初始狀態(tài)。
3.2.2 溫度數據的讀取
轉換完成后的溫度數據由低8位和高8位組成,且低8位在前,需將其轉換為1個(gè)16位的數,高5位代表符號,低11位是溫度值。11位的溫度值中高7位是溫度整數,低4位是溫度小數,如果是負溫度,則從溫度寄存器讀出的是補碼,應將補碼取反加1得到原碼。
需要注意,單片機發(fā)出讀取溫度寄存器命令后,DS18B20會(huì )返回9組數據,其中第一組數據的低4位代表溫度的小數值,因此溫度小數部分的精度為1/16=0.0625。另外程序中應增加延時(shí)函數,確保溫度轉換完成。
3.3 nRF2401程序設計要點(diǎn)
溫度轉換完成后,由nRF2401將數據發(fā)送給上位機,并接收上位機發(fā)出的指令,實(shí)現雙向通信。
3.3.1 初始化配置與數據收發(fā)
nRF2401初始化配置包括設置待機模式、CRC校驗、收發(fā)完成后中斷響應、選擇射頻通道、設置數據傳輸率和發(fā)射功率。
nRF2401的CE管腳為0時(shí)處于待機模式,為1時(shí)處于收發(fā)模式,收發(fā)模式有ShockBurst模式和直接模式兩種,本文選擇速度較快、功耗較低的ShockBurst模式。
評論