基于CC2430的無線傳感器網絡節點設計
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。
評論