基于nRF9E5和DS18B20的無線測溫系統(tǒng)設計
目前,很多場合的測溫系統(tǒng)采用的還是有線測溫設備,由溫度傳感器、分線器、測溫機和監(jiān)控機等組成,各部件之間采用電纜連接進行數(shù)據(jù)傳輸。這種系統(tǒng)布線復雜、維護困難、成本高,可采用無線方案解決這些問題。無線測溫系統(tǒng)是一種集溫度信號采集、大容量存儲、無線射頻發(fā)送、LED(或LCD)動態(tài)顯示、控制與通信等功能于一體的新型系統(tǒng)。
本文從低功耗、小體積、使用簡單等方面考慮,基于射頻SoC nRF9E5和數(shù)字溫度傳感器DS18B20設計了一個無線測溫系統(tǒng),整個系統(tǒng)由多個無線節(jié)點和1個基站組成。無線節(jié)點工作在各個測溫地點,進行溫度數(shù)據(jù)采集和無線發(fā)送。基站與多個節(jié)點進行無線通信,并通過數(shù)碼管將數(shù)據(jù)顯示出來,同時可以通過RS-232串口將數(shù)據(jù)發(fā)送給PC。
nRF9E5簡介
nRF9E5是Nordic公司推出的射頻片上系統(tǒng),內(nèi)嵌8051兼容微控制器、RF收發(fā)器和4通道10位A/D轉換器,是真正的系統(tǒng)級芯片,其功能結構如圖1所示。
圖1 nRF9E5功能結構框圖
nRF9E5的片內(nèi)微控制器與標準8051兼容,指令時序與標準8051稍有區(qū)別。中斷控制器支持5個擴展中斷源:ADC中斷、SPI中斷、喚醒中斷和兩個無線收發(fā)中斷。此外,還擴展了兩個數(shù)據(jù)指針,使得片外RAM存取數(shù)據(jù)更為方便。微控制器內(nèi)有256B的數(shù)據(jù)RAM和512B的ROM。上電復位或軟件復位后,控制器自動執(zhí)行ROM引導區(qū)中的代碼,用戶程序通常在引導區(qū)的引導下,從E2PROM加載到1個4KB的RAM中,該RAM也可用來存儲數(shù)據(jù)。當進行批量生產(chǎn)時,可要求廠家代理將程序固化到片內(nèi),這樣可省去E2PROM的費用并進一步減小系統(tǒng)體積。
nRF9E5內(nèi)置收發(fā)器具有與單片射頻收發(fā)器nRF905相同的功能,可通過片內(nèi)MCU的并行口或SPI口與微控制器通信。收發(fā)器由頻率合成器、功率放大器、調(diào)制器和接收單元組成。輸出功率、頻道和其他射頻參數(shù)可通過對特殊功能寄存器RADIO編程進行控制。發(fā)射模式(TX)下,最小工作電流僅為9mA(輸出功率-10dBm),接收(RX)模式下的工作電流為12.5mA,掉電模式下的工作電流僅為2.5μA??梢姡琻RF9E5的功耗很低。
nRF9E5采用Nordic公司的ShockBurst技術(自動處理前綴、地址和CRC),實現(xiàn)低速數(shù)據(jù)輸入,高速數(shù)據(jù)輸出,從而降低了系統(tǒng)的平均功耗。另外,nRF9E5還具有載波檢測功能。在ShockBurst接收方式下,當工作信道內(nèi)有射頻載波出現(xiàn)時,載波檢測引腳(CD)被置高。也就是說,當收發(fā)器準備發(fā)送數(shù)據(jù)時,它首先進入接收模式并檢測所工作的信道是否可以發(fā)送數(shù)據(jù)(信道是否空閑),這是一種簡單的傳輸前監(jiān)聽協(xié)議。這個特性很好地避免了同一工作頻率下不同發(fā)射器數(shù)據(jù)包之間的碰撞。
DS18B20概述
DS18B20是美國DALLAS公司的“單總線”數(shù)字溫度傳感器,它具有結構簡單、體積小、功耗低、無須外接元件、用戶可自行設定預警上下限溫度等特點。“單總線”結構獨特而且經(jīng)濟,采用一根I/O數(shù)據(jù)線既可供電又可傳輸數(shù)據(jù),使用戶可輕松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構建引入全新概念。
3引腳封裝的DS18B20形如一只三極管,其內(nèi)部結構如圖2所示。主要由四部分組成:64位光刻ROM、溫度傳感器、非易失性的溫度報警觸發(fā)器和配置寄存器。此外,還有電源檢測模塊、存儲和控制邏輯器、中間結果緩存器和8位循環(huán)冗余校驗碼(CRC)發(fā)生器。
圖2 3引腳DS18B20內(nèi)部結構
ROM中的64位序列號是出廠前被光刻好的,可以看作該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。DS18B20內(nèi)部的RAM由9個字節(jié)的高速緩存器和E2PROM組成,數(shù)據(jù)先寫入高速緩存器,經(jīng)校驗后再傳送給E2PROM。通過DS18B20功能命令對RAM進行操作。
DS18B20的測量溫度范圍為-55℃~125℃,在-10℃~85℃范圍內(nèi),精度為0.5℃,可編程設定9~12位的分辨率,默認值為12位,轉換12位溫度信號所需時間為750ms(最大)。檢測溫度由2字節(jié)組成,字節(jié)1的高5位S代表符號位,字節(jié)0的低4位是小數(shù)部分,中間7位是整數(shù)部分。
無線測溫系統(tǒng)組成及硬件設計
無線測溫系統(tǒng)主要可分為基站和無線節(jié)點兩大部分。每套系統(tǒng)一般只有1個基站,包括微控制器及射頻收發(fā)單元、顯示單元、報警單元、電源模塊及接口單元,主要硬件連接如圖3所示。
圖3 基站主要部件原理圖
接口單元是為了方便射頻模塊和PC的通信,通??刹捎肦S-232接口、USB接口、以太網(wǎng)接口等,其中,RS-232接口是目前PC與通信工業(yè)中應用最廣泛的一種串行接口。本文使用RS-232接口,采用MAX3232芯片實現(xiàn)RS-232電平與TTL電平之間的轉換。MAX3232是MAXIM公司生產(chǎn)的一種RS-232接口芯片,使用單一電源電壓供電,電源電壓在3.0~5.5V范圍內(nèi)都可以正常工作。
基站接收到數(shù)據(jù)后,將溫度信息通過數(shù)碼管(或液晶顯示屏)顯示出來,根據(jù)需要,還可以通過RS-232接口與PC進行通信。為簡化系統(tǒng),本設計直接用nRF9E5的P0口驅動數(shù)碼管(未在圖中給出),但是P0口不具備數(shù)據(jù)保持能力,需要外接一定大小的上拉電阻,顯示方法采用掃描法。采用一個蜂鳴器作為報警裝置,當溫度超過設定范圍時,鳴叫報警。射頻天線采用單鞭天線。
無線節(jié)點分布在溫度采集點,由數(shù)字溫度傳感器DS18B20、射頻SoC nRF9E5、天線及電池組成。在實際應用中,可以有多個無線節(jié)點,它們與基站之間通過射頻進行無線通信。無線節(jié)點的電路結構如圖4所示,其中,25AA320為E2PROM程序存儲器。DS18B20有寄生電源和外部電源兩種供電方式,本文采用外部供電方式,VDD引腳直接連接外部電源。DS18B20在空閑時,其DQ腳由上拉電阻置為高電平。無線節(jié)點的天線根據(jù)實際需要可選用單鞭天線或PCB印制天線。
圖4 無線測溫節(jié)點結構簡圖
無線測溫系統(tǒng)的軟件設計
本系統(tǒng)軟件設計比較復雜,整個軟件系統(tǒng)的流程如圖5所示,主要有以下幾個關鍵函數(shù):DS18B20初始化及溫度采集函數(shù)、nRF9E5初始化及射頻發(fā)送(接收)函數(shù)、數(shù)據(jù)顯示函數(shù)、串口通信函數(shù)等。
圖5 無線測溫系統(tǒng)軟件流程
限于篇幅,各個函數(shù)的詳細流程圖不再給出,僅列出幾個函數(shù)片斷供參考,程序采用C語言編寫,用Keil C51進行編譯。
DS18B20采用單總線數(shù)據(jù)傳輸方式,對讀寫的操作時序要求嚴格。DS18B20提供了一系列指令來控制傳感器的工作,利用這些指令就可以對DS18B20進行操作了。為了操作方便,可編寫兩個操作函數(shù),源碼如程序清單1所示。
程序清單1:
//-------------------
//啟動DS18B20的1次溫度轉換
//-------------------
void ConvertT(void)
{
RST18B20( ); //初始化
WR18B20(0xcc); //跳過多傳感器識別
WR18B20(0x44); //啟動溫度轉換
}
//-------------------
//讀取DS18B20
//-------------------
int ReadT(void)
{
RST18B20( ); //初始化
WR18B20(0xcc); //跳過多傳感器識別
WR18B20(0xbe); //讀DS18B20緩存器
DPL=RD18B20( ); //溫度低位
DPH=RD18B20( ); //溫度高位
return(DPTR); //返回讀出的溫度值
}
在開始進行無線通信前,必須對nRF9E5進行初始化配置,這個配置是通過對配置寄存器的設置來完成的。nRF9E5有一個144位的配置字,規(guī)定了無線收發(fā)器的接收地址、收發(fā)頻率、發(fā)射功率、無線傳輸頻率、無線收發(fā)模式、CRC校驗和的長度及有效數(shù)據(jù)的長度等。nRF9E5的初始化工作,可根據(jù)具體要求對照數(shù)據(jù)手冊進行配置。
數(shù)據(jù)的發(fā)送和接收是無線收發(fā)器的主要功能,當有數(shù)據(jù)要發(fā)送時,首先通過SPI接口把所要發(fā)送的數(shù)據(jù)送給nRF905模塊,設置TRX_CE、TXEN為高以激活nRF9E5進入發(fā)送狀態(tài)。無線系統(tǒng)自動上電,數(shù)據(jù)自動加前導碼和CRC校驗,然后發(fā)送數(shù)據(jù)包。具體過程如程序清單2所示。
程序清單2:
//-------------------
//發(fā)送數(shù)據(jù)包
//-------------------
void TransmitPacket(INT8U *pBuf)
{
INT8U i;
RACSN = 0;
SpiReadWrite(WTP);
for (i=0; i<Nrf9e5Config[10]; i++)
{
SpiReadWrite(pBuf[i]); //寫入發(fā)送緩沖區(qū)
}
RACSN = 1;
TXEN = 1;
TRX_CE = 1; //使能發(fā)送
Delay100us(1);
TRX_CE = 0; //發(fā)送完畢
}
當要接收數(shù)據(jù)時,通過設置TRX_CE為高、TXEN為低,使nRF9E5進入接收狀態(tài)。當nRF9E5監(jiān)測到和接收頻率相同的載波時,載波檢測(CD)被置高;當接收到有效的地址時,地址匹配(AM)被置高;當接收到有效的數(shù)據(jù)包(CRC校驗正確)時,數(shù)據(jù)就緒(DR)置高。接收數(shù)據(jù)的具體程序清單不再列出。
當需要將接收到的數(shù)據(jù)通過RS-232串口輸出時,首先要進行串口初始化,開啟nRF9E5管腳P0.1、P0.2的第二功能,具體過程見程序清單3。
程序清單3:
//-------------------
//串口初始化
//-------------------
void InitUart(void)
{
TH1=243;
CKCON|=0x10;
PCON=0x80; // 設置波特率
SCON=0x52; // 模式1,使能接收
TMOD&=~0x30;
TMOD|=0x20;
TR1=1; //定時器1開啟
P0_ALT|=0x06; //串口使能
P0_DIR|=0x02; //P0.1 輸入
P0_DIR&=0xfb; //P0.2輸出
ES=0;
}
結束語
本文基于nRF9E5和DS18B20設計了一個無線測溫系統(tǒng),具有體積小、功耗低等優(yōu)點,適用于采油廠、發(fā)電廠、鉆井施工等不宜進行有線測溫的場合,應用前景廣闊。