李 宏,薛紅喜
(成都電子科技大學(xué) 電子工程學(xué)院,四川 成都 611731)
全球定位系統(tǒng) (Global Positioning System簡稱GPS)是美國第二代衛(wèi)星導(dǎo)航系統(tǒng),能提供全天候、連續(xù)、實(shí)時(shí)高精度導(dǎo)航參數(shù),可實(shí)現(xiàn)三維定位,并可提供精確的時(shí)間信息,具有抗干擾能力強(qiáng)等特點(diǎn)。近年來,GPS在國內(nèi)外得到廣泛的應(yīng)用,并在各個(gè)領(lǐng)域發(fā)揮了極大的作用,已成為導(dǎo)航、定位不可缺少的一部分。電子羅盤作為一種重要的航向傳感器,正越來越多地應(yīng)用于導(dǎo)航和定位系統(tǒng)中。其通過對(duì)地球磁場等信息的讀取、計(jì)算,精確輸出航向、俯仰、翻轉(zhuǎn)等參數(shù)。
GPS模塊是GARMIN公司的GPS-OEM產(chǎn)品,其可同時(shí)跟蹤多達(dá)12顆GPS衛(wèi)星,實(shí)現(xiàn)快速定位。電子羅盤模塊是PNI公司的TCM3產(chǎn)品,其可用于測量航向、傾斜角和磁場強(qiáng)度,能夠提供航向、橫滾和俯仰值3個(gè)方向的定位數(shù)據(jù)。它們都采用RS232通信接口,可方便地集成到系統(tǒng)中。GPS模塊采用NMEA-0183通信標(biāo)準(zhǔn)格式,輸出數(shù)據(jù)采用ASCII碼表示;其輸出的完整定位數(shù)據(jù)多達(dá)60多個(gè)字節(jié),也就是需要60多次的串口操作;電子羅盤模塊控制也需要十幾次的讀寫串口操作。而且,RS232接口的傳輸速率與DSP運(yùn)行速度相比很低;因此,采用DSP直接控制GPS和電子羅盤模塊,占用的DSP運(yùn)行時(shí)間是相當(dāng)可觀的。
FPGA控制GPS模塊和電子羅盤模塊的流程并不復(fù)雜。GPS模塊不需要任何設(shè)置,電子羅盤模塊則只需要進(jìn)行簡單設(shè)置,所以采用FPGA作為GPS模塊和電子羅盤模塊驅(qū)動(dòng)接口是完全可行的。此外,利用FPGA還可以將數(shù)據(jù)格式進(jìn)行處理,縮短數(shù)據(jù)的位長,采用更高速的接口(SPI或者EMIF)與DSP通信。
本系統(tǒng)主要由FPGA,GPS模塊和電子羅盤模塊3部分構(gòu)成,如圖1所示。由于電平的不匹配,F(xiàn)PGA與RS232接口之間需要進(jìn)行電平轉(zhuǎn)換。系統(tǒng)工作的原理是通過FPGA直接接收GPS模塊發(fā)出的數(shù)據(jù),從中提取出時(shí)間、經(jīng)度和緯度信息,并將這些數(shù)據(jù)格式由ASCII碼轉(zhuǎn)換成壓縮BCD碼格式保存。FPGA向電子羅盤模塊發(fā)送相應(yīng)的命令,然后獲取電子羅盤輸出的航向信息并直接保存。這些數(shù)據(jù)都可由DSP通過SPI接口讀取。
圖1 系統(tǒng)整體結(jié)構(gòu)Fig.1 Block diagram of system
SPI接口通信速度能夠比RS232高很多,能夠?qū)崿F(xiàn)板與板之間的短距離通信,因此被選擇作為對(duì)外的通信接口;此外,因?yàn)镕PGA非常靈活,如果FPGA與DSP的EMIF接口直接相連,可以將SPI接口改為EMIF接口,通信的效率會(huì)更高。
FPGA邏輯設(shè)計(jì)按功能可以分為SPI通信模塊,RS232通信模塊,電子羅盤驅(qū)動(dòng)模塊和GPS驅(qū)動(dòng)模塊4個(gè)部分。這種模塊化的設(shè)計(jì)思想在FPGA設(shè)計(jì)中很重要,這有助于設(shè)計(jì)者對(duì)設(shè)計(jì)的管理和修改。例如,要將SPI接口換成EMIF接口時(shí),并不需要將設(shè)計(jì)進(jìn)行重新設(shè)計(jì),而只需要用EMIF接口模塊的代碼替換SPI接口模塊的代碼即可。本設(shè)計(jì)使用的FPGA是Altera的Cyclone III系列中的EP10F256I7N,系統(tǒng)時(shí)鐘33.3 MHz,SPI接口通信速率約為1 MHz,RS232通信波特率為9 600 bps,硬件設(shè)計(jì)語言采用VHDL。
SPI總線接口是一種同步串行總線通訊接口,有主從之分,分為讀寫兩種通信狀態(tài)。這里被設(shè)計(jì)為從模式。
SPI接口的設(shè)計(jì)需要注意SPI接口通信時(shí)鐘信號(hào)(SCLK)的處理。因?yàn)镾CLK不可能像專用的時(shí)鐘輸入信號(hào)一樣距離FPGA器件盡量地靠近;往往為了滿足設(shè)計(jì)的要求,布線長度可能達(dá)到幾十厘米,不可能不引入干擾;如果直接用做SPI通信的時(shí)鐘信號(hào),通信肯定會(huì)存在風(fēng)險(xiǎn)。如圖2所示,SCLK變化的過渡期內(nèi),信號(hào)的狀態(tài)不能很快穩(wěn)定,可能一次上升沿被誤認(rèn)為2次上升沿而出現(xiàn)錯(cuò)誤動(dòng)作(如果SPI的上升沿有意義的話);此外當(dāng)SCLK受到干擾后,也可能出現(xiàn)錯(cuò)誤的邏輯動(dòng)作。所以在要求較高的情況下,SCLK一般不能直接作為SPI通信的時(shí)鐘信號(hào)。
圖2 SPI接口的時(shí)鐘信號(hào)的波形Fig.2 The clock signal waveform of the SPI interface
為了減少SCLK引起通信錯(cuò)誤,可以使用系統(tǒng)時(shí)鐘先對(duì)SCLK信號(hào)進(jìn)行同步的方法。通過連續(xù)多個(gè)狀態(tài)來判斷SCLK的情況。如果連續(xù)幾個(gè)時(shí)刻SCLK的狀態(tài)都是高電平,而以前幾個(gè)連續(xù)時(shí)刻是低電平,那么可以判斷為是SCLK的上升沿,如果再出現(xiàn)連續(xù)幾個(gè)時(shí)刻都是低電平,則判定為是SCLK下降沿。依次這樣來跟蹤SCLK的變化情況,如圖3所示。可見,F(xiàn)PGA內(nèi)部實(shí)際的邏輯動(dòng)作時(shí)刻會(huì)比SCLK的有效邊沿晚一個(gè)系統(tǒng)時(shí)鐘周期,但是如果系統(tǒng)的時(shí)鐘比SCLK的頻率高幾十倍時(shí),這根本不會(huì)影響SPI的正常通信。
RS232是一種異步串行通信物理接口標(biāo)準(zhǔn),可用于速率小于20 kb/s,20 m距離內(nèi)的通信。根據(jù)不同的應(yīng)用需求,RS232接口通信有多種接線方式,其中最簡單的接線方式是采用接收(RX),發(fā)送(TX)和地(GND)的3線制。本設(shè)計(jì)也采用這種接線方式。
圖3 SCLK在系統(tǒng)時(shí)鐘域中的同步Fig.3 The synchronize of the SCLK signal in the system clock domain
RS232模塊在設(shè)計(jì)時(shí)需要注意不同時(shí)鐘域之間的時(shí)序處理。RS232模塊的運(yùn)行時(shí)鐘等于波特率速率的16倍頻率,而不是采用系統(tǒng)的運(yùn)行時(shí)鐘,所以必須在RS232模塊與其他采用系統(tǒng)時(shí)鐘運(yùn)行的模塊之間建立一個(gè)異步通信接口,才能保證它們之間的正確通信。本設(shè)計(jì)中,采用圖4的結(jié)構(gòu)作為與RS232模塊之間的異步通信接口。在發(fā)送數(shù)據(jù)時(shí),只需向異步FIFO中寫入需要發(fā)送的數(shù)據(jù)。當(dāng)FIFO中有數(shù)據(jù)時(shí),F(xiàn)IFO的空標(biāo)志(圖4中fifo_Empty)變?yōu)闊o效,RS232發(fā)送模塊就會(huì)自動(dòng)從FIFO中讀取數(shù)據(jù),將數(shù)據(jù)串行的發(fā)送出去,直到FIFO重新變?yōu)榭諡橹?。RS232模塊接收到數(shù)據(jù)后,標(biāo)志信號(hào)(圖4中Data_RDY)電平發(fā)出信號(hào),其他模塊就馬上讀取。為了保證接收到一個(gè)數(shù)據(jù)只被讀取一次,采用標(biāo)志信號(hào)的邊沿變化來作為觸發(fā)條件。
圖4 RS232模塊的結(jié)構(gòu)Fig.4 The structure of the RS232 module
FPGA驅(qū)動(dòng)電子羅盤模塊必須發(fā)送兩個(gè)命令:設(shè)置輸出數(shù)據(jù)結(jié)構(gòu)命令 (SETDataComponents)和請(qǐng)求輸出數(shù)據(jù)命令(DataREQ);電子羅盤模塊可以輸出的數(shù)據(jù)種類有:航行角度、溫度、失真、校準(zhǔn)狀態(tài)、垂直俯仰角度以及水平旋轉(zhuǎn)角度,可以根據(jù)需要通過輸出數(shù)據(jù)結(jié)構(gòu)命令來設(shè)置電子羅盤模塊每次輸出的數(shù)據(jù)種類。讀取數(shù)據(jù)之前,必須向電子羅盤模塊發(fā)送請(qǐng)求輸出數(shù)據(jù)命令,電子羅盤模塊才能輸出數(shù)據(jù)[6]。
電子羅盤驅(qū)動(dòng)模塊采用了有限狀態(tài)機(jī)的控制方式,因?yàn)闋顟B(tài)機(jī)能夠?qū)崿F(xiàn)可靠穩(wěn)定的控制流程,而且邏輯資源占用更少。電子羅盤驅(qū)動(dòng)模塊的狀態(tài)機(jī)包含6個(gè)狀態(tài),如圖5所示,每個(gè)狀態(tài)的定義如表1所示。
電子羅盤驅(qū)動(dòng)模塊狀態(tài)機(jī)VHDL代碼(部分)
圖5 狀態(tài)流程圖Fig.5 Flow chart of the state
表1 狀態(tài)定義Tab.1 The definition of state
—用于控制讀取數(shù)據(jù)的頻率(2次/秒),開機(jī)時(shí)等待電子羅盤內(nèi)部完成初始化。
—設(shè)置電子羅盤輸出數(shù)據(jù)結(jié)構(gòu)?!螂娮恿_盤發(fā)送請(qǐng)求輸出數(shù)據(jù)命令。
—讀取電子羅盤輸出的數(shù)據(jù)。
—如果在規(guī)定時(shí)間內(nèi),沒有返回?cái)?shù)據(jù),返回Idel狀態(tài)重新發(fā)送命令。
—保存數(shù)據(jù),然后返回Idel狀態(tài)。
圖6 RS232模塊發(fā)送數(shù)據(jù)Fig.6 Sending data by RS232 module
圖6通過 Quartus II軟件的SignalTap Logic Analyzer工具進(jìn)行在線仿真所截取的RS232發(fā)送SETDataComponents命令的波形;圖中Data_CNT信號(hào)表示減法計(jì)數(shù)器的計(jì)數(shù)值,指示需要寫入RS232模塊的數(shù)據(jù)字節(jié)數(shù);uart_in信號(hào)指示了輸入到RS232模塊中的數(shù)據(jù),這個(gè)數(shù)據(jù)將通過串行輸出端口發(fā)送出去;sdo表示RS232模塊串行輸出端口。從圖中可以看出,電子羅盤模塊正確地控制了發(fā)送SETDataComponents命令的操作過程,RS232模塊也正確地將數(shù)據(jù)串行發(fā)出了。
GPS驅(qū)動(dòng)模塊在結(jié)構(gòu)上與電子羅盤模塊的驅(qū)動(dòng)是相似的,但是沒有發(fā)送部分(不需要向GPS模塊發(fā)送控制命令)。GPS驅(qū)動(dòng)模塊只需要讀取RS232模塊接收到的數(shù)據(jù),從中篩選出需要的信息(經(jīng)度、緯度以及時(shí)間)。此外,由于GPS輸出數(shù)據(jù)是采用ASCII碼來表示,而數(shù)字(0-9)的ASCII碼值的低4位就等于實(shí)際表示的數(shù)字,因此,將時(shí)間、緯度和經(jīng)度數(shù)據(jù)的每一位數(shù)字直接截取其低4位,轉(zhuǎn)換成壓縮BCD碼,即可減少一倍的數(shù)據(jù)位數(shù),在FPGA中也能很方便地實(shí)現(xiàn)。
圖7是通過Quartus II軟件的SignalTap Logic Analyzer工具進(jìn)行在線仿真的結(jié)果。圖中第一行是電子羅盤輸出的航向數(shù)據(jù),第二行是緯度信息,第三行是經(jīng)度信息,第四行是時(shí)間和日期。GPS模塊的信息與本地的實(shí)際地理位置信息和時(shí)間幾乎完全相符。在線仿真的結(jié)果證明FPGA能夠正確實(shí)現(xiàn)對(duì)GPS模塊和電子羅盤模塊的控制。
圖7 在線仿真結(jié)果(十六進(jìn)制)Fig.7 The result of online simulation(in hexadecimal)
本文介紹了如何通過FPGA控制GPS模塊和電子羅盤模塊,采用用一個(gè)高速的SPI接口與DSP進(jìn)行通信的方法,并在實(shí)際的硬件平臺(tái)上成功地予以實(shí)現(xiàn)。與DSP直接對(duì)GPS模塊和電子羅盤模塊進(jìn)行控制的方式相比,本方法在硬件方面,可以少使用至少一個(gè)DSP的McBSP接口,降低了對(duì)DSP器件外設(shè)接口的要求。在軟件方面,DSP讀取的GPS信息的數(shù)據(jù)長度減少到27個(gè)字節(jié)(直接控制時(shí)大于60個(gè)字節(jié));對(duì)電子羅盤的控制只有讀操作,不再需要寫操作,因此,DSP運(yùn)行過程中串口操作占用的時(shí)間明顯減少,程序控制流程更加簡單,系統(tǒng)的性能也得到提高。
[1]陳石磊,劉貴喜,向國華.FPGA與GPS-OEM板的串行通訊系統(tǒng)設(shè)計(jì)[J].新特器件應(yīng)用, 2008, 10(5):11-13.CHEN Shi-lei, LIU Gui-xi, XIANG Guo-hua.The design of the serial communication system between FPGA and GPSOEM [J].Electronic Component&Device Applications,2008,10(5):11-13.
[2]偉利國,張小超,胡小安.TCM3電子羅盤的特性與應(yīng)用[J].傳感器與微系統(tǒng),2009, 28(7):15-17.WEI Li-guo,ZHANG Xiao-chao,HU Xiao-an.Characteristic ofelectronic compass TCM3 and its application[J].Transducer and Microsystem Technologies, 2009, 28 (7):15-17.
[3]王松.基于FPGA的串行外圍接口SPI設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息:嵌入式與SOC, 2010, 25(11-2):117-119.WANG Song.Design and implementation of serial peripheral interface based on FPGA [J].Microcomputer information:Embedded System and SOC, 2010,25(11-2):117-119.
[4]王玨文,金偉信,蔡一兵,等.基于FPGA的SPI總線接口的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù).2010, 14(325):102-104.WANG Jue-wen,JIN Wei-xin, CAI Yi-bing, etal.Implementation of SPI bus interface based on FPGA[J].Modern Electronics Technique, 2010,14(325):102-104.
[5]孫豐軍,余春暄.SPI串行總線接口的Verilog實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù), 2005, 16(207):105-106,109.SUN Feng-jun,YU Chun-xuan.Implementation of SPI inerface with Verilog HDL[J].Modern Electronics Technique,2005, 16(207):105-106,109.
[6]田紅霞,戴彥,鹿玉紅.基于FPGA的RS232串行接口設(shè)計(jì)[J].煤炭技術(shù).2010, 29(9):194-196.TIAN Hong-xia, DAI Yan, LU Yu-hong.Design Method of RS232 serial interface based on FPGA[J].Coal Technology.2010, 29(9):194-196.
[7]李金力,劉文怡,彭旭峰.基于FPGA的RS232異步串行口IP核設(shè)計(jì)[J].電子設(shè)計(jì)工程,2009, 17(8):31-35.LI Jin-li, LIU Wen-yi, PENG Xu-feng.Design of RS232 asynchronous serialportIP-core based on FPGA[J].Electronic Design Engineering, 2009,17(8):31-35.