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