徐智博,王銘海,張劍楠,吳春姬,李占龍
(1.吉林大學(xué)物理學(xué)院,吉林長春 130012;2.吉林大學(xué)大數(shù)據(jù)與網(wǎng)絡(luò)管理中心,吉林長春 130012)
ZigBee協(xié)議是無線傳感器網(wǎng)絡(luò)的工業(yè)標(biāo)準(zhǔn)[1],具有低功耗、低成本、體積小等特點[2],廣泛應(yīng)用于樓宇自動化、現(xiàn)場監(jiān)測等領(lǐng)域[3]。由于節(jié)點發(fā)射功率較低,節(jié)點的安裝位置(如距離、遮擋、電磁干擾等)對通信質(zhì)量會產(chǎn)生很大影響[4],因此對ZigBee通信質(zhì)量的測量非常必要。
然而,目前大多數(shù)研究者只從NWK層的路由算法入手,對“端到端”的通信質(zhì)量進(jìn)行測量和優(yōu)化[5],或者提出通過增加路由節(jié)點或增大發(fā)射功率的方法[6]改善通信質(zhì)量,而忽略了“點到點”測量的重要性[7],導(dǎo)致整個網(wǎng)絡(luò)得不到根本優(yōu)化,增加了功耗和成本。
在點到點的研究中,文獻(xiàn)[4]雖然從理論上推導(dǎo)了ZigBee點到點通信質(zhì)量的估算方法,但其理論僅局限于戶外開闊環(huán)境。此外,文獻(xiàn)中提及的點到點測量儀器也大都是出于對物體定位的目的[8],只對RSSI這一個參數(shù)進(jìn)行測量,測量參數(shù)單一,且只能測量單程的通信質(zhì)量,不能滿足工程的需要。
為此,本文設(shè)計的ZigBee點到點通信質(zhì)量測量儀是以ZigBee的MAC層數(shù)據(jù)幀和應(yīng)答幀為基礎(chǔ),通過兩點間通信的方式完成點到點通信質(zhì)量的定量測量,采用多個參數(shù)對通信質(zhì)量進(jìn)行聯(lián)合表征,避免了單一參數(shù)的局限性,且可同時對往返路徑進(jìn)行雙向測量,使測量效率提升1倍。
接收數(shù)據(jù)時,對8個連續(xù)符號的接收強(qiáng)度取平均值即為RSSI。接收信號的強(qiáng)度越大則RSSI越大,通信質(zhì)量可能就越好。但此參數(shù)只能表征接收到信號強(qiáng)度的大小,若出現(xiàn)高強(qiáng)度的噪聲干擾時可能會出現(xiàn)誤判,因此僅使用RSSI作為評價指標(biāo)具有一定局限性。
由于SFD(幀定界符)具有固定的數(shù)據(jù)格式,因此可對接收到每一幀的SFD信號的前8個符號與標(biāo)準(zhǔn)格式進(jìn)行數(shù)據(jù)相關(guān)性計算,得到的結(jié)果即為LQI。LQI可表征接收數(shù)據(jù)的誤碼率情況,接收誤碼率越高則LQI值越低,通信質(zhì)量就越差。雖然LQI能對接收幀的誤碼率進(jìn)行表征,但對于未成功接收的幀并不具有表征能力。
設(shè)在一段時間內(nèi)發(fā)送方發(fā)出了NTx個幀,接收方在此期間收到了NRx個幀,則R=NRx/NTx×100%。收幀率是從統(tǒng)計的角度描述通信質(zhì)量,其值越高則通信質(zhì)量越好。
由以上分析可知,單一參數(shù)描述通信質(zhì)量具有一定局限性。因此本設(shè)計同時對上述參數(shù)進(jìn)行測量,以求對通信質(zhì)量進(jìn)行更全面的描述。
本設(shè)計采用2個節(jié)點間互相通信的方式進(jìn)行測量。設(shè)兩節(jié)點分別為A和B,它們的軟硬件完全相同,都具有發(fā)送和接收功能。當(dāng)按下其中一個節(jié)點的測量鍵時,便啟動了一輪測量。A和B上電后會記錄各自在本輪測量中接收的幀數(shù)nRx(A)、nRx(B)和發(fā)送的幀數(shù)nTx(A)、nTx(B),其值在每輪測量結(jié)束后清零。本文以A主動發(fā)送B被動接收為例,說明測量流程,如圖1所示。
圖1 系統(tǒng)測量流程
當(dāng)A的測量鍵被按下時,便會向B發(fā)送N個數(shù)據(jù)幀,每發(fā)送一幀都會更新nTx(A)的值。B收到每一幀時都會記錄此幀的RSSI和LQI,且更新nRx(B)的值。本輪測量結(jié)束后,B會計算A到B的平均RSSI、LQI和收幀率RA→B,最后蜂鳴器響以示本輪中A到B的單程測量結(jié)束。其中RA→B的計算式如下:
(1)
當(dāng)A發(fā)送完本輪的N個數(shù)據(jù)幀時,B也應(yīng)該立即結(jié)束本輪數(shù)據(jù)的接收,否則可能會因為B的上一輪接收還未完成,A又發(fā)起了下一輪測量,導(dǎo)致接收紊亂,影響測量的準(zhǔn)確性。而B能否收到N個幀中的具體幀具有不確定性。為解決上述問題,程序約定A會以T/幀的間隔向B發(fā)送數(shù)據(jù),且每幀中都要包含T、N和當(dāng)前幀的序號i(i=1,2,…,N)等信息。當(dāng)B在本輪測量中接收到第一個幀時,會記錄T、N的值以及此幀的序號i(i可能為1至N的任意整數(shù)),同時啟動一個延時時間為T(N+1-i)的定時器作為接收等待時間,超時后便認(rèn)為本輪接收已完成,這樣就保證了A和B能在同一時間結(jié)束本輪測量。
為實現(xiàn)B到A的返程測量,A向B發(fā)送的數(shù)據(jù)幀中應(yīng)帶有應(yīng)答請求的信息,利用B發(fā)送給A的應(yīng)答幀的RSSI和LQI計算返程通信質(zhì)量。具體實現(xiàn)如下:若B收到的數(shù)據(jù)幀中帶有應(yīng)答請求,則會立即向A發(fā)送應(yīng)答幀,同時更新nTx(B)的值。A接收到應(yīng)答幀后同樣會記錄RSSI和LQI,同時更新nRx(A)的值。當(dāng)本輪測量結(jié)束時,A會根據(jù)應(yīng)答幀的接收情況計算本輪測量B到A的平均RSSI、LQI和收幀率RB→A,最后蜂鳴器響以示本輪中B到A的返程測量結(jié)束。RB→A計算式為
(2)
在一輪測量中,B只要至少接收到N個幀中的1個,便可正確計算收幀率(此時收幀率≥1/N)。但若本輪中的N個幀全部沒有收到,則會影響收幀率的準(zhǔn)確計算(此時收幀率<1/N)。為解決此問題,A和B同時還會記錄各自在多輪測量中發(fā)送的總幀數(shù)cntTx(A)、cntTx(B)和接收的總幀數(shù)cntRx(A)、cntRx(B),其值只有在手動按下清零鍵時才會清零,否則會一直將每輪的計數(shù)值累加。因此可根據(jù)需要手動計算A到B的總收幀率R總A→B以及B到A的總收幀率R總B→A,使測量結(jié)果更加準(zhǔn)確。
(3)
(4)
為滿足手持式儀器低功耗、體積小等特點,在軟硬件功能上進(jìn)行了精簡,節(jié)點電路原理圖如圖2所示。每個節(jié)點從功能上可分為電源模塊、MCU模塊、無線收發(fā)模塊、顯示屏、按鍵、蜂鳴器和串口等部分。
圖2 節(jié)點電路原理圖
設(shè)計所選用的控制芯片和液晶顯示模塊都使用3.3 V直流電壓進(jìn)行供電,所以電源模塊使用3節(jié)5號電池作為供電源,并采用低壓差穩(wěn)壓芯片MCP1700-3.3進(jìn)行穩(wěn)壓,為系統(tǒng)提供穩(wěn)定的電源電壓VCC(3.3 V),MCP1700-3.3的最小壓差為178 mV,靜態(tài)電流僅1.6 μA,非常適用于電池供電的設(shè)備。
主控芯片采用CC2530單片機(jī)。CC2530是專為ZigBee協(xié)議設(shè)計的一款芯片,是ZigBee的片上系統(tǒng)解決方案[9],其內(nèi)部集成了增強(qiáng)型的高速51內(nèi)核和256 KB的閃存[10],且外設(shè)資源豐富。外接了2個晶振,其中32 MHz晶振可為無線收發(fā)提供準(zhǔn)確的符號周期,32.768 kHz晶振作為休眠定時器的時鐘,使休眠時的電流僅為1 μA。無線收發(fā)模塊采用由電容和電感構(gòu)成的巴倫電路,并外接50 Ω的鞭狀天線,可進(jìn)行無線數(shù)據(jù)的收發(fā)。
顯示屏采用LCD5110型號的液晶模塊。該模塊為48×84的點矩陣,使用SPI協(xié)議操作,正常工作電流在0.2 mA以下,速率可達(dá)4 Mbps,具有功耗低、速率高、成本低、控制簡單等優(yōu)點,適用于電池供電的場合。
按鍵采用非自鎖式獨(dú)立按鍵。將CC2530的P06和P07設(shè)為輸入模式,當(dāng)無鍵按下時為高電平(懸空)狀態(tài),有鍵按下時相應(yīng)I/O口便由高電平跳轉(zhuǎn)到低電平。為實現(xiàn)軟件去抖,程序每隔10 ms掃描一次按鍵,若同一按鍵在相鄰兩次掃描均為低電平,則判定為該鍵按下。當(dāng)按下K清零時可使變量cntTx和cntRx清零,按下K測量可啟動新一輪的測量。
蜂鳴器采用有源電磁式蜂鳴器,可在2~3.5 V之間正常工作。當(dāng)P00為高電平時,三極管Q1導(dǎo)通,蜂鳴器發(fā)聲;當(dāng)P00為低電平時,蜂鳴器不發(fā)聲。
此外,還將單片機(jī)的P02和P03口引出作為串口與PC機(jī)通信,可作為程序調(diào)試、參數(shù)配置、數(shù)據(jù)分析等功能使用。
程序設(shè)定每個節(jié)點有3種狀態(tài)(State):Idle(空閑)、Tx(發(fā)送)和Rx(接收)。節(jié)點在同一時刻只能處于一種狀態(tài)。Idle為上電后的默認(rèn)狀態(tài),Tx和Rx之間不能直接切換。狀態(tài)間的切換如圖3所示。
圖3 節(jié)點狀態(tài)的切換
當(dāng)處于Idle狀態(tài)且檢測到K測量按下,節(jié)點會立刻切換到Tx狀態(tài),開始發(fā)送數(shù)據(jù)幀,此時只能接收應(yīng)答幀,不能接收數(shù)據(jù)幀。當(dāng)發(fā)送完N個數(shù)據(jù)幀后會自動切換到Idle狀態(tài)。
當(dāng)處于Idle狀態(tài)且收到數(shù)據(jù)幀時,節(jié)點會立刻切換到Rx狀態(tài),此時只能接收數(shù)據(jù)幀,不能接收應(yīng)答幀。當(dāng)本輪測量結(jié)束時會自動切換到Idle狀態(tài)。
程序主要由主程序和無線接收中斷服務(wù)程序(以下簡稱中斷)兩部分組成,程序流程圖分別如圖4和圖5所示。
圖4 主程序流程圖
圖5 中斷流程圖
主程序:上電初始化后,便進(jìn)行系統(tǒng)狀態(tài)的判斷:若為Idle狀態(tài),則進(jìn)行按鍵掃描;若為Tx狀態(tài),則開始發(fā)送數(shù)據(jù)幀,發(fā)送完后進(jìn)行計算并顯示;若為Rx狀態(tài),便啟動T(N+1-i)的延時器進(jìn)行接收超時等待,之后便進(jìn)行計算并顯示。
中斷:當(dāng)收到無線數(shù)據(jù)幀時便立即進(jìn)入中斷。中斷對收到的幀類型和系統(tǒng)狀態(tài)進(jìn)行判斷:若收到數(shù)據(jù)幀且為Idle狀態(tài),說明這是本輪收到的第1個幀,將狀態(tài)改為Rx,并記錄幀序號i;若收到數(shù)據(jù)幀且為Rx狀態(tài),則查看是否有應(yīng)答請求,若有則發(fā)送應(yīng)答幀并更新nTx值;若收到應(yīng)答幀且為Tx狀態(tài),說明收到了請求的應(yīng)答幀,則記錄RSSI和LQI,更新nRx值。
實驗采用A主動發(fā)送、B被動接收的形式,記錄在不同條件下B的測量結(jié)果(A到B的通信質(zhì)量)和A的測量結(jié)果(B到A的通信質(zhì)量),數(shù)據(jù)如表1所示。
表1 不同條件下儀器的測量值
由a、b和c組數(shù)據(jù)對比可見,隨著距離和遮擋的增加,RSSI值逐漸減小,但LQI和R開始時并未有明顯變化,待距離增大到一定程度后才開始變化,因此此時RSSI更具靈敏性。由a和d組數(shù)據(jù)對比可見,存在電磁干擾時對R的影響較大,但對RSSI和LQI影響較小,因此此時R更具靈敏性。儀器實物圖如圖6所示。
圖6 儀器實物圖
本文設(shè)計的手持式ZigBee點到點通信質(zhì)量測量儀,以CC2530模塊為控制核心,通過兩點間數(shù)據(jù)收發(fā)的方式測量ZigBee點到點的通信質(zhì)量。儀器可同時測量往返路徑的通信質(zhì)量,使測量效率提升1倍,且采用多參數(shù)對通信質(zhì)量進(jìn)行聯(lián)合表征,避免了單一參數(shù)的局限性。儀器具有測量快速、準(zhǔn)確,操作簡單,成本低,體積小等特點,適合在ZigBee網(wǎng)絡(luò)設(shè)計、安裝、調(diào)試與優(yōu)化等場合使用。也可擴(kuò)展為多個節(jié)點同時測量,提升測量效率。