史曉影
(渭南師范學(xué)院 物理與電氣工程學(xué)院,陜西 渭南 714000)
隨著科技的發(fā)展,移動(dòng)技術(shù)的不斷成熟,定位導(dǎo)航開辟了一個(gè)重要的新興市場。GPS(Global Positioning System)以其高精度、全天候、全天時(shí)的特點(diǎn)[1],在定位、導(dǎo)航、測距等領(lǐng)域被廣泛應(yīng)用,具有測量精度高、速度快、用戶數(shù)量不限、抗干擾能力強(qiáng)等優(yōu)點(diǎn)[2]。不僅用于軍事領(lǐng)域,還廣泛用于工農(nóng)業(yè)生產(chǎn)、交通運(yùn)輸、野外探險(xiǎn)等領(lǐng)域。本系統(tǒng)實(shí)現(xiàn)的數(shù)據(jù)采集精確度較高:采集到的位置可以控制在2 m范圍之內(nèi),接收數(shù)據(jù)并處理的時(shí)間小于2 s,在精確度和實(shí)時(shí)性上要優(yōu)于其他數(shù)據(jù)采 集系統(tǒng)[3-10]。
1 GPS數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
硬件系統(tǒng)中主要由主控制器、液晶顯示模塊和GPS射頻前端,數(shù)據(jù)傳輸單元組成,如圖1所示。

圖1 系統(tǒng)框圖Fig.1 System block diagram
GPS信號(hào)通過天線接收值射頻前端模塊,在射頻芯片中實(shí)現(xiàn)A/D轉(zhuǎn)換,將模擬中頻信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)通過串口傳入單片機(jī),單片機(jī)接收的數(shù)據(jù)信息經(jīng)過時(shí)差,坐標(biāo)處理等操作,在通過LCD顯示出來。
2 GPS數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)
2.1 GPS語句的輸出格式
GPS-OEM板采用NMEA-0183通信格式,可以輸出多種句型,均以“$”開頭。其語句格式如表1所示。

表1 NMEA-0183語句格式Tab.1 NMEA-0183 statement format
輸出的語句按串口通信協(xié)議:1位開始位,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)。輸出數(shù)據(jù)采用的是ASCⅡ碼字符,內(nèi)容包含了緯度、經(jīng)度、速度、日期、航向及衛(wèi)星狀況等信息。語句達(dá)十余種,其中定位語句$GPRMC其結(jié)構(gòu)為:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh<CR><LF>
其中:
“GP”—交談識(shí)別符;
“RMC”—語句識(shí)別符;
“*”—校驗(yàn)和識(shí)別符;
“hh”—為校驗(yàn)和,其代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個(gè)字符)。
$GPRMC語句數(shù)據(jù)區(qū)的內(nèi)容為:
1)定位點(diǎn)的協(xié)調(diào)世界時(shí)間(UTC),hhmmss(時(shí)分秒)格式;
2)定位狀態(tài),A=有效定位,V=無效定位;
3)定位點(diǎn)緯度,ddmm.mmmmm(度分)格式;
4)緯度半球,N(北半球)或 S(南半球);
5)定位點(diǎn)經(jīng)度,dddmm.mmmmm(度分)格式;
6)經(jīng)度半球,E(東經(jīng))或 W(西經(jīng));
7)地面速度,000.0節(jié)~999.9節(jié);
8)地面航向,000.0度~359.9度;
9)UTC 日期,ddmmyy(日月年)格式;
10)磁偏角,000.0度~180度;
11)磁偏角方向,E(東)或 W(西)。
2.2 GPS數(shù)據(jù)接收
利用單片機(jī)的串行接口接收GPS傳送過來的數(shù)據(jù),其硬件原理如圖2所示,GPS的接口及單片機(jī)串口均采用TTL電平傳輸數(shù)據(jù),所以GPS接口引腳4和3可直接與單片機(jī)的TXD和RXD引腳相連,無需電平轉(zhuǎn)換,硬件電路圖如圖2所示。

圖2 GPS數(shù)據(jù)接收Fig.2 GPSdata reception
GPS模塊輸出的是數(shù)據(jù)流,每秒鐘更新一次數(shù)據(jù)。必須要用單片機(jī)對(duì)其輸出的數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行提取,以方便用戶直接讀取。首先打開串口中斷服務(wù)子程序,開始接收數(shù)據(jù),判斷其是否有“$”符號(hào),然后根據(jù)逗號(hào)的個(gè)數(shù)進(jìn)行判斷數(shù)據(jù)的類型,然后分別存儲(chǔ)時(shí)間、經(jīng)度、緯度、日期等信號(hào),若接收到“﹨n”則接收結(jié)束。
用C語言編程,其程序如下:
void chkzhd()interrupt 4//串口接收中斷
{
uchar ch,num;
p37=!p37;
if(TI==1)TI=0;
if(RI==1)
{
ch=SBUF;
if(ch=='$'){gps_flag=1;num=0;}
if(gps_flag==1)
{
gps_rev[num++]=ch;
if((ch=='
')||(num>79))
{gps_rev[num]='