新人一枚,由于某些需要制作這一塊的東西,就把自己的理解寫在這里,歡迎各位大佬交流。
GPS定位的基本工作原理是:導航衛(wèi)星上搭載了專用的無線電設備,可向地面用戶不斷的發(fā)射固定頻段的無線電信號,用戶利用導航接收機收到衛(wèi)星上的導航信號后,通過時間測距或多普勒測速獲得自己相對于衛(wèi)星的距離參數(shù),并根據(jù)衛(wèi)星發(fā)播的軌道、時間參數(shù)等信息求得衛(wèi)星的實時位置,進而解算出自身的地理位置坐標和速度矢量。
衛(wèi)星星文信息的解算我們大可不必深究,市面上有現(xiàn)成的集成模塊可以實現(xiàn)衛(wèi)星信號的解算輸出,并且?guī)缀跛械哪K都遵循或至少兼容統(tǒng)一的串口通信協(xié)議--NMEA 0183。
TB2YBHhn8DH8KJjSspnXXbNAVXa_!!13183565.jpg (190.47 KB, 下載次數(shù): 83)
下載附件
2019-4-23 10:46 上傳
多數(shù)GPS模塊的引腳主要為VCC、GND、TXD、RXD、PPS。其中TXD、RXD為串口通信接口,PPS為秒脈沖輸出接口,用于同步授時。模塊的串口輸出如圖所示(可用一個USB轉(zhuǎn)TTL模塊將GPS模塊和電腦相連,再用串口助手或模塊自帶的配置軟件查看GPS模塊串口的輸出)
IMG_6785.JPG (107.59 KB, 下載次數(shù): 89)
下載附件
2019-4-23 10:56 上傳
由此可見,GPS模塊每秒各輸出一次$GPGGA $GPGSA $GPGSV $GPGLL $GPRMC $GPVTG語句,其中最常用的語句為$GPRMC。它的基本格式如下: $GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF) (1) UTC時間,hhmmss(時分秒) (2) 定位狀態(tài),A=有效定位,V=無效定位 (3) 緯度ddmm.mmmmm(度分) (4) 緯度半球N(北半球)或S(南半球) (5) 經(jīng)度dddmm.mmmmm(度分) (6) 經(jīng)度半球E(東經(jīng))或W(西經(jīng)) (7) 地面速率(000.0~999.9節(jié)) (8) 地面航向(000.0~359.9度,以真北方為參考基準) (9) UTC日期,ddmmyy(日月年) (10)磁偏角(000.0~180.0度,前導位數(shù)不足則補0) (11) 磁偏角方向,E(東)或W(西) (12) 模式指示(A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無效) 可以通過GPS模塊的配置軟件讓模塊只輸出這一條語句,也可以通過判斷第四位的字符是不是"M"從這幾條語句中篩選出$GPRMC語句。編程的流程圖如下圖所示:
N8}%T{ED3_T9[D8Y78OBL5J.png (36.41 KB, 下載次數(shù): 79)
下載附件
程序流程圖
2019-4-23 15:14 上傳
這樣解碼的效率較低,但不影響效果?梢栽诖诮邮罩袛嗬锒x一個5位的命令類型數(shù)組,在中斷內(nèi)就判斷命令的類型,這樣免去了每條命令都完全接收的麻煩。這里衛(wèi)星解碼過后的定位數(shù)據(jù)、時間數(shù)據(jù)可以直接用1602和12864顯示。由于我的課設需求是要有一個基于LabView的上位機顯示,所以還需要考慮串口被占用的問題。由于還有其他數(shù)據(jù)需要處理,加之用普通IO口模擬串口輸出效率較低需要占用較多資源,所以暫定用三態(tài)門拓展串口。以后不定期再更新完善,歡迎各位交流指點。1602和12864顯示的代碼就添加在附件里了。
V1.0第一次編寫
V1.1更改一些外部中斷的BUG
V1.2加入UTC時間/日期和北京時間/日期的轉(zhuǎn)換,包括閏年、日/月/年的進位計算
單片機源程序如下:
0.png (41.53 KB, 下載次數(shù): 86)
下載附件
2019-4-23 17:01 上傳
所有資料51hei提供下載:
51GPS信息獲取例程.zip
(372.2 KB, 下載次數(shù): 277)
2019-4-23 15:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|