杜 俊,董 松
(隴東學(xué)院,甘肅 慶陽 745000)
基于單片機(jī)的GPS定位系統(tǒng)的設(shè)計與實(shí)現(xiàn)*
杜俊,董松
(隴東學(xué)院,甘肅慶陽745000)
GPS(Global Positioning System)在船舶、車輛、飛機(jī)等運(yùn)動物體進(jìn)行定位導(dǎo)航、車輛監(jiān)控管理系統(tǒng)、物聯(lián)網(wǎng)系統(tǒng)等都有重要的應(yīng)用,但其高昂的成本讓普通客戶無法接受。本文設(shè)計了基于單片機(jī)的GPS定位系統(tǒng),該系統(tǒng)以51單片機(jī)為主控制器,通過uart接口與GPS信息采集模塊進(jìn)行通信,GPS信息格式采用NMEA-0183協(xié)議格式,單片機(jī)對GPS信息格式進(jìn)行解碼,獲得時間、經(jīng)度、緯度、海拔高度、速度等信息,并根據(jù)需求將所需信息通過顯示器顯示。
NMEA-0183協(xié)議;UART;數(shù)據(jù)解碼
GPS(NavigationSatelliteTimingandRanging/Global Positioning System),中文名為“衛(wèi)星授時測距導(dǎo)航/全球定位系統(tǒng)”。該系統(tǒng)由覆蓋全球的24顆衛(wèi)星組成。它可以保證在任意時刻、任意地方都可以同時觀測到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測點(diǎn)的經(jīng)緯度和高度,以便實(shí)現(xiàn)導(dǎo)航、定位、授時等功能。
本系統(tǒng)主要以u-blox公司的NEO-6M GPS定位芯片和GPS有源天線組成GPS信息接收模塊,利用UART接口將GPS模塊的采集的NMEA-0183格式的信息傳輸給單片機(jī),單片機(jī)對接收到的NMEA-0183格式的信息進(jìn)行解碼和處理,通過液晶屏顯示出來,從而實(shí)現(xiàn)定位、授時、測速的功能,如圖1所示。
圖1 基于單片機(jī)的GPS定位系統(tǒng)結(jié)構(gòu)
2.1GPS接收模塊
本系統(tǒng)中GPS信息接收模塊采用u-blox公司的NEO-6M芯片,該芯片具有高靈敏度、低功耗、小型化、其極高追蹤靈敏度大大擴(kuò)大了其定位的覆蓋面,在普通GPS接收模塊不能定位的地方,如狹窄都市天空下、密集的叢林環(huán)境,NEO-6M都能高精度定位。模塊的高靈敏度、小靜態(tài)漂移、低功耗及輕巧的體積,非常適用于車載、手持設(shè)備如PDA,車輛監(jiān)控、手機(jī)、攝像機(jī)及其他移動定位系統(tǒng)的應(yīng)用,是GPS產(chǎn)品應(yīng)用的最佳選擇。
在開發(fā)GPS定位系統(tǒng)的過程中,并不需要去關(guān)心如何計算坐標(biāo)數(shù)據(jù),這些工作GPS芯片都會自動完成。但是在設(shè)計過程中,應(yīng)重點(diǎn)注意GPS模塊的工作條件、通信接口、數(shù)據(jù)格式、波特率等問題。
NEO-6M GPS信息接收模塊采用USB接口供電,支持3.3V-5V電源,支持UART接口,使用前可使用模塊配置軟件配置UART接口的波特率,使其與單片機(jī)串口的波特率一致。
2.2NMEA-0183協(xié)議
NMEA 0183是美國國家海洋電子協(xié)會(National Marine Electronics Association)為海用電子設(shè)備制定的標(biāo)準(zhǔn)格式。目前業(yè)已成了GPS導(dǎo)航設(shè)備統(tǒng)一的RTCM(Radio Technical Commission for Maritime services)標(biāo)準(zhǔn)協(xié)議。該協(xié)議采用ASCII碼,UART默認(rèn)波特率4800bps,采用10位異步傳輸方式,無奇偶校驗(yàn)。NMEA-0183協(xié)議常用的數(shù)據(jù)格式有6種,見表1。
其中NMEA-0183的GPGGA命令的信息格式及含義如下,其他命令格式可查詢相關(guān)文獻(xiàn)。
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF>
表1 NMEA-0813常用的數(shù)據(jù)格式
該信息格式中的“$”表示命令起始位,GPGGA表示命令類型,其他字段含義如下:
<1>UTC時間,格式為hhmmss.sss。
<2>緯度,格式為ddmm.mmmm(前導(dǎo)位數(shù)不足則補(bǔ)0)。
<3>緯度半球,N或S(北緯或南緯)。
<4>經(jīng)度,格式為dddmm.mmmm(前導(dǎo)位數(shù)不足則補(bǔ)0)。
<5>經(jīng)度半球,E或W(東經(jīng)或西經(jīng))。
<6>定位質(zhì)量指示,0=定位無效,1=定位有效。
<7>使用衛(wèi)星數(shù)量,從00到12(前導(dǎo)位數(shù)不足則補(bǔ)0)。
<8>水平精確度,0.5到99.9。
<9>天線離海平面的高度,-9999.9到9999.9米。
<10>高度單位,M表示單位米。
<11>大地橢球面相對海平面的高度(-999.9到9999.9)。
<12>高度單位,M表示單位米。
<13>差分GPS數(shù)據(jù)期限(RTCM SC-104),最后設(shè)立RTCM傳送的秒數(shù)量。
<14>差分參考基站標(biāo)號,從0000到1023(前導(dǎo)位數(shù)不足則補(bǔ)0)。
<15>“*”表示校驗(yàn)和前綴。
<16>校驗(yàn)和。
<17>CR和LR表示信息結(jié)束符合。
NEO-6M GPS接收模塊可以接收以上6種常用的命令信息,可使用該模塊的配置程序設(shè)置該模塊的接收信息類型,設(shè)置好后,該模塊只接收允許接收的信息類型。本設(shè)計方案中,對允許接收的命令信息類型沒有篩選。
GPS定位系統(tǒng)程序主要完成單片機(jī)串口初始化、LCD液晶屏的初始化,GPS命令信息的接收、解碼、處理任務(wù),最后將處理后的信息顯示在LCD液晶屏上。GPS定位系統(tǒng)程序總體流程如圖2所示。
圖2 系統(tǒng)程序流程圖
在整個系統(tǒng)程序設(shè)計中,解碼是關(guān)鍵。單片機(jī)通過串口接收到來自GPS接收模塊的NMEA-0183格式的命令信息后,將該信息解碼,提取出用戶需要的信息。NMEA-0183解碼算法如下:
s1:初始化:定義逗號字符計數(shù)變量comma_cnt=0,數(shù)據(jù)字符計數(shù)變量char_cnt=0,命令類型數(shù)組cmd[5],模式變量mode(mode=0,結(jié)束,mode=1,接收命令類型,mode=2,接收數(shù)據(jù)),命令類型編號cmd_num,啟動串口接收,進(jìn)入s2。
s2:判斷串口的sbuf接收到的字符:
如果是“$”,設(shè)置mode=1,準(zhǔn)備接收命令類型信息;
若是字符“,”,逗號字符計數(shù)comma_cnt自增1、數(shù)據(jù)字符計數(shù)char_cnt清零;
若是字符“*”,mode=0,進(jìn)入結(jié)束模式;
若是其他,執(zhí)行s3;
s3:若mode=1,則接收命令類型,依次將串口接收到的5個字符數(shù)據(jù)存儲到cmd[5]數(shù)組中。
若 cmd[5]存儲的是 “GPGGA”命令類型,則cmd_num=1,執(zhí)行s4;
若是“GPGSV”命令類型,則cmd_num=2,執(zhí)行s4;
若是“GPRMC”命令類型,則cmd_num=3,設(shè)置mode=2,進(jìn)入接收數(shù)據(jù)模式,執(zhí)行s4。
s4:若 mode=2,進(jìn)入數(shù)據(jù)接收模式。判斷cmd_num的值:
若cmd_num等于1,開始解碼GPGGA命令類型的數(shù)據(jù),判斷逗號計數(shù)comma_cnt的值。根據(jù)2.2節(jié)中的NMEA-0183的GPGGA命令信息格式,數(shù)據(jù)字段之間用逗號分隔,因此根據(jù)逗號計數(shù)可以獲取所需信息。
若comma_cnt的值等于1,表示后面接收的10個字符是UTC時間,然后存儲在時間變量里。
若comma_cnt的值等于2,表示接下來接收的10個字符是緯度信息并存儲,char_cnt清零。
若comma_cnt的值等于3,表示接下來接收的1個字符是緯度方向信息并存儲,char_cnt清零。
若comma_cnt的值等于4,表示接下來接收的11個字符是經(jīng)度信息并存儲,char_cnt清零。
若comma_cnt的值等于5,表示接下來接收的1個字符是經(jīng)度方向信息并存儲,char_cnt清零。
用類似的方法將GPGGA中的所需的其他信息解碼。
若cmd_num等于2,開始解碼GPGSV命令類型數(shù)據(jù),用上述辦法解碼獲得所需信息并存儲。
若cmd_num等于3,開始解碼GPRMC類型數(shù)據(jù),用上述方法解碼獲取所需的其他信息并存儲。
s5:退出。
數(shù)據(jù)解碼完成后,使用LCD屏實(shí)時顯示解碼后需要顯示的數(shù)據(jù)。另外,系統(tǒng)接收到的時間信息是UTC時間,如要輸出北京時間,還需對UTC時間進(jìn)行處理轉(zhuǎn)換成北京時間,在進(jìn)行輸出顯示。
本文提出了對GPS全球定位系統(tǒng)的各命令類型數(shù)據(jù)的解碼方法,設(shè)計并實(shí)現(xiàn)了基于51單片機(jī)的GPS定位系統(tǒng),由單片機(jī)控制GPS接收模塊較為精確地計算和顯示日期、時間、經(jīng)度、緯度等衛(wèi)星信息。
[1] 吳東東.基于單片機(jī)的GPS定位顯示設(shè)計[J].上海師范大學(xué)學(xué)報(自然科學(xué)版),2016,45(1).
[2] 于鐵軍.基于ARM的GPS定位系統(tǒng)設(shè)計與實(shí)現(xiàn)[D].中北大學(xué),2014.
[3]杜天杰.基于GPS的定位系統(tǒng)設(shè)計與實(shí)現(xiàn)[D].西安電子科技大學(xué),2014.
[4]張爍.基于移動GIS定位導(dǎo)航系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)系統(tǒng)應(yīng)用,2010,19(7).
[5]趙志禮.基于單片機(jī)的GPS定位信息處理[J].電子測試,2009.
[6]劉俊成.GPS軟件接收機(jī)關(guān)鍵技術(shù)研究[D].國防科技大學(xué),2006.11.
[7]張鵬超.智能車載信息系統(tǒng)研究[D].西安工業(yè)大學(xué),2004.
[8]袁安存.全球定位系統(tǒng)原理及應(yīng)用[M].大連海事大學(xué)出版社,1999.
TP313
隴東學(xué)院緊缺人才科研啟動資金資助項(xiàng)目(XYBY140207)。