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