曹新苗,林建輝,張 兵
(西南交通大學(xué)牽引動力國家重點實驗室,四川 成都 610031)
全球定位系統(tǒng)(global positioning system,GPS)是美國研制的無線電導(dǎo)航定位系統(tǒng),能夠迅速、準確、全天候地提供定位信息[1-2]。地球上任何一臺GPS接收機只要能夠接收到4顆以上的衛(wèi)星信號,經(jīng)過計算處理后,就能得到這臺GPS接收機的位置(經(jīng)緯度和高度)、時間以及運動狀態(tài)等信息[3]。
本文以Quartus II軟件作為FPGA的開發(fā)平臺,采用Verilog HDL硬件描述語言,在EP3C10E144C8N芯片上,利用FPGA的可重復(fù)編程特點,實現(xiàn)對GPS數(shù)據(jù)的采集、處理以及顯示控制。
本設(shè)計選用GARMIN公司的GPS15L接收機,有12個通道,能夠快速定位,功耗非常小,數(shù)據(jù)更新率為每秒一次,其優(yōu)良的性能既能滿足陸地導(dǎo)航的靈敏度要求,也能滿足飛行器的動態(tài)要求。該OEM板的工作電壓為3.3~5.4V,具有2個串行口,串口1為異步串行數(shù)據(jù)的輸入和輸出,輸入數(shù)據(jù)為初始位置、時間、秒脈沖狀態(tài)等設(shè)置信息,輸出數(shù)據(jù)為GPS定位信息;串口2接收GPS差分信息,實時修正數(shù)據(jù)。
該GPS接收機輸出的數(shù)據(jù)格式是美國國家海洋電子協(xié)會(National Marine Electronics Association)為海用電子設(shè)備制定的NMEA 0183標準格式,該協(xié)議采用ASCII碼,其串行通信默認參數(shù)為:波特率=9600b/s,數(shù)據(jù)位=8bit,開始位=1bit,停止位=1bit,無奇偶校驗[4]。常用的NMEA 0813輸出語句有十幾種,每種語句是以“S”開頭,以<CR><LF>結(jié)束,也就是ASCII碼字符的“回車”(十六進制的0D)和“換行”(十六進制的0A)。
由于只需要日期、時間和經(jīng)緯度信息就可實現(xiàn)定位,因此選用最小定位信息GPRMC語句。為了數(shù)據(jù)處理時更簡單,將OEM板初始化,只輸出GPRMC一種語句,并設(shè)置波特率為19200b/s。其中GPRMC語句格式為:SGPRMC,hhmmss,A/V,ddmm.mmmm,N/S,dddmm.mmmm,E/W,xxx.x,xxx.x,ddmmyy,xxxx,E/W,*hh。例如:SGPRMC,040503,A,3026.6057,N,10412.6057,E,,,011211,,W*67。
從這個例子可以得到UTC日期是11年12月1號,時間為 4∶05∶03,轉(zhuǎn)化為北京時間就為 12∶05∶03,緯度為北緯 30°26.6057′,經(jīng)度為東經(jīng) 104°12.6057′。
整個系統(tǒng)主要是由3個部分組成:(1)OEM板;(2)FPGA;(3)液晶顯示模塊。
GPS OEM板輸出電平為RS-232,而FPGA是TTL電平,因此需要電平轉(zhuǎn)化,這里采用電平轉(zhuǎn)換芯片為MAX232,此芯片是MAXIM公司生產(chǎn)的,包含兩路接收器和驅(qū)動器的電平轉(zhuǎn)換芯片,適用于各種RS-232通信接口,+5V電源供電,其內(nèi)部有電壓倍增電路和轉(zhuǎn)換電路[5],與FPGA連接十分方便。顯示定位數(shù)據(jù)是采用ST7920控制器液晶模塊,此模塊可以直接和FPGA連接,并且具有專門的指令,可以靈活的運用。GPS15L OEM板和液晶模塊與FPGA連接的原理圖如圖1所示。
圖1 OEM板和液晶模塊與FPGA連接電路原理圖
本設(shè)計選用可編程邏輯器件FPGA,采用硬件描述語言Verilog HDL按照自頂向下的設(shè)計方法設(shè)計GPS數(shù)據(jù)的采集和顯示系統(tǒng)[6]。該軟件系統(tǒng)主要包括時鐘分頻模塊fdiv、串口模塊rx和信息處理以及液晶顯示模塊hand_lcd,系統(tǒng)頂層文件方框圖如圖2所示。
圖2 系統(tǒng)頂層文件方框圖
2.2.1 fdiv分頻模塊
分頻模塊主要產(chǎn)生采集和顯示GPS定位數(shù)據(jù)需要的時鐘信號頻率。FPGA的時鐘頻率為50MHz,而OEM板串口波特率為19200 b/s,為提高系統(tǒng)的容錯性處理,要求分頻器的輸出時鐘為實際串口數(shù)據(jù)波特率的 N 倍,N 的取值為 8,16,32,64 等[7]。本設(shè)計中N的取值為16,所以分頻器的輸出信號頻率為19200×16=307200Hz,這樣就需要對FPGA系統(tǒng)時鐘進行162分頻;液晶顯示的時鐘頻率為2000Hz,同樣需要分頻,采用的分頻方法是先將系統(tǒng)時鐘分頻為1MHz,再對1MHz進行500分頻就可得到液晶顯示的時鐘頻率。
2.2.2 rx串口模塊
串口模塊主要作用是采集GPS數(shù)據(jù),并將采集到的串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù)輸出給數(shù)據(jù)處理模塊,此程序采用狀態(tài)機來實現(xiàn),分別為s_idle,s_sample和s_stop 3種狀態(tài)。
s_idle:此狀態(tài)用于檢測GPS接收機發(fā)送數(shù)據(jù)的起始信號。FPGA系統(tǒng)復(fù)位后,接收模塊rx就處于空閑狀態(tài),在RS232串行通信中,在不發(fā)送數(shù)據(jù)時,串行總線保持邏輯“1”狀態(tài),當需要發(fā)送數(shù)據(jù)時,會首先發(fā)送一個起始位,其邏輯值為“0”,表示開始發(fā)送數(shù)據(jù);因此,F(xiàn)PGA系統(tǒng)要不斷檢測發(fā)送過來的數(shù)據(jù)位是否從1跳變?yōu)?,如果發(fā)生跳變,狀態(tài)機就進入到s_sample,采集GPS接收機發(fā)送的數(shù)據(jù)。
s_sample:這是數(shù)據(jù)采樣狀態(tài),在這個狀態(tài)中,接收模塊rx連續(xù)采樣GPS接收機發(fā)送過來的數(shù)據(jù),并對每16個采樣數(shù)據(jù)進行最大似然判斷,得到相應(yīng)的邏輯值。做這種判斷的目的是得到有效的數(shù)據(jù)位,需要重復(fù)8次,才能接收完一個8位數(shù)據(jù)。接收時,先將接收到的每個數(shù)據(jù)位保存在一個8位寄存器中,接收完一個數(shù)據(jù)后,通過串并轉(zhuǎn)換,將接收到的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸出。接收完8個數(shù)據(jù)比特后,就轉(zhuǎn)為s_stop狀態(tài)。s_sample狀態(tài)程序的具體流程圖如圖3所示。
s_stop:這個狀態(tài)是檢測停止位,程序比較簡單,只需要計數(shù),計數(shù)值為15時就轉(zhuǎn)為s_idle狀態(tài),繼續(xù)接收下一幀數(shù)據(jù)。
2.2.3 hand_lcd信息處理與顯示模塊
數(shù)據(jù)處理與顯示模塊主要是處理采集到的GPS數(shù)據(jù),分離出需要的日期、時間、經(jīng)度和緯度數(shù)據(jù)并保存,供液晶顯示模塊調(diào)用。處理定位信息時,由于GPS接收機輸出的語句只有GPRMC一種,所以只需要對接收到的數(shù)據(jù)判斷開頭是不是“S”,再通過判斷逗號數(shù)量的方法,就可以將需要的定位數(shù)據(jù)分離出來,接收到“*”后,停止接收。程序流程圖如圖4所示。
圖3 s_sample流程圖
圖4 處理GPS定位信息流程圖
利用逗號數(shù)量分離定位數(shù)據(jù)的程序為:
數(shù)據(jù)顯示部分程序利用狀態(tài)機來實現(xiàn),同樣采用編程語言來實現(xiàn)此狀態(tài)機,最后在Quartus II中得到狀態(tài)轉(zhuǎn)移圖[8],此液晶顯示模塊程序的狀態(tài)圖如圖5所示。
使用液晶模塊顯示數(shù)據(jù),首先需要對其進行初始化,設(shè)置顯示方式以及清屏等操作,流程圖如圖6所示。
圖5 液晶顯示模塊程序狀態(tài)轉(zhuǎn)移圖
圖6 液晶顯示模塊初始化流程圖
圖7 GPS定位信息顯示
液晶模塊初始化完成之后,需要判斷GPS數(shù)據(jù)處理是否完成,如果完成就分別顯示各定位數(shù)據(jù)。顯示日期和時間之前,需要對日期和時間進行轉(zhuǎn)換,GPS接收機發(fā)送的是世界時間,轉(zhuǎn)換為北京時間需要加上8h,如果超過24h,則已是第二天,需要對接收到的日期加1,同時對時間減去24h,就會得到準確的北京時間[9]。依次顯示完各定位數(shù)據(jù)后,返回一個完成標志給數(shù)據(jù)處理程序,使其繼續(xù)處理接收到的GPS數(shù)據(jù)。
本系統(tǒng)經(jīng)過多次修改與調(diào)試,最終能夠正確顯示GPS定位信息,可以實現(xiàn)基本定位功能。圖7顯示了日期時間以及當?shù)氐奈恢眯畔ⅲ?1年12月6號,23∶8∶23,北緯 30°42.2856′,東經(jīng) 104°2.4673′。
本文給出了硬件電路原理圖,論述GPS定位數(shù)據(jù)采集、處理以及顯示的方法,在Quartus II開發(fā)平臺下進行編譯、仿真和下載,成功實現(xiàn)GPS定位信息顯示。該系統(tǒng)與無線傳輸模塊、電子地圖等連接后,可以實現(xiàn)列車定位功能。也可以通過無線傳輸模塊,將FPGA采集和處理后的時間、經(jīng)緯度以及列車速度信息實時傳輸?shù)诫娔X上,應(yīng)用到高速列車檢測中。
[1]劉美生.全球定位系統(tǒng)及其應(yīng)用綜述(二):GPS[J].中國測試技術(shù),2006,32(6):5-11.
[2]許化龍,胡來紅,曲從善,等.基于ARM的嵌入式GPS接收機設(shè)計與實現(xiàn)[J].戰(zhàn)術(shù)導(dǎo)彈控制技術(shù),2006(2):50-53.
[3]徐鑫.基于GPS的車輛定位監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2005.
[4]李明光,陳國通,王莉靜.C8051Fxxx單片機與GPS-OEM板數(shù)據(jù)通信的實現(xiàn)[J].河北工業(yè)科技,2009(4):243-245.
[5]劉曉,伍小東,姚軍光,等.基于單片機采集GPS數(shù)據(jù)系統(tǒng)的設(shè)計[J].青島科技大學(xué)學(xué)報,2005(2):172-175.
[6]陳忠平,高金定,高見芳.基于Quartus II的FPGA/CPLD設(shè)計與實踐[M].北京:電子工業(yè)出版社,2010:75-127.
[7]云創(chuàng)工作室.Verilog HDL程序設(shè)計與實踐[M].北京:人民郵電出版社,2009:43-197.
[8]EDA先鋒工作室,吳繼華,蔡海寧,等.Altera FPGA/CPLD設(shè)計(基礎(chǔ)篇)[M].2版.北京:人民郵電出版社,2011:65-216.
[9]趙志禮,孟慶輝,張松濤,等.基于單片機的GPS定位信息處理[J].電子測試,2009(10):45-48.