GPS接收機串行通信標准摘要
參考NMEA-0183
美國國家海洋電子協會(NMEA—The NationalMarine Electronics Association) 為了在不同的GPS導航設備中建立統一的RTCM(海事無線電技術委員會)標准,先后制定了NMEA-0180、0182和0183三個標准。0183可以認為是前兩種的升級,也是目前使用最為廣泛的一種。目前廣泛采用的是Ver 2.00版本。現在除少數GPS接收機外,幾乎所有的GPS接收機均采用了這一格式。
接口電平
符合NMEAO183標准的GPS接收機的硬件接口能夠兼容計算機的RS-232C協議串口,然而,嚴格來說NMEA標准不是RS-232C,規范推薦依照EIA422(也稱為RS-422)。
EIA-422是利用導線之間的信號電壓差來傳輸信號的,其每個通道要用兩條信號線,一條是邏輯“1”,~條是邏輯“0”,通過傳輸線驅動器和傳輸線接收器實現邏輯電平和電位差之間的轉換,一般允許驅動器輸出為±2V~ ±6V 。
標准RS-232C采用負邏輯,即邏輯“1”表示-5V~ -15v,邏輯“0”表示+5V~+15V,利用傳輸信號線和信號地之間的電壓差進行傳輸。
雖然存在區別,但在實際使用中,如果只是接收GPS的輸出,則只需GPS數據輸出線和信號地線同計算機的Rs232C輸入線相連(這個方法我並沒有試驗過,是從別的地方聽來的,有興趣有條件的兄弟可以動手實驗一下,不過后果自負哦!呵呵)。
NMEA通訊協議所定義的標准通訊接口參數為:
波特率:4800bit/s;
數據位:8位;
停止位:1位;
奇偶校驗:無;
輸出語句格式
NMEA通訊協議所規定的通訊語句都已是以ASCII碼為基礎的,NMEA-0183協議語句的數據格式如下:“$”為語句起始標志;“,”為域分隔符;“ *”為校驗和識別符,其后面的兩位數為校驗和,代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個字符);回車換行為終止符,所有的語句必須以此來結束,也就是ASCII 字符的0x0D和0x0A。
接收機可能發送很多類型的語句,而我們需要的可能只是某些語句中的幾個字段。因此就需要對接收到的數據進行解析,取得所需的信息。另外,可能會由於小數點位數不同等原因,語句的長度是可變的,因而分離感興趣的信息時,不能按照該信息在語句中所處的字符位置來查找,只能依據逗號分隔符,這一點在數據提取的過程中非常重要。
GPS 接收OEM 板的型號甚多、性能各異,但它們的GPS定位信息串行輸出格式大多采用美國國家海洋電子協會制定的NMEA-0183 通信標准格式。其輸出數據采用的是ASCII碼,內容包含了緯度、經度、高度、速度、日期、時間、航向以及衛星狀況等信息,常用語句有6 種,包括GGA、GLL、GSA、GSV、RMC 和 VTG。我們也可以通過GPS 專用設置軟件或普通的串口調試軟件發送相應的命令語句給OEM 板,把GPS OEM 板設置為每隔若干毫秒發送哪種或哪幾種NMEA 語句,然后該OEM 板將這些設置參數存儲到板上的EEPROM 芯片內,此后該OEM 板將按照這些設置每隔相應的毫秒數發送出一個或幾個GPS 輸出NMEA 語句。根據不同的應用需要,設置選擇不同的輸出記錄語句以及它們的發送時間間隔,如本系統我們只關心其時間、經緯度、海拔高度、地面速度信息以及衛星使用數信息,因而可只選用GGA,VTG記錄語句並設成每1s發送一次。不過須注意,這些設置信息只在系統本次上電,並設置后方有效,在下次重新上電時需重新設置。
• $GPAAM - Waypoint Arrival Alarm
• $GPBOD - Bearing, Origin to Destination
• $GPBWW - Bearing, Waypoint to Waypoint
• $GPGGA - Global Positioning System Fix Data
• $GPGLL - Geographic Position, Latitude/Longitude
• $GPGSA - GPS DOP and Active Satellites
• $GPGST - GPS Pseudorange Noise Statistics
• $GPGSV - GPS Satellites in View
• $GPHDG - Heading, Deviation & Variation
• $GPHDT - Heading, True
• $GPRMB - Recommended Minimum Navigation Information
• $GPRMC - Recommended Minimum Specific GPS/TRANSIT Data
• $GPRTE - Routes
• $GPVTG - Track Made Good and Ground Speed
• $GPWCV - Waypoint Closure Velocity
• $GPWNC - Distance, Waypoint to Waypoint
• $GPWPL - Waypoint Location
• $GPXTE - Cross-Track Error, Measured
• $GPXTR - Cross-Track Error, Dead Reckoning
• $GPZDA - UTC Date/Time and Local Time Zone Offset
• $GPZFO - UTC and Time from Origin Waypoint
• $GPZTG - UTC and Time to Destination Waypoint
$GPGGA
固定數據輸出語句
這是一幀GPS定位的主要數據,也是使用最廣的數據。
$GPGGA 語句包括17個字段:語句標識頭,世界時間,緯度,緯度半球,經度,經度半球,定位質量指示,使用衛星數量,水平精確度,海拔高度,高度單位,大地水准面高度,高度單位,差分GPS數據期限,差分參考基站標號,校驗和結束標記(用回車符<CR>和換行符<LF>),分別用14個逗號進行分隔。該數據幀的結構及各字段釋義如下:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>
$GPGGA:起始引導符及語句格式說明(本句為GPS定位數據);
<1> UTC時間,格式為hhmmss.sss;
<2> 緯度,格式為ddmm.mmmm(第一位是零也將傳送);
<3> 緯度半球,N或S(北緯或南緯)
<4> 經度,格式為dddmm.mmmm(第一位零也將傳送);
<5> 經度半球,E或W(東經或西經)
<6> 定位質量指示,0=定位無效,1=定位有效;
<7> 使用衛星數量,從00到12(第一個零也將傳送)
<8> 水平精確度,0.5到99.9
<9> 天線離海平面的高度,-9999.9到9999.9米
M 指單位米
<10> 大地水准面高度,-9999.9到9999.9米
M 指單位米
<11> 差分GPS數據期限(RTCM SC-104),最后設立RTCM傳送的秒數量
<12> 差分參考基站標號,從0000到1023(首位0也將傳送)。
* 語句結束標志符
xx 從$開始到*之間的所有ASCII碼的異或校驗和
<CR> 回車
<LF> 換行
例子
$GPGGA,050901,3931.4449,N,11643.5123,E,1,07,1.4,76.2,M,-7.0,M,,*65
其標准格式為:$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
各部分所對應的含義為:
(1)定位UTC時間:05時09分01秒
(2)緯度(格式ddmm.mmmm:即dd度,mm.mmmm分);
(3)N/S(北緯或南緯):北緯39度31.4449分;
(4)經度(格式dddmm.mmmm:即ddd度,mm.mmmm分);
(5)E/W(東經或西經):東經116度43.5123分;
(6)質量因子(0=沒有定位,1=實時GPS,2=差分GPS):1=實時GPS;
(7)可使用的衛星數(0~8):可使用的衛星數=07;
(8)水平精度因子(1.0~99.9);水平精度因子=1.4;
(9)天線高程(海平面,-9999.9~99999.9,單位:m);天線高程=76.2m);
(10)大地橢球面相對海平面的高度(-999.9~9999.9,單位:m):-7.0m;
(11)差分GPS數據年齡,實時GPS時無:無;
(12)差分基准站號(0000~1023),實時GPS時無:無;
*總和校驗域;
hh 總和校驗數:65
(CR)(LF)回車,換行。
$GPGSA
當前衛星信息
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>
<1>模式 :M = 手動, A = 自動。
<2>定位型式 1 = 未定位, 2 = 二維定位, 3 = 三維定位。
<3>PRN 數字:01 至 32 表天空使用中的衛星編號,最多可接收12顆衛星信息。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
<7> Checksum.(檢查位).
$GPRMC
推薦定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC時間,hhmmss(時分秒)格式
<2> 定位狀態,A=有效定位,V=無效定位
<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<4> 緯度半球N(北半球)或S(南半球)
<5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<6> 經度半球E(東經)或W(西經)
<7> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<8> 地面航向(000.0~359.9度,以真北為參考基准,前面的0也將被傳輸)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
<11> 磁偏角方向,E(東)或W(西)
<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
$GPVTG
地面速度信息
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh
<1> 以真北為參考基准的地面航向(000~359度,前面的0也將被傳輸)
<2> 以磁北為參考基准的地面航向(000~359度,前面的0也將被傳輸)
<3> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<4> 地面速率(0000.0~1851.8公里/小時,前面的0也將被傳輸)
<5> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
GPS 數據格式
$GPGSV
可視衛星狀態
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><CR><LF>
1) 天空中收到訊號的衛星總數。
2) 定位的衛星總數。
3) 天空中的衛星總數,00 至 12。
4) 衛星編號, 01 至 32。
5) 衛星仰角, OO 至 90 度。
6) 衛星方位角, OOO 至 359 度。實際值。
7) 訊號噪聲比(C/No), 00 至 99 dB;無表未接收到訊號。
8) Checksum.(檢查位).
第<4>,<5>,<6>,<7>項個別衛星會重復出現,每行最多有四顆衛星。其余衛星信息會於次一行出現,若未使用,這些字段會空白。
例子
$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*78
各部分含義為:
(1)總的GSV語句電文數;2;
(2)當前GSV語句號:1;
(3)可視衛星總數:08;
(4)衛星號:06;
(5)仰角(00~90度):33度;
(6)方位角(000~359度):240度;
(7)信噪比(00~99dB):45dB(后面依次為第10,16,17號衛星的信息);
*總和校驗域;
hh 總和校驗數:78;
(CR)(LF)回車,換行。
$P
除標准語句外,NMEAO183規范還允許個別廠商定義私有的語句格式,這些語句以“$P”開始,然后是三個字符長度的廠商識別號,跟着是廠商定義的數據,接下來的數據格式與標准格式相同。
如Garmin的PGRME私有格式如下:
$PGRME,8.9,M,6.1,M,10.8,M*11
其中,“P”代表私有格式,“GRM”是Garmin的代碼,“E”表示語句類型。