基于CC2430的無(wú)線(xiàn)傳感器網(wǎng)絡(luò )節點(diǎn)設計
3.1 溫濕度數據采集模塊
溫濕度傳感器SHT10采用類(lèi)似但不兼容I2C總線(xiàn)的方式和處理器通信。數據通過(guò)DATA線(xiàn)直接讀取,控制流程如圖3所示。首先用一組啟動(dòng)傳輸時(shí)序進(jìn)行數據傳輸的初始化,然后發(fā)送一組測量命令(‘00000101’表示相對濕度,‘00000011’表示攝氏溫度),釋放DATA線(xiàn),等SHT10下拉DATA至低電平,表示測量結束,同時(shí)接收數據。
其中產(chǎn)生啟動(dòng)傳輸時(shí)序的程序片段如下:
……
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;
……
測量溫度后,通過(guò)T=d1+d2×SOT計算出溫度。
測量濕度后,再根據當前的溫度,通過(guò)RH=(T℃-25)×(t1+t2×SORH)+c1+c2×SORH+c3×SORH2,計算出相對濕度。其中常量d1、d2、t1、t2、c1、c2和c3由SHT1x數據手冊提供。
3.2 電源能量檢測模塊
無(wú)線(xiàn)傳感器網(wǎng)絡(luò )節點(diǎn)通常采用電池供電,電池的能量檢測是重要環(huán)節。CC2430的ADC模塊不僅可以采樣P0端口引腳上的輸入電壓,還可以采樣AVDD_SoC引腳上的1/3電壓。這個(gè)功能通常用于實(shí)現電池的能量檢測,即檢測當前的電源電壓是否在CC2430所能工作電壓范圍2.0~3.6V內。完成一次AD轉換的控制流程是:首先設置AVDD_SoC引腳上電壓的1/3為采樣輸入,然后啟動(dòng)AD轉換,等待AD轉換結束,寄存器ADCH:ADCL中的數據即為參考電壓的相對數值。
由于是對電池能量的檢測,可以采用CC2430內部提供的1.25V電壓作為參考電壓。用這個(gè)參考電壓采樣AVDD_SoC引腳上的1/3電壓,從而得出當前的電源電壓值。選用8位的采樣精度,則寄存器ADCCON3應配置為0x0F。設置完寄存器后,ADC立即啟動(dòng)一次AD轉化,寄存器ADCCON1的EOC位用于指示當前的轉化是否結束。當EOC位變?yōu)?時(shí),證明當前的轉換完成,轉換后的數值被存放在寄存器ADCH中。ADCH中的數值被讀取后,EOC位自動(dòng)恢復為0。根據取出的數值計算得到當前AVDD_SoC上引腳的電壓。通過(guò)連續采樣10次進(jìn)行均值濾波,用這個(gè)平均值與用戶(hù)設定的最低有效工作電壓2.4V相比,可判斷出當前電壓是否正常。該模塊的程序流程圖如圖4。
其中由DATA[0...9]的均值Average計算實(shí)際電壓的代碼如下:
……
Voltage=( (Average*15)>>9);//Voltage為實(shí)際電壓的10倍
……
3.3 無(wú)線(xiàn)通信模塊
無(wú)線(xiàn)傳感器網(wǎng)絡(luò )通信的基礎是節點(diǎn)之間的點(diǎn)對點(diǎn)通信。本小節以?xún)蓚€(gè)節點(diǎn)之間的通信為例,介紹了點(diǎn)對點(diǎn)通信的過(guò)程和實(shí)現方法。首先,定義一種比IEEE802.15.4規范所定義的MAC協(xié)議層數據幀簡(jiǎn)單的MAC層數據幀的格式:
其中目標地址和源地址分別用1個(gè)字節表示。本例中只有兩個(gè)節點(diǎn)互相通信,分別將兩個(gè)節點(diǎn)的地址設為0和1。標志位Flags占1個(gè)字節,用于表示當前數據幀的類(lèi)型。當數據幀中Flags字節的最高位為1時(shí),表示該幀是數據序列中的一幀;第3位為1時(shí),表示該幀是超時(shí)重傳的數據幀;第2位為1時(shí)表示該幀是接收到數據幀后的答復幀;第1位為1時(shí),表示目標節點(diǎn)在收到該數據幀后要答復。幀校驗FCS由2個(gè)字節表示,是MAC層協(xié)議數據單元MPDU的校驗。如果CC2430的RF寄存器MDMCTRL0L.AUTOCRC控制位設為1,FCS將由硬件自動(dòng)實(shí)現,負責必須由軟件用多項式x16+x12+x5+1進(jìn)行CRC的生成和校驗。
由于IEEE802.15.4規范中定義了物理服務(wù)數據單元(PSDU)的最大長(cháng)度為127字節,而其中的5字節已經(jīng)被使用,因此有效負載payload的字節長(cháng)度在1~122之間。如果需要傳送的數據長(cháng)度超過(guò)122字節,則發(fā)送時(shí)這個(gè)數據應該被拆分成若干數據幀,以滿(mǎn)足最大長(cháng)度的限制。目標節點(diǎn)則必須能夠將接收到的數據幀整合成完整的數據。
IEEE802.15.4規定了RF物理層的工作頻段為2.4GHz,共有16個(gè)頻道。每個(gè)頻道的實(shí)際工作頻率和頻道序號的關(guān)系式為:Fc=2405+5×(k-11)MHz,k=11,12,…26。兩個(gè)節點(diǎn)的RF必須工作在相同的頻道上,才能夠互相收發(fā)數據。完成一次數據發(fā)送的程序流程圖如圖5。
評論