摘 要: 設(shè)計(jì)了一種基于ARM與FPGA的便攜式GNSS導(dǎo)航信號(hào)采集回放系統(tǒng)。該系統(tǒng)可采集復(fù)雜情況下的導(dǎo)航衛(wèi)星信號(hào),并且增益可控,為導(dǎo)航接收機(jī)測(cè)試提供了特定的信號(hào)源。系統(tǒng)將導(dǎo)航衛(wèi)星信號(hào)經(jīng)射頻電路轉(zhuǎn)換為數(shù)字中頻信號(hào),通過(guò)FPGA處理后保存至SATA硬盤(pán)。ARM處理器作為監(jiān)控端發(fā)送指令至FPGA,控制FPGA進(jìn)行數(shù)據(jù)采集與回放,同時(shí)接收監(jiān)控接收機(jī)串口發(fā)送的報(bào)文,提取載噪比信息,并繪制載噪比柱狀圖。該系統(tǒng)ARM端基于嵌入式Linux系統(tǒng)開(kāi)發(fā),采用Qt4設(shè)計(jì)用戶圖形界面,可擴(kuò)展及可移植性強(qiáng),為系統(tǒng)的后續(xù)開(kāi)發(fā)提供了保障。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)信號(hào)質(zhì)量滿足要求,ARM監(jiān)控端數(shù)據(jù)處理時(shí)間在200 ms~500 ms之間,實(shí)時(shí)性良好。
0 引言
目前,GNSS衛(wèi)星導(dǎo)航定位系統(tǒng)的應(yīng)用越來(lái)越廣泛,包括中國(guó)、美國(guó)、歐盟、俄羅斯等世界主要強(qiáng)國(guó)都在積極布置自己的全球衛(wèi)星導(dǎo)航定位系統(tǒng)[1]。雖然中國(guó)在衛(wèi)星導(dǎo)航方面起步較晚,但是技術(shù)發(fā)展迅猛,隨著中國(guó)的北斗2號(hào)衛(wèi)星導(dǎo)航系統(tǒng)的逐步完善,使得中國(guó)成為繼美俄之后第三個(gè)擁有完整的導(dǎo)航系統(tǒng)的國(guó)家。國(guó)內(nèi)市場(chǎng)對(duì)導(dǎo)航接收機(jī)的需求也越來(lái)越多,設(shè)計(jì)高性能、多模式、低價(jià)位的導(dǎo)航接收機(jī)已成為研究熱點(diǎn)。作為導(dǎo)航接收機(jī)研發(fā)過(guò)程中必不可少的設(shè)備,采集回放系統(tǒng)具有廣闊的應(yīng)用前景。所以,迫切需要設(shè)計(jì)一種價(jià)格低廉、便攜性好、界面直觀、可操作性強(qiáng)的GNSS導(dǎo)航信號(hào)采集回放系統(tǒng)。
綜上,該系統(tǒng)的監(jiān)控端采用了基于CortexA8系列的ARM處理器,該處理器同時(shí)兼顧了成本與性能的要求,可設(shè)計(jì)美觀的圖形化操作界面。該系統(tǒng)工作于BD2-B1和GPS-L1兩個(gè)頻點(diǎn),便攜性好,界面直觀,可通過(guò)按鍵或觸摸屏兩種方式操作,同時(shí)可隨時(shí)采集戶外復(fù)雜環(huán)境下的導(dǎo)航衛(wèi)星信號(hào),極大地提高了導(dǎo)航接收機(jī)的開(kāi)發(fā)效率和質(zhì)量。
1 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)整體分為射頻模塊與基帶模塊兩大部分。其中,射頻模塊負(fù)責(zé)接收和發(fā)送射頻信號(hào),并將射頻信號(hào)轉(zhuǎn)換為基帶信號(hào)后交由基帶模塊處理;基帶模塊完成用戶交互、接口對(duì)接等功能。此外還包括SSD硬盤(pán)(數(shù)據(jù)存儲(chǔ)的介質(zhì),存放采集和回放的數(shù)據(jù))以及對(duì)外各種接口。系統(tǒng)的結(jié)構(gòu)組成如圖1所示。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 射頻模塊
射頻模塊可分為上變頻與下變頻兩大部分,下變頻部分的核心器件采用MAX2769B芯片,該芯片是一款多模導(dǎo)航接收機(jī)芯片,適用于GPS/北斗/格洛納斯/伽利略衛(wèi)星導(dǎo)航定位系統(tǒng)。上變頻部分的增益控制器件采用了HMC472LP4數(shù)控衰減芯片,該衰減芯片步進(jìn)0.5 dB,最高衰減31.5 dB,分別由V1~V6 6個(gè)引腳控制,低電平有效。上下變頻部分均采用C8051F230單片機(jī)進(jìn)行配置,下變頻部分采用GPIO口模擬SPI接口對(duì)MAX2769B芯片寫(xiě)配置字,配置相關(guān)參數(shù);上變頻模塊通過(guò)控制12個(gè)GPIO口電平的高低配置增益。同時(shí),射頻模塊的上下變頻部分均采用杭州中科微電子的ATGM332D導(dǎo)航接收機(jī)作為監(jiān)控接收機(jī),上下變頻模塊分別將監(jiān)控接收機(jī)接收的報(bào)文信息通過(guò)串口送入FPGA模塊,由FPGA選擇輸出至ARM端。圖2為射頻模塊原理圖[2]。
?
2.2 基帶模塊
基帶模塊可以分為FPGA模塊、ARM模塊及基帶底板3個(gè)部分?;鶐У装迨歉髂K連接的橋梁,并完成除ARM、FPGA之外的所有功能,各模塊均以接插件形式與底板連接。這里創(chuàng)新性地采用了SSD硬盤(pán)進(jìn)行數(shù)據(jù)存儲(chǔ),滿足了設(shè)備長(zhǎng)時(shí)間采集數(shù)據(jù)對(duì)大容量空間的需求。由于系統(tǒng)復(fù)雜性高,本文對(duì)于基帶底板子模塊只介紹電源與時(shí)鐘電路的設(shè)計(jì)方案。
2.2.1 FPGA模塊
FPGA采用了Xilinx 的XC7K325TFFG900-2型FPGA(下文簡(jiǎn)稱K7)。K7系列是Xilinx最新推出的面向中低端市場(chǎng)的低價(jià)位、高性能FPGA[3]。K7核心板主要負(fù)責(zé)對(duì)接射頻數(shù)據(jù)接口和高速收發(fā)接口,F(xiàn)PGA內(nèi)部邏輯結(jié)構(gòu)如圖3所示,根據(jù)功能大致分為3個(gè)部分:控制單元、SATA控制器、UART分線單元。FPGA的控制單元主要負(fù)責(zé)系統(tǒng)的差錯(cuò)控制及與ARM端的通信。這里ARM與FPGA是通過(guò)SMC總線進(jìn)行通信的,需要在Linux內(nèi)核中編寫(xiě)K7處理器的SMC總線驅(qū)動(dòng)[4]。
?
2.2.2 ARM模塊
ARM模塊采用Atmel SAMA5D31處理器,該處理器基于Cortex-A5架構(gòu),主頻528 MHz,內(nèi)部集成了浮點(diǎn)運(yùn)算單元,是一款高性能、低功耗的嵌入式處理器。ARM模塊集成了256 MB ROM、256 MB RAM,保證性能的同時(shí)降低了開(kāi)發(fā)成本。對(duì)于本系統(tǒng)而言,選用該模塊是考慮了性能、功耗、價(jià)位等多種綜合因素的結(jié)果[5]。ARM作為主控芯片控制整個(gè)系統(tǒng)流程,圖4所示為ARM與其他部件的連接關(guān)系圖。
?
2.2.3 基帶底板(電源與時(shí)鐘)
本設(shè)計(jì)采用5 V~42 V寬壓電源輸入,根據(jù)各個(gè)器件工作時(shí)所需電流的大小,采用12 V/5 A適配器作為輸入電源,整體電源分配如圖5所示。
?
整個(gè)系統(tǒng)的時(shí)鐘源有2個(gè),均為16.368 MHz的有源晶振,分別位于基帶底板(主時(shí)鐘)、射頻板(備用時(shí)鐘)。正常情況下使用主時(shí)鐘,在特殊應(yīng)用下使用備用時(shí)鐘。除16.368 MHz時(shí)鐘外,ARM具有自身的無(wú)源晶振作為自己的時(shí)鐘源。模塊通信時(shí)均采用異步通信方式,以避免鐘差產(chǎn)生的錯(cuò)誤。圖6所示為系統(tǒng)的時(shí)鐘設(shè)計(jì)方案。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 FPGA程序設(shè)計(jì)
本系統(tǒng)在采集數(shù)據(jù)時(shí),F(xiàn)PGA接收來(lái)自下變頻模塊的8位AD數(shù)字信號(hào)(L1+B1),經(jīng)過(guò)處理后通過(guò)SATA接口存入到SSD硬盤(pán)中,完成數(shù)據(jù)的采集與存儲(chǔ)[6];回放時(shí),F(xiàn)PGA從SSD硬盤(pán)中讀取數(shù)據(jù),經(jīng)過(guò)DA數(shù)模轉(zhuǎn)換后,送入上變頻模塊完成信號(hào)的播發(fā)[7]。在衛(wèi)星信號(hào)采集回放時(shí),F(xiàn)PGA要接收來(lái)自上下變頻模塊監(jiān)控接收機(jī)的UART信息,確定采集和播發(fā)的信號(hào)是否正常。
本設(shè)計(jì)采用VHDL語(yǔ)言[8]對(duì)需要實(shí)現(xiàn)的電路進(jìn)行描述,Xilinx的K7系列FPGA內(nèi)部集成的高速收發(fā)器(GTX)數(shù)目高達(dá)16個(gè),單個(gè)GTX的速率能達(dá)到12.5 Gb/s,GTX是實(shí)現(xiàn)SATA協(xié)議的核心器件,用于實(shí)現(xiàn)SATA2.0控制器綽綽有余。本文采用K7實(shí)現(xiàn)了SATA協(xié)議的物理層、鏈路層和傳輸層,主要包括完成鏈路初始化、幀的封裝、幀的發(fā)送/暫停/結(jié)束控制、幀的解析與校驗(yàn)。SATA協(xié)議的傳輸層由萬(wàn)兆位級(jí)收發(fā)器GTX、OBB控制模塊和接口傳輸率選擇模塊共同實(shí)現(xiàn)。GTX的主要功能包括16B/20B編碼/解碼、串并/并串轉(zhuǎn)換、逗點(diǎn)檢測(cè)、時(shí)鐘修正、預(yù)測(cè)重和線性均衡等。OBB控制模塊用于硬盤(pán)的上電過(guò)程或者硬件的復(fù)位過(guò)程,同時(shí)與SATA控制器建立通信鏈路。
3.2 ARM程序設(shè)計(jì)
ARM模塊作為本系統(tǒng)的核心控制模塊,負(fù)責(zé)各個(gè)任務(wù)的調(diào)度,加之需要友好的用戶交互界面,因此采用嵌入式Linux作為ARM模塊的操作系統(tǒng)。根據(jù)ARM任務(wù)可以大致分為:用戶交互操作、模塊指令配置、數(shù)據(jù)文件管理、模塊狀態(tài)監(jiān)控。
首先需要在Linux內(nèi)核中實(shí)現(xiàn)相應(yīng)接口的驅(qū)動(dòng)程序,除SMC總線驅(qū)動(dòng)外,Atmel官方提供的linux3.6.9版本的內(nèi)核中已經(jīng)提供了其他接口的驅(qū)動(dòng)程序[9],只需在設(shè)備樹(shù)文件中引出相應(yīng)的設(shè)備節(jié)點(diǎn)即可。Atmel官方同時(shí)提供了SPI、I2C、GPIO接口的測(cè)試程序,可以直接移植相應(yīng)的程序到Qt4中用于實(shí)現(xiàn)相應(yīng)的功能。這里需要特別強(qiáng)調(diào)的是UART接口,在Qt4中沒(méi)有特定的用于串口通信的類,本系統(tǒng)參考第三方的qextserialport類,自定義一個(gè)PortSettings類型的結(jié)構(gòu)體,用于存儲(chǔ)串口參數(shù)。由于Linux系統(tǒng)不支持串口中斷方式,所以這里需要新建一個(gè)定時(shí)器QTimer,定時(shí)1 s,并在程序中實(shí)現(xiàn)串口發(fā)送與接收的同步。接下來(lái)調(diào)用open()函數(shù)打開(kāi)串口,并調(diào)用bytesAvailable()函數(shù)判斷串口數(shù)據(jù)是否為零,若串口緩沖中有數(shù)據(jù),則調(diào)用readAll()函數(shù)將緩沖區(qū)中所有數(shù)據(jù)讀取到QByteArray類型變量中[10]。
要實(shí)現(xiàn)實(shí)時(shí)接收機(jī)監(jiān)控,需要解析串口接收到的報(bào)文數(shù)據(jù),并提取載噪比信息,繪制柱狀圖用于實(shí)時(shí)顯示信號(hào)質(zhì)量。本系統(tǒng)針對(duì)Qt4用戶圖形界面,提出了一種全新的報(bào)文解析方式,首先需要將QByteArray型變量轉(zhuǎn)換為QString型,并調(diào)用replace()函數(shù)將報(bào)文中的星號(hào)、回車符全部替換為逗號(hào),并以逗號(hào)為分隔符,調(diào)用split()函數(shù)對(duì)報(bào)文進(jìn)行分割,用查詢的方式查找$GPGSV字段,將衛(wèi)星編號(hào)以及載噪比保存到數(shù)組中。根據(jù)數(shù)組中的數(shù)據(jù),采用第三方的QCustomPlot類繪制載噪比柱狀圖,首先調(diào)用setLabel函數(shù)設(shè)置橫縱坐標(biāo)名稱,并使用QCustomPlot提供的QCPBars來(lái)表示柱狀圖,調(diào)用setData()函數(shù)對(duì)每個(gè)柱子進(jìn)行賦值,然后調(diào)用addPlittable()函數(shù)將柱狀圖添加到Widget上,橫坐標(biāo)賦值需要調(diào)用setTickVector()及setTickVectorLabels()函數(shù),最后調(diào)用replot()重繪柱狀圖,保證柱狀圖實(shí)時(shí)更新。
4 實(shí)驗(yàn)與驗(yàn)證
由于Qt4在界面設(shè)計(jì)中的優(yōu)越性,因此可以隨時(shí)按照自己的需求改變界面樣式[11]。
為了驗(yàn)證ARM端程序是否發(fā)生過(guò)串口阻塞現(xiàn)象及是否滿足實(shí)時(shí)性要求,對(duì)每幀報(bào)文的處理時(shí)間進(jìn)行分析。將程序移植到嵌入式開(kāi)發(fā)平臺(tái)上,使用labsat循環(huán)回放一段衛(wèi)星的中頻信號(hào),該中頻信號(hào)包含GPS與BD2的報(bào)文信息,經(jīng)過(guò)3.5 h的連續(xù)測(cè)試得到一組數(shù)據(jù),將該數(shù)據(jù)用MATLAB分析后,得到圖7所示結(jié)果。
從圖7中可以清楚地看到,報(bào)文解析及繪圖時(shí)間多在250 ms左右,偶爾突發(fā)時(shí)刻會(huì)達(dá)到550 ms的峰值,處理時(shí)間在1 s之內(nèi),完全滿足實(shí)時(shí)性要求。
5 結(jié)束語(yǔ)
本文設(shè)計(jì)的便攜式GNSS導(dǎo)航信號(hào)采集回放系統(tǒng)實(shí)現(xiàn)了對(duì)衛(wèi)星中頻數(shù)據(jù)的保存與回放,其監(jiān)控端采用ARM處理平臺(tái),編寫(xiě)了針對(duì)K7型FPGA的SMC總線驅(qū)動(dòng),并設(shè)計(jì)了相應(yīng)的圖形化操作界面,節(jié)約成本的同時(shí)保持了設(shè)備良好的可操作性,同時(shí)采用SSD作為存儲(chǔ)介質(zhì),保障了設(shè)備長(zhǎng)時(shí)間采集的要求。這里用MATLAB對(duì)中頻信號(hào)的頻譜和功率譜分析后得知,其回放的信號(hào)質(zhì)量滿足導(dǎo)航接收機(jī)測(cè)試的需求,同時(shí)其保存的中頻數(shù)據(jù)為信號(hào)捕獲與跟蹤算法的研究提供了可靠的原始數(shù)據(jù),為研制高性能、低價(jià)位的導(dǎo)航接收機(jī)奠定了基礎(chǔ)。
?
評(píng)論
查看更多