基于無線傳感器網絡的特點,以CC2430芯片為核心設計了一種微型傳感器節(jié)點。詳細闡述了傳感器節(jié)點的溫濕度數(shù)據(jù)采集模塊、電池能量檢測模塊以及節(jié)點之間“點對點”無線通信的軟件流程。
關鍵詞: 無線傳感器網絡? 傳感器節(jié)點? CC2430
?
無線傳感器網絡是由部署在監(jiān)測區(qū)域內的大量微型傳感器節(jié)點組成的,通過無線通信方式形成一個多跳的自組織的網絡系統(tǒng),其目的是協(xié)作地感知、采集和處理網絡覆蓋區(qū)域中感知對象的信息,并發(fā)送給觀察者。無線傳感器網絡技術在美國商業(yè)周刊和MIT技術評論的預測未來技術發(fā)展報告中,分別被列為21世紀最有影響的21項技術和改變世界的10大技術之一。
傳感器節(jié)點是無線傳感器網絡的基本組成單位。它由傳感器模塊、處理器模塊、無線通信模塊和能量供應模塊四個部分組成。由于傳感器節(jié)點通常是一個微型的嵌入式系統(tǒng),它的處理能力、存儲能力和通信能力相對較弱,并通過攜帶能量有限的電池供電。本文依據(jù)傳感器節(jié)點的這些特點,設計了一種用于環(huán)境中溫濕度監(jiān)測的以芯片CC2430為核心的無線傳感器網絡節(jié)點。
1 CC2430簡介
CC2430芯片是Chipcon公司提供的全球首款支持ZigBee協(xié)議的SoC解決方案。它延用了CC2420芯片的架構,在單個芯片上整合了ZigBee 射頻(RF)前端、內存和微控制器。CC2430擁有1個8位8051MCU,8KB的RAM,32KB、64KB或128KB的Flash,還包含模擬數(shù)字轉換器、幾個定時器、AES128協(xié)處理器、看門狗定時器、32kHz晶振的休眠模式定時器、上電復位電路、掉電檢測電路,以及21個可編程I/O引腳。
CC2430芯片采用0.18μm CMOS工藝生產,工作時的電流損耗為27mA;在接收和發(fā)射模式下,電流損耗分別低于27mA或25mA。CC2430的休眠模式和轉換到主動模式的超短時間的特性,特別適合那些要求電池壽命非常長的應用。
CC2430芯片的主要特點有:32MHz單指令周期低功耗的8051微控制器核;集成兼容IEEE802.15.4標準2.4GHz頻段的RF無線電收發(fā)機;8KB的SRAM,其中4KB可在所有功耗模式下保持數(shù)據(jù);兼容RoHS的7×7mmQLP封裝;4種可編程功耗模式;可編程的看門狗定時器;上電復位功能;支持硬件調試功能;優(yōu)良的無線接收靈敏度和強大的抗干擾性;在休眠模式時僅0.9μA的流耗,外部中斷或RTC能喚醒系統(tǒng);在待機模式時少于0.6μA的流耗,外部中斷能喚醒系統(tǒng);硬件支持CSMA/CA功能;較寬的電壓范圍(2.0~3.6V);數(shù)字化的RSSI/LQI支持和強大的DMA功能;具有電池監(jiān)測和溫度感測功能;集成了14位模數(shù)轉換的ADC;集成AES安全協(xié)處理器;帶有2個強大的、支持幾組協(xié)議的USART,以及1個符合IEEE 802.15.4規(guī)范的MAC計時器,1個常規(guī)的16位計時器和2個8位計時器。
2 節(jié)點的硬件設計
無線傳感器網絡的節(jié)點通常由傳感器模塊、處理器模塊、無線通信模塊和電源模塊構成。處理器模塊和無線通信模塊采用CC2430芯片,大大簡化了射頻電路的設計。傳感器模塊采用集成溫濕度傳感器SHT10。電源模塊采用3V紐扣電池。節(jié)點的硬件原理框圖如圖1。
SHT10用于采集周圍環(huán)境中的溫度和濕度,其工作電壓為2.4~5.5V,測濕精度為±4.5%RH,25℃時測溫精度為±0.5℃。采用SMD貼片封裝,與處理器的通信電路如圖2所示。SHT10采用兩條串行線與處理器進行數(shù)據(jù)通信。SCK數(shù)據(jù)線負責處理器和SHT10的通訊同步;DATA三態(tài)門用于數(shù)據(jù)的讀取。DATA在SCK時鐘下降沿之后改變狀態(tài),并僅在SCK時鐘上升沿有效。數(shù)據(jù)傳輸期間,在SCK時鐘高電平時,DATA必須保持穩(wěn)定。為避免信號沖突,微處理器應驅動DATA在低電平。需要一個10kΩ的外部上拉電阻將信號提拉至高電平。本設計中CC2430的引腳P1.0用于SCK,P1.1用于DATA。
3 節(jié)點的軟件設計
節(jié)點的軟件分為數(shù)據(jù)采集、電池能量檢測和無線通信這三個分別設計的模塊。以下給出了各個模塊的流程圖和詳細說明。
3.1 溫濕度數(shù)據(jù)采集模塊
溫濕度傳感器SHT10采用類似但不兼容I2C總線的方式和處理器通信。數(shù)據(jù)通過DATA線直接讀取,控制流程如圖3所示。首先用一組啟動傳輸時序進行數(shù)據(jù)傳輸?shù)某跏蓟?,然后發(fā)送一組測量命令(‘00000101’表示相對濕度,‘00000011’表示攝氏溫度),釋放DATA線,等SHT10下拉DATA至低電平,表示測量結束,同時接收數(shù)據(jù)。
其中產生啟動傳輸時序的程序片段如下:
……
P1_1=1;
P1_0=1;
wait(1);//等待1ms
P1_1=0;
wait(1);
P1_0=0;
wait(1);
P1_0=1;
wait(1);
P1_1=1;
wait(1);
P1_0=0;
……
測量溫度后,通過T=d1+d2×SOT計算出溫度。
測量濕度后,再根據(jù)當前的溫度,通過RH=(T℃-25)×(t1+t2×SORH)+c1+c2×SORH+c3×SORH2,計算出相對濕度。其中常量d1、d2、t1、t2、c1、c2和c3由SHT1x數(shù)據(jù)手冊提供。
3.2 電源能量檢測模塊
無線傳感器網絡節(jié)點通常采用電池供電,電池的能量檢測是重要環(huán)節(jié)。CC2430的ADC模塊不僅可以采樣P0端口引腳上的輸入電壓,還可以采樣AVDD_SoC引腳上的1/3電壓。這個功能通常用于實現(xiàn)電池的能量檢測,即檢測當前的電源電壓是否在CC2430所能工作電壓范圍2.0~3.6V內。完成一次AD轉換的控制流程是:首先設置AVDD_SoC引腳上電壓的1/3為采樣輸入,然后啟動AD轉換,等待AD轉換結束,寄存器ADCH:ADCL中的數(shù)據(jù)即為參考電壓的相對數(shù)值。
由于是對電池能量的檢測,可以采用CC2430內部提供的1.25V電壓作為參考電壓。用這個參考電壓采樣AVDD_SoC引腳上的1/3電壓,從而得出當前的電源電壓值。選用8位的采樣精度,則寄存器ADCCON3應配置為0x0F。設置完寄存器后,ADC立即啟動一次AD轉化,寄存器ADCCON1的EOC位用于指示當前的轉化是否結束。當EOC位變?yōu)?時,證明當前的轉換完成,轉換后的數(shù)值被存放在寄存器ADCH中。ADCH中的數(shù)值被讀取后,EOC位自動恢復為0。根據(jù)取出的數(shù)值計算得到當前AVDD_SoC上引腳的電壓。通過連續(xù)采樣10次進行均值濾波,用這個平均值與用戶設定的最低有效工作電壓2.4V相比,可判斷出當前電壓是否正常。該模塊的程序流程圖如圖4。
其中由DATA[0...9]的均值Average計算實際電壓的代碼如下:
……
Voltage=( (Average*15)>>9);//Voltage為實際電壓的10倍
……
3.3 無線通信模塊
無線傳感器網絡通信的基礎是節(jié)點之間的點對點通信。本小節(jié)以兩個節(jié)點之間的通信為例,介紹了點對點通信的過程和實現(xiàn)方法。首先,定義一種比IEEE802.15.4規(guī)范所定義的MAC協(xié)議層數(shù)據(jù)幀簡單的MAC層數(shù)據(jù)幀的格式:
其中目標地址和源地址分別用1個字節(jié)表示。本例中只有兩個節(jié)點互相通信,分別將兩個節(jié)點的地址設為0和1。標志位Flags占1個字節(jié),用于表示當前數(shù)據(jù)幀的類型。當數(shù)據(jù)幀中Flags字節(jié)的最高位為1時,表示該幀是數(shù)據(jù)序列中的一幀;第3位為1時,表示該幀是超時重傳的數(shù)據(jù)幀;第2位為1時表示該幀是接收到數(shù)據(jù)幀后的答復幀;第1位為1時,表示目標節(jié)點在收到該數(shù)據(jù)幀后要答復。幀校驗FCS由2個字節(jié)表示,是MAC層協(xié)議數(shù)據(jù)單元MPDU的校驗。如果CC2430的RF寄存器MDMCTRL0L.AUTOCRC控制位設為1,F(xiàn)CS將由硬件自動實現(xiàn),負責必須由軟件用多項式x16+x12+x5+1進行CRC的生成和校驗。
由于IEEE802.15.4規(guī)范中定義了物理服務數(shù)據(jù)單元(PSDU)的最大長度為127字節(jié),而其中的5字節(jié)已經被使用,因此有效負載payload的字節(jié)長度在1~122之間。如果需要傳送的數(shù)據(jù)長度超過122字節(jié),則發(fā)送時這個數(shù)據(jù)應該被拆分成若干數(shù)據(jù)幀,以滿足最大長度的限制。目標節(jié)點則必須能夠將接收到的數(shù)據(jù)幀整合成完整的數(shù)據(jù)。
IEEE802.15.4規(guī)定了RF物理層的工作頻段為2.4GHz,共有16個頻道。每個頻道的實際工作頻率和頻道序號的關系式為:Fc=2405+5×(k-11)MHz,k=11,12,…26。兩個節(jié)點的RF必須工作在相同的頻道上,才能夠互相收發(fā)數(shù)據(jù)。完成一次數(shù)據(jù)發(fā)送的程序流程圖如圖5。
系統(tǒng)初始化主要是將系統(tǒng)的工作頻率設為32MHz的晶振頻率,這樣RF才能正常工作。RF初始化時,先設置通信頻率,再通過設置RFPWR.RREG_RADIO_PD位為1給RF供電。RF初始化的過程還包括執(zhí)行下面的代碼來開啟Rx,清空Rx、Tx的FiFo緩沖區(qū)以及校準Radio。
SRXON;
SFLUSHTX;
SFLUSHRX;
SFLUSHRX;
STXCALN;
ISSTART;
DMA的初始化階段要為Tx分配1個空閑的DMA通道。首先要為通道0和通道1~4分別設置好通道描述數(shù)據(jù)結構的存放地址,并將首地址分別寫入DMA0CFGH:DMA0CFGL和DMA1CFGH:DMA1CFGL。再為這個分配好的DMA通道設置其描述數(shù)據(jù)結構。該數(shù)據(jù)結構如下:
typedef struct {
BYTE SRCADDRH;//源地址
BYTE SRCADDRL;
BYTE DESTADDRH;//目的地址
BYTE DESTADDRL;
BYTE VLEN ?:3;
BYTE LENH??:5;
BYTE LENL???:8;
BYTE WORDSIZE?:1;
BYTE TMODE??:2;
BYTE TRIG???:5;
BYTE SRCINC??:2;
BYTE DESTINC??:2;
BYTE IRQMASK??:1;
BYTE M8???:1;
BYTE PRIORITY??:2;
} DMA_DESC;
當設置為Tx準備的DMA通道時,需將數(shù)據(jù)的源地址SRCADDRH: SRCADDRL設為所要發(fā)送數(shù)據(jù)的起始地址,目標地址DESTADDRH: DESTADDRL設為寄存器RFD的地址0xDFD9。然后,在LENH:LENL中設置所要發(fā)送數(shù)據(jù)的長度,并將VLEN設為0。將WORDSIZE位設為0,表示DMA數(shù)據(jù)按字節(jié)進行傳輸(設為1表示按字傳輸)。DMA的數(shù)據(jù)傳送模式按照一次觸發(fā)傳輸?shù)臄?shù)據(jù)量可分成四種,由TMODE設置選擇。本例中采用Block模式,即一次DMA觸發(fā)可進行一個完整數(shù)據(jù)塊的傳輸。CC2430定義的DMA觸發(fā)信號有31種之多,由TRIG位設置。將TRIG設置為0,表示采用無觸發(fā)模式,這樣DMA在每次接收到DMAREQ信號后才啟動一次數(shù)據(jù)傳輸。SRCINC和DESTINC分別用于設置數(shù)據(jù)源地址和目標地址的變化方式,可設為不變、增1、增2或減1。由于采用按字節(jié)的Block模式向Radio發(fā)送數(shù)據(jù),因此數(shù)據(jù)源地址選擇增1變化,而數(shù)據(jù)目標地址則一直為寄存器RFD的地址0xDFD9,故設為不變。IRQMASK位用于設置是否在DMA數(shù)據(jù)傳輸完后發(fā)中斷信號。本例中設為0,即禁止DMA中斷。M8是按字節(jié)傳輸時的數(shù)據(jù)寬度,設為0表示8位傳輸,為1時表示只傳輸字節(jié)的低7位。本例中設為0。PRIORITY用于優(yōu)先級設置,本例中設為2,即中等優(yōu)先級。
DMA描述設置好后,通過設置寄存器DMAARM和RMREQ的位來準備相應的DMA通道以及啟動這個通道上數(shù)據(jù)塊的傳輸。在啟動DMA數(shù)據(jù)傳輸之前,將當前數(shù)據(jù)幀的長度、目標節(jié)點地址、源節(jié)點地址、標志字節(jié)通過直接寫寄存器RFD的方式寫入TXFIFO。這樣在啟動DMA傳輸后,完整的數(shù)據(jù)幀將被傳輸至TXFIFO。通過給CSP發(fā)送指令ISTXONCCA啟動TX傳輸。這就完成了一幀數(shù)據(jù)的發(fā)送。
數(shù)據(jù)接收的過程同樣需要設置系統(tǒng)工作頻率為32MHz,且應確保Rx工作在Tx相同的頻道上,并設置DMA通道。其中DMA的數(shù)據(jù)源為寄存器RFD,并將DMA觸發(fā)信號設為RADIO,即Radio接收到數(shù)據(jù)時觸發(fā)DMA。數(shù)據(jù)接收的程序流程如圖6所示。
本文在總結歸納對芯片CC2430已有研究成果的基礎上,闡述了基于CC2430的無線傳感器網絡節(jié)點的設計和實現(xiàn),并詳細介紹了兩個節(jié)點之間點對點通信的實現(xiàn)。在實驗中,節(jié)點能夠采集環(huán)境的溫、濕度和節(jié)點的電池電壓,并將采集的數(shù)據(jù)在節(jié)點中傳播。本文的研究為進一步的上層通信協(xié)議設計提供了基礎,具有一定的研究意義。
評論
查看更多