陳育超,黃海生,張 斌
(西安郵電大學 陜 西 西 安 7 10121)
全球定位系統(tǒng)(Global Position System,GPS)能夠提供實時、全天候、全球性和高精度的服務,其廣泛應用于各行各業(yè)中[1-2]。GPS接收機通過天線單元接收衛(wèi)星信號,將信號進行帶通濾波、下變頻混頻、AGC放大、A/D轉換等一系列處理,得到數(shù)字中頻信號,進而對中頻信號進行捕獲、跟蹤,解調出用戶的緯度、經(jīng)度、高度、速度、時間等導航信息[3],將這些信息按NMEA-0183協(xié)議封裝,通過串口輸出數(shù)據(jù)。用戶設備中的GPS接收器在收到GPS信息后,需要對相關信息予以解碼處理[4],從而得到用戶的位置、時間等信息,進而實現(xiàn)用GPS導航和定位的目的。近幾年來,現(xiàn)場可編程門陣列(FPGA)憑借其開發(fā)過程投資少、設計周期短、靈活方便以及可反復編程等特點[5],在現(xiàn)代電子設計中得到了廣泛應用。本設計選擇現(xiàn)場可編程門陣列(FPGA)來實現(xiàn)GPS信號的解析處理。
NMEA-0183是美國國家海洋電子協(xié)會(NMEA,The National Marine Electronics Association)為海用電子設備制定的標準格式,它現(xiàn)在已被廣泛地應用于多個領域的設備之間的數(shù)據(jù)傳輸[6]。NMEA標準格式輸出采用ASCII碼,每個ASCII數(shù)據(jù)碼長8位,串行通信的波特率為9600位/秒,數(shù)據(jù)位8位,開始位1位,停止位1位,無奇偶校驗位。
NMEA-0183協(xié)議由語句組成,每條語句以字符“$”作為語句起始標志,數(shù)據(jù)之間以逗號相隔,字符“*”作為校驗和前綴,最后以校驗和數(shù)值和回車/換行字符結束。最常用的有6種語句格式:$GPGGA,$GPGLL,$GPGSA,$GPGSV,$GPRMC,$GPVTG.下面以推薦定位信息GPRMC語句為例介紹數(shù)據(jù)格式。語句的格式如下:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*<13>
<1>UTC 時間,格式 hhmmss.sss(時分秒);
<2>定位狀態(tài),A=有效定位,V=無效定位;
<3>緯度,ddmm.mmmm(度分)格式(前導位不足則補 0);
<4>緯度半球 N(北半球)或 S(南半球);
<5>經(jīng)度,dddmm.mmmm(度分)格式(前導位不足則補 0);
<6>經(jīng)度半球E(東經(jīng))或 W(西經(jīng));
<7>地面速率(000.0~999.9 節(jié),前導位不足則補 0);
<8>地面航向(000.0~359.9 度,以真北為參考基準,前導位不足則補0);
<9>UTC 日期,ddmmyy(日月年)格式;
<10>磁偏角(000.0~180.0 度,前導位不足則補 0);
<11>磁偏角方向,E(東)或 W(西);
<12>模式指示(僅 NMEA-0183 3.00 版本輸出,A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無效 );
<13>校驗和;
以深圳星際通公司生產(chǎn)的GP5MX1513F1導航芯片為例進行說明。該芯片為一個64并行通道單頻接收機,只接受L1波段的衛(wèi)星信號,定位精度2 m(2D RMS)。該芯片依次輸出6種NMEA信息,分別是:$GPGGA,$GPGLL,$GPGSA,$GPGSV,$GPRMC,$GPVTG,串口默認設置:波特率9 600 bps,起始位1位,數(shù)據(jù)位8位,無奇偶校驗位,停止位1位。NMEA-0183協(xié)議解析系統(tǒng)的總體設計框圖如圖1所示,GP5MX1513F1導航芯片通過天線單元接收衛(wèi)星信號,將信號濾波、下變頻、放大和模數(shù)轉換等一系列處理,得到數(shù)字中頻信號,進而對中頻信號進行捕獲、跟蹤、位同步及幀同步,解調出導航數(shù)據(jù),最后計算出用戶的緯度、經(jīng)度、高度、速度、時間等信息,以NMEA-0183協(xié)議格式打包成數(shù)據(jù)幀,再通過標準的串口輸出數(shù)據(jù)。NMEA-0183協(xié)議解析模塊生成的硬件電路內嵌在FPGA中,一方面通過串口模塊接收GP5MX1513F1芯片發(fā)出的串行數(shù)據(jù),將接收的信號給解析模塊進行處理,另一方面解析模塊根據(jù)NMEA-0183協(xié)議的數(shù)據(jù)格式提取出所需要的信息[7]。

圖1 系統(tǒng)總體框圖Fig.1 Structure diagram of the power control unit test system
串口模塊主要負責接收由GP5MX1513芯片輸出的導航定位信息,串口模塊通過波特率發(fā)生器將系統(tǒng)時鐘進行分頻,產(chǎn)生16倍數(shù)據(jù)波特率的時鐘。系統(tǒng)復位后,接收端以16倍波特率的速率讀取線路狀態(tài),檢測信號GPS_TX出現(xiàn)下降沿,在GPS_TX信號下降沿后第8個采樣點確認是否為低電平,如果檢測得到的是高電平,則認為起始位無效,返回到空閑狀態(tài),重新等待起始信號的到來[8]。起始位找到后,開始接收數(shù)據(jù),當數(shù)據(jù)計數(shù)器data_bit_cnt計到7時,8位數(shù)據(jù)都已經(jīng)輸入完成。最后,檢測停止位,如果正確檢測到高電平,則說明本幀的各位數(shù)據(jù)正確接收,將數(shù)據(jù)存入到8位數(shù)據(jù)寄存器中,否則出錯。
串口模塊接收端的狀態(tài)轉移圖如圖2所示,接收機由4個工作狀態(tài)組成,分別是空閑狀態(tài)、起始位、數(shù)據(jù)位和停止位。當系統(tǒng)復位后,電路處于空閑狀態(tài),等待信號的觸發(fā),連續(xù)8個時鐘檢測出數(shù)據(jù)發(fā)生負跳變,sof信號為高,進入起始狀態(tài),當sample為1時,進入數(shù)據(jù)位,接著的數(shù)據(jù)位將每隔16個采樣周期被采樣一次。即取每一位的第8次的波特率時鐘采樣值來確保采樣正確。連續(xù)采樣8次后,采樣計數(shù)器data_bit_cnt==7,進入停止位,當sample為1時,進入空閑狀態(tài),開始接收下一個數(shù)據(jù)。

圖2 串口模塊接收端狀態(tài)轉移圖Fig.2 State transition diagram of serial port receiver
在狀態(tài)機模型的基礎上,使用verilog HDL語言來描述其功能,其主要代碼如下:case(rcv_state)
idle:begin rcv_ready<=0;
if(sof)rcv_state<=start;
end
start:begin if(sample)
begin
rcv_state<=data;data_bit_cnt<=0;end
end
data:begin if(sample&(data_bit_cnt<7))
begin data_bit_cnt <=data_bit_cnt +1;
rcv_data_reg[data_bit_cnt]<=GPS_TX;
rcv_state<=data;end
else if(sample&(data_bit_cnt==7))
begin
begin
data_bit_cnt<=0;
rcv_data_reg[data_bit_cnt]<=GPS_TX;
rcv_state<=stop;
end
else rcv_state<=data;
end
stop:begin if(sample)
begin rcv_state<=idle;
rcv_ready<=1;
end
end
endcase
串口模塊輸出的8位數(shù)據(jù)送到解析模塊,解析模塊采用6MUX1選擇器來選擇提取哪種語句,通過外部輸入信號對寄存器config_Reg進行配置來實現(xiàn),當config_Reg=000時,提取GGA語句,當config_Reg=001時,提取GLL語句,當config_Reg=010時,提取GSA語句,當config_Reg=010時,提取GSV語句,當config_Reg=011時,提取RMC語句,當config_Reg=100時,提取VTG語句。下面以RMC語句為例,來說明解析過程,解析模塊將串口模塊接收端接收的數(shù)據(jù)進行循環(huán)檢測,判斷報文頭、定位狀態(tài)、校驗位、結束位信息,提取時間信息[9-11]。首先,對config_Reg進行配置,設置config_Reg=011;其次,檢測報文頭$GPRMC,如果是,則進行下一步,否則,繼續(xù)檢測;最后,用逗號計數(shù)器的值來決定提取$GPRMC語句的哪段信息,當逗號計數(shù)器為1時,提取時分秒信息,存儲在data_hh_mm_ss寄存器中;當逗號計數(shù)器為2時,提取定位狀態(tài)信息,當VALID信號為高,則有效定位;當VALID信號為低,則無效定位;當逗號計數(shù)器為3時,提取緯度信息,存儲在lat_data寄存器中;當逗號計數(shù)器為5時,提取經(jīng)度信息,存儲在lon_data寄存器中;當逗號計數(shù)器為9時,提取日月年信息,存儲在data_dd_mm_yy寄存器中。程序設計的流程圖如圖3所示。
其主要代碼如下:

圖3 解析模塊設計流程圖Fig.3 Flow chart the parse module design
case(state)
idle1:begin if(rcv_data=="$")
state<=one;end
one:begin if(rcv_data=="G")
state<=two;
else state<=idle1;
end
two:begin if(rcv_data=="P")
state<=three;
else state<=idle1;
three:begin if(rcv_data=="R")
state<=four;
else state<=idle1;
end
four:begin if(rcv_data=="M")
state<=five;
else state<=idle1;
end
five:begin if(rcv_data=="C")
begin state<=six;
RMC_IND<=1;
end
end
……
根據(jù)編寫的測試模塊在ModelSim 6.2軟件下進行了功能仿真,其仿真結果如圖4所示,GPS_TX為輸入的串行數(shù)據(jù),rcv_data為接收的8位數(shù)據(jù),hh_mm_ss為提取出時分秒信息 :15:49:41,dd_mm_yy 為 提 取 出 日 月 年信 息 :13.06.09,lat_data為提取的緯度信息:3409.3297,lon_data為提取的經(jīng)度信息:10853.6986,從仿真波形上看,仿真的結果與測試激勵中的數(shù)據(jù)一致。

圖4 ModelSim 6.2仿真結果Fig.4 ModelSim 6.2 simulation results
完成了仿真后,在Quartus II 9.0下進行了邏輯綜合,將程序下載到Altera公司生產(chǎn)的Cyclone II系列EP2C5T144C8型號的FPGA中,用Quartus II 9.0軟件自帶的嵌入式邏輯分析儀SignalTapII,對FPGA內部的信號進行觀測,F(xiàn)PGA內部實際工作波形如圖5所示,從硬件調試結果觀測,實際測出的結果:年月日 2013.08.19,時分秒00:07:42,緯度為3412.0714,經(jīng)度為10856.6625。由于所測得時間信息為世界協(xié)調時間,北京時間與世界協(xié)調時相差8個時差,北京時間應修正為:08:40:09,所測得結果與本地的時間一致。

圖5 FPGA內部工作波形Fig.5 FPGA internal work waveform
結果分析:從圖4和圖5波形上可以看到我們測試的結果,實際測試中,我們讓整個解析過程連續(xù)工作12 h,沒有發(fā)現(xiàn)解析錯誤、丟包等不正?,F(xiàn)象。因此,大量測試結果表明,該模塊能夠正確的接收和處理導航信息。
根據(jù)NMEA-0183協(xié)議格式,提出使用FPGA實現(xiàn)NMEA-0183信息解析的一種方法,仿真及實際測試結果表明,該電路能夠正確地提取出所需要的信息,如時間、位置等信息,最終實現(xiàn)了GPS數(shù)據(jù)采集及處理等工作,為搜查救援、事故定位等工作提供了技術依據(jù)。
[1]王惠南.GPS導航原理與應用[M].北京:科學出版社,2009.
[2]Misra P,Enge P.Global positioning system:signals measurements,and performance[M].Ganga Jamna Press,2006,4-11.
[3]謝鋼.GPS原理與接收機設計[M].北京:電子工業(yè)出版社,2009.
[4]于志剛,盧秀山,張麗娜,等.NMEA-0183協(xié)議及基于VB數(shù)據(jù)提取與實現(xiàn)[J],山東科技大學學報,2006,25(4):80-82.YU Zhi-gang,LU Xiu-shan,ZHANG Li-na,et al.NMEA-0183 protocol and data extraction and implementation based on VB [ J].Journal of Shandong University of Science and Technology,2006,25(4):80-82.
[5]夏宇聞.Verilog數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天大學出版社,2008:1-6.
[6]曹婷婷,高玉.GPS中NMEA-0183協(xié)議的應用[J].電子工程師,2006,32(10):8-11.CAO Ting-ting,GAO Yu.GPS application of NMEA-0183 protocol[J].Electronic Engineering,2006,32(10):8-11.
[7]李冰,曾連蓀.GPS定位信息提取及應用[J].電子設計工程,2012,20(12):72-74.LI Bing,ZENG Lian-sun.GPS positioning information and application[J].Electronic Design Engineering,2012,20(12):72-74.
[8]郭曉明,張德.基于FPGA的UART設計與實現(xiàn)[J].電聲技術,2010,34(6):31-34.GUO Xiao-ming,ZHANG De.UART design and implementation based on FPGA[J].Audio Engineering,2010,34(6):31-34.
[9]賀良華,張杰,游釗.基于FPGA的NMEA解碼和校正的算法設計[J].電力自動化設備,2010,30(2):127-130.HE Liang-hua,ZHANG Jie,YOU Zhao.NMEA decoding and correction algorithm design based on FPGA[J].Electric Power Automation Equipment,2010,30(2):127-130.
[10]程光偉,劉大偉.基于FPGA的異步FIFO的研究和設計[J].工業(yè)儀表與自動化裝置,2013(2):67-69,75.CHENG Guang-wei,LIU Da-wei.Research and design of asynchronous FIFO based on FPGA[J].Industrial Instrumentation&Automation,2013(2):67-69,75.
[11]趙新雨,許忠仁,付貴增,等.基于FPGA與單片機的SPI接口的實現(xiàn)[J].工業(yè)儀表與自動化裝置,2010(2):32-33,44.ZHAO Xin-yu,XU Zhong-ren,FU Gui-zeng,et al.The design of SPI interface connection based on FPGA and MCU[J].Industrial Instrumentation&Automation,2010(2):32-33,44.