張 新, 張 懷, 蔣 勵
(1.西安郵電大學(xué) 電子工程學(xué)院, 陜西 西安 710121; 2.西安郵電大學(xué) 通信與信息工程學(xué)院, 陜西 西安 710121)
無人船艦[1]是一種新型的搭載平臺,依托船舶,可裝載定位、導(dǎo)航以及控制設(shè)備。通過短距離無線傳感網(wǎng)絡(luò)[2],可使無線電波與其他系統(tǒng)進(jìn)行短距離無線通信,擴(kuò)大工作范圍,實現(xiàn)無人船艦上的數(shù)據(jù)交互[3]。同時,搭載多種海洋傳感器,監(jiān)測各類數(shù)據(jù)[4],實現(xiàn)岸基對無人船艦自身參數(shù)的獲取,以及在遠(yuǎn)洋上對其工作范圍內(nèi)的海洋環(huán)境、水面情況進(jìn)行監(jiān)測,完成各種海洋任務(wù)[5-6]。
短距離無線傳感網(wǎng)絡(luò)是由大量部署在監(jiān)測區(qū)域中具有感知、通信和處理能力的傳感器節(jié)點以自組織方式構(gòu)成的網(wǎng)絡(luò)。時鐘同步技術(shù)作為無線傳感網(wǎng)絡(luò)中重要支撐技術(shù),可為網(wǎng)絡(luò)中各個節(jié)點的本地時鐘提供統(tǒng)一的時間標(biāo)尺[7]。但在無線傳感網(wǎng)絡(luò)中,節(jié)點晶振受溫度、濕度、工程誤差等因素的影響,會產(chǎn)生傳輸延遲,導(dǎo)致各節(jié)點本地時鐘之間存在一定偏差。
目前,時鐘同步主要是基于IEEE 1588協(xié)議[8]實現(xiàn)的。IEEE 1588協(xié)議是網(wǎng)絡(luò)測量和控制系統(tǒng)的精密時鐘同步協(xié)議的標(biāo)準(zhǔn)[9]。該協(xié)議通過軟件和硬件,將網(wǎng)絡(luò)設(shè)備的內(nèi)時鐘與主控機(jī)的主時鐘實現(xiàn)同步,適用于大多數(shù)測控系統(tǒng)中[10-11]。而無人船艦數(shù)據(jù)傳輸系統(tǒng)屬于短距離的物聯(lián)網(wǎng)設(shè)備,其并不滿足無人船艦對數(shù)據(jù)傳輸?shù)囊?。因此,本文建立基于nRF24L01的無人船艦數(shù)據(jù)傳輸系統(tǒng)。利用發(fā)送端和接收端nRF24L01芯片中的數(shù)據(jù)幀,判斷接收端與發(fā)送端的時鐘是否同步。根據(jù)基于令牌環(huán)的時鐘同步協(xié)議,將通信時間片段化,再將每個時間片劃分為100個時隙,在每個時間片開始的前三個時隙里,主時鐘將時間戳信息以數(shù)據(jù)幀的方法發(fā)送給多個從時鐘。從時鐘按照收到的時間戳信息校準(zhǔn)自身的時鐘,最終實現(xiàn)發(fā)送端和接受端的時鐘同步。
無人船艦無線數(shù)據(jù)傳輸系統(tǒng)是由數(shù)據(jù)發(fā)送端、無線信道和數(shù)據(jù)接收端組成,結(jié)構(gòu)示意圖如圖1所示。數(shù)據(jù)發(fā)送端主要處理來自傳感器采集到的數(shù)據(jù)并將這些數(shù)據(jù)傳輸?shù)綌?shù)據(jù)接收端;數(shù)據(jù)接收端主要控制各個數(shù)據(jù)采集模塊之間的協(xié)調(diào)及對收到數(shù)據(jù)的處理,將處理后的數(shù)據(jù)上傳到PC機(jī)上進(jìn)行后期處理。
圖1 無人船通信系統(tǒng)結(jié)構(gòu)
在數(shù)據(jù)發(fā)送端中,微控制器(micro controller unit,MCU)均采用Cortex-M3系列中的STM32F103VET6芯片;通信模塊的射頻芯片均采用nRF24L01芯片。MCU通過串行外設(shè)接口(serial peripheral interface,SPI)總線與nRF24L01進(jìn)行通信,通信速率最高可達(dá)10 Mb/s,數(shù)據(jù)發(fā)送傳輸率最快可達(dá)2 Mb/s。nRF24L01芯片內(nèi)部具有自動應(yīng)答和自動重發(fā)兩個功能,通過SPI口對nRF24L01的寄存器進(jìn)行配置,決定是否開啟自動應(yīng)答和自動重發(fā)。在自動應(yīng)答模式下,nRF24L01收到有效的數(shù)據(jù)包后,系統(tǒng)將進(jìn)入發(fā)送模式并發(fā)送自動應(yīng)答信號,發(fā)送完自動應(yīng)答信號后,系統(tǒng)進(jìn)入正常工作模式[12]。
1.2.1 nRF24L01芯片
nRF24L01芯片[13]是工作在2.4~2.5 GHz世界通用頻段的單片無線收發(fā)器芯片,利用其內(nèi)置的頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊實現(xiàn)無線數(shù)據(jù)的傳輸,同時其內(nèi)部集成Enhanced Shock Burst協(xié)議,可以實現(xiàn)點對點或是點對多點的無線通信[14]。nRF24L01引腳封裝如圖2所示。
圖2 nRF24L01 引腳封裝
1.2.2 硬件接口電路
NRF24L01通過SPI接口與外部STM32F103微處理器進(jìn)行數(shù)據(jù)交換,芯片使能引腳作為芯片的使能端,與STM32F103微處理器的PC2引腳相連[16];片選引腳與MCU的PA4引腳相連;時鐘信號引腳與MCU的PA5引腳相連;主出從入引腳與MCU的PA7引腳相連;主入從出引腳與MCU的PA6引腳相連,中斷請求引腳與MCU的外部中斷3相連,當(dāng)nRF24L01產(chǎn)生中斷后中引腳將置低,MCU檢測到此中斷后通過程序得知其與nRF24L01無線射頻模塊的數(shù)據(jù)收發(fā)情況。通過MCU與無線通信模塊的硬件連接,從而實現(xiàn)模式控制和數(shù)據(jù)交換。發(fā)送端和接收端的硬件接口設(shè)計如圖3所示。
圖3 MCU與nRF24L01硬件接線
1.3.1 數(shù)據(jù)發(fā)送端
數(shù)據(jù)發(fā)送端控制傳感器進(jìn)行數(shù)據(jù)的采集,并將采集到的數(shù)據(jù)通過無線的方式發(fā)送到數(shù)據(jù)接收端。在發(fā)送端對傳感器采集到的每幀數(shù)據(jù)進(jìn)行編號,然后將這些編號裝入數(shù)據(jù)幀中和采集到數(shù)據(jù)一起發(fā)送出去。因此,在發(fā)送端可以通過查看幀序號判斷發(fā)送數(shù)據(jù)的總幀數(shù)。
數(shù)據(jù)發(fā)送端每發(fā)送一幀數(shù)據(jù),數(shù)據(jù)接收端收到這一幀數(shù)據(jù)后立刻給發(fā)送端一個應(yīng)答信號,如圖4所示。發(fā)送端可以根據(jù)實際發(fā)送的幀數(shù)和收到應(yīng)答的幀數(shù)判斷未收到應(yīng)答的幀數(shù),在接收端根據(jù)發(fā)送端發(fā)送的幀數(shù)和實際收到的幀數(shù)判斷沒有收到的幀數(shù)。
圖4 單幀通信過程
1.3.2 數(shù)據(jù)接收端
數(shù)據(jù)接收端主要是協(xié)調(diào)各個數(shù)據(jù)采集模塊之間傳輸數(shù)據(jù)的時間,以及處理采集到的數(shù)據(jù),最后將處理的數(shù)據(jù)發(fā)送到PC機(jī)上做后期處理,或者發(fā)送到數(shù)據(jù)接收端的顯示屏上進(jìn)行實時觀察。
接收端接收到發(fā)送端的數(shù)據(jù)以后,通過解析數(shù)據(jù)幀,從中提取傳感器采集到的數(shù)據(jù)和相應(yīng)的幀編號,就可以通過幀序號判斷接收到的數(shù)據(jù)幀的總幀數(shù),同時也可以統(tǒng)計出未收到幀數(shù)。
實際通信過程中,接收端給發(fā)送端的應(yīng)答有可能因為信道的干擾丟失了,導(dǎo)致發(fā)送端沒有收到應(yīng)答的幀數(shù)大于接收端沒有收到的幀數(shù)。
利用nRF24L01的自動應(yīng)答功能判斷發(fā)送端是否收到接收端的應(yīng)答信號[17],再根據(jù)應(yīng)答信號判斷接收端是否接收到有效數(shù)據(jù)幀,如果沒有收到應(yīng)答信號,則表明接收端沒有收到這一幀數(shù)據(jù),那么在發(fā)送端就能統(tǒng)計接收端的丟失幀數(shù),同時也統(tǒng)計出實際發(fā)送的幀數(shù)。在接收端可根據(jù)接收到的數(shù)據(jù)幀中的幀序號,判斷實際收到的幀數(shù)和實際丟失的幀數(shù)。
設(shè)定工作時間為5 min,得到1 000組數(shù)據(jù),按照每10次為一組進(jìn)行統(tǒng)計,在同樣的外界環(huán)境和系統(tǒng)設(shè)置下反復(fù)測試,結(jié)果如圖5所示。
圖5 校準(zhǔn)前5 min內(nèi)發(fā)送端與接收端幀數(shù)的差值
由圖5可以看出,當(dāng)通信時長為5 min時,發(fā)送端和接收端之間的數(shù)據(jù)幀編號相差12幀。如果按照每600 us發(fā)一幀數(shù)據(jù)計算,那么發(fā)送12幀數(shù)據(jù)就需要7 200 us,這剛好占了整個通信時間的24 PPM,超出了STM32F103 MCU的晶振的工程誤差20 PPM。說明隨著通信時間的增長,晶振的工程誤差會進(jìn)行累積,在整個測試的5 min內(nèi)累積7 200 us,導(dǎo)致接收端比發(fā)送端的通信時間相差7 200 us,也就是說,隨著通信時間的延長,接收端和發(fā)送端的時鐘相差越來越大,這樣就很難保證nRF24L01收發(fā)雙方的時鐘同步。
根據(jù)消息傳遞機(jī)制[18],可使控制網(wǎng)絡(luò)中的時鐘節(jié)點與接收端的時鐘節(jié)點間保持同步。接收端的時鐘節(jié)點為主時鐘,其他時鐘節(jié)點為從時鐘。從時鐘將記錄的本地時鐘t2與主時鐘發(fā)送的時間戳t1作比較,再依據(jù)時間戳t1對從時鐘進(jìn)行校準(zhǔn)。多個從時鐘同時依據(jù)時間戳t1校準(zhǔn)各自的本地時鐘,最終使得整個通信網(wǎng)絡(luò)達(dá)到時鐘同步。
根據(jù)時鐘同步原理,在發(fā)送端和接收端分別將時間按照50 ms分段,并將50 ms按照每500 us為一個時隙劃,分為100個時隙。把100個時隙分為令牌幀段、數(shù)據(jù)段和備用段。
第1個時隙為0號時隙段,第2時隙為1號時隙段,依次類推,第100個時隙為99號時隙段。0號時隙段、1號時隙段和2號時隙段作為令牌幀段,用來發(fā)送令牌幀,告知每個從時鐘,在當(dāng)前的50 ms內(nèi)時隙的分配方式以及當(dāng)前時刻主時鐘方的時間戳。每個從時鐘從3號時隙段開始一直到98號時隙段,一共96個時隙作為傳輸數(shù)據(jù)的時隙段,99號時隙作為備用段,考慮以后留作它用。時隙分配模式如圖6所示。
圖6 50 ms信令周期時隙
在50 ms開始的前3個時隙,即幀序號分別為0x01、0x02和0x03作為信令幀,接收端以廣播的形式,將當(dāng)前的時隙分配模式信息及主時鐘的時間戳作為1個數(shù)據(jù)幀,發(fā)送給各個發(fā)送端。信令幀的時間軸關(guān)系流如圖7所示。
圖7 信令幀的時間軸關(guān)系流
每50 ms進(jìn)行一次時鐘同步的矯正,使得通信系統(tǒng)達(dá)到時鐘同步。發(fā)送端和接收端的工作流程分別如圖8和圖9所示。
圖8 發(fā)送端工作流程
圖9 接收端工作流程
基于令牌環(huán)的時鐘同步協(xié)議具體實現(xiàn)步驟如下。
步驟1 發(fā)送端連續(xù)發(fā)送三幀無應(yīng)答的載荷幀,接收端測試收到0x01、0x02和0x03的時間,即通信過程中的傳輸時延,分別為400 us、744 us和1 088 us。
步驟2 在接收端判斷每個50 ms內(nèi)收到的第一幀數(shù)據(jù)的幀序號。
步驟3 按照收到的第一幀數(shù)據(jù)的幀序號,給50 ms定時器當(dāng)前計數(shù)值寄存器里面裝步驟1中相應(yīng)的值。
步驟4 從當(dāng)前值開始計數(shù)至50 ms結(jié)束,此時,發(fā)送端與接收端時鐘保持同步。
發(fā)送端和接收端50 ms計時開始時,MCU上的一個I/O口的電平進(jìn)行反轉(zhuǎn)。這樣每50 ms相應(yīng)的I/O口的電平就翻轉(zhuǎn)一次,再用雙蹤示波器分別對發(fā)送端和接收端的I/O口電平進(jìn)行觀察。由于兩邊都是50 ms翻轉(zhuǎn)一次,所以周期就是100 ms,可在示波器上觀察到兩個10 Hz的方波,波形如圖10所示。
圖10 示波器波形
由圖10可以看出,示波器出現(xiàn)兩個同頻且同步的波形,其頻率都是10 MHz。表明經(jīng)過令牌環(huán)的時鐘同步協(xié)議矯正后,發(fā)送端和接收端的時鐘是嚴(yán)格同步的。
利用實際通信過程中的實驗數(shù)據(jù),驗證基于令牌環(huán)的時鐘同步協(xié)議的可行性。設(shè)定工作時間為5 min,得到1 000組數(shù)據(jù),按照每10次為一組進(jìn)行統(tǒng)計,在同樣的外界環(huán)境和系統(tǒng)設(shè)置下反復(fù)測試,結(jié)果如圖11所示。
由圖11可以看出,經(jīng)過令牌環(huán)的時鐘同步協(xié)議矯準(zhǔn)后,5 min 內(nèi)發(fā)送的1 000幀數(shù)據(jù)中,發(fā)送端與接收端幀數(shù)的差值接近0,時鐘誤差始終保持在1 us以內(nèi)。
圖11 校準(zhǔn)后5 min內(nèi)發(fā)送端與接收端幀數(shù)的差值
建立了基于nRF24L01的無人船艦數(shù)據(jù)傳輸系統(tǒng),利用nRF24L01芯片的自動應(yīng)答功能找出了該系統(tǒng)收發(fā)雙方時鐘不同步的原因。基于令牌環(huán)的時鐘同步協(xié)議,使得接收端和發(fā)送端時鐘同步。實驗結(jié)果表明,系統(tǒng)運行到穩(wěn)態(tài)時,主時鐘和從時鐘之間的時間誤差可精確到1 us以內(nèi)。