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