全球定位系統,小名GPS,大家一定不陌生,對于我們來說,它隻有一個功能——定位,說白了,就是它能告訴我們現在所處的經緯度。
雖然功能簡單,可由此衍生出來的應用可就不少了,比如車載導航儀,不光能告訴我們現在在哪,還能告訴我們怎麼去想去的地方;又如某個車隊要了解車輛的位置,那就給每個車子裝個GPS和無線收發設備,實時了解車輛信息。
圖12.1 GPS 記錄器的顯示界面
除此之外,還有些另類的應用:比如 GPS授時,所謂授時,就是告訴我們現在幾點鐘了。雖然這有點大材小用的意思,不過這時間是相當準确的,可以精确到毫秒級,可以作為許多應用的标準時鐘。再有就是今天我們要DIY的這個“GPS 記錄器”(見圖12.1)了,簡單來說,就是把我們所經過的位置記錄下來的裝置。有人要問了,這有什麼用呢?假如有驢友旅行過程中發現一段非常漂亮的路徑,路上湖光山色,風景秀麗,他就可以利用這個裝置将路徑記錄下來和朋友們分享;假如探險家外出探險,也可以利用這個裝置将路徑記錄下來,探險結束後按原路安全返回。這,就是路徑回溯功能。
接下來讓我們了解一下必備的基礎知識。
GPS原理簡介GPS應用已經非常普及,現在很多手機都集成了GPS導航的功能,但是光有導航儀或者是GPS接收器是不行的,它還得有天上挂着的24顆衛星作為信号的來源。這24顆衛星就像草莓外面的籽一樣均勻地分布在地球上空,基本上在全球任意地方都能接收到GPS衛星的信号。接收器根據衛星發送的含有報文的信号來計算處于哪個位置。除此之外,我們不能将衛星發射上去之後就不管了,所以,地球上還有地面中心對這些衛星進行監控和數據修正。所以,完整的GPS系統包括 GPS衛星、用戶接收端、地面監控中心。
圖12.2 解析流程
GPS 接收端與通信協議上面講的GPS系統包含3部分,但是我們平時能接觸到的隻有接收端。别看現在市面上各種牌子的導航儀和接收器數不勝數,但上面用的GPS接收處理的芯片,全球就隻有幾家公司有能力設計。其中,SiRF的芯片占據了民用市場七八成的份額,而目前用的比較多的是2004年發布的SiRFstar III,也就是所謂的“第3代”芯片。
接下來就是讓其他産品能“聽懂”從GPS芯片發出的數據是什麼意思了,這時就需要有個通信協議。目前大部分GPS模塊采用的是NMEA0138協議。這個協議涵蓋了許多方面,GPS隻是用到其中的一部分。
NMEA 協議簡介NMEA 是由美國全國海洋電子協會(The National Marine Electronics Association)制定的一套通信協議,是目前GPS最常見的通信協議。
以筆者的這個GPS 模塊為例,它将接收到的GPS衛星信号解碼之後,通過串口以NMEA格式輸出,而用到的語句隻有4個:$GPGGA、$GPGSA、$GPGSV、$GPRMC,其中美元符号($)代表前綴,表示語句開始;GP 代表對象,代表用在 GPS 上;後面的GGA、GSA、GSV、RMC等是語句類型;每條語句的各個數據字段用半角逗号(,)分開;結尾為*XX,XX 是整個語句的校驗和,以檢驗收到的語句是否正确,代表回車和換行,表示該條語句結束。
我們所要做的就是将其接收下來,解析出我們要的數據,再進行下一步的應用。
數據解析和保存有了從模塊那裡收到的數據,接下來就是解析出裡面有用的數據了。圖12.2所示為簡單的解析流程。
由于使用的是單片機,所以最簡單的保存數據的方案便是使用SPI接口的Flash。另外由于NMEA語句是為了便于傳輸,采用字符形式,所以“身材”比較大,基本上每次的數據量在300~500字節,由于Flash容量限制,不能将原始的NMEA 語句直接保存,所以我們自己定義了一個存儲格式,将其中有用的數據摘出來以二進制的格式保存,這樣每次的數據順利地縮小了。在實際應用中,每個點的數據隻需要32字節。
如何浏覽路徑說到這裡,就必須請出神器——Google Earth了。這是谷歌出的一款可以看衛星圖的軟件,可惜的是目前的6.0 版還不能直接支持 NMEA 協議。不過 Google Earth 支持另外一種語言,那就是KML。其全稱是Keyhole Markup Language,基于XML,同樣,它包含了很多複雜和高級的内容,在此不再贅述,我們隻需要用到其中一部分——在Google Earth 中畫路徑。
下面是一個最簡單的KML示例:
Path from GPS Logger V2
Path Name
這個KML文件被Google Earth讀取後會生成:
簡單來說,它告訴Google Earth,生成一個文檔,名字為Path from GPS Logger V2,其中有一個路徑,名字叫Path Name,路徑的是“連線”的模式,顔色為黃色(ff00ffff),線寬5像素,而具體經緯度信息則包含在标簽中,繼而Google Earth會根據其中的經緯度信息繪制出一條折線。
所以,隻要将之前保存的每個點的數據,依次填充到标簽中,則生成的KML被Google Earth讀取之後顯示的就是我們記錄的路徑。
至此,我們自制記錄器所需要了解的背景都全部知道了,接下來便是制作的過程了。
主要功能目标直接顯示當前日期和時間、經緯度、海拔、速度、方向等信息,顯示衛星信号強度、衛星數目、分布情況等。
将位置信息記錄到存儲器中,并顯示當前空間使用情況。闆載的Flash可用保存50994個記錄點,按每秒一次計,可連續記錄14小時。當空間滿了之後,可以将數據轉存至TF卡之後重新記錄。可實時浏覽存儲器中的數據,也可将存儲器中的記錄導出,或者轉換成 Google Earth可以識别的KML格式。
圖12.3 GPS 記錄器的模塊框圖
GPS 記錄器的設計GPS記錄器的模塊框圖如圖12.3所示。數據通信方面,GPS模塊通過串口與MCU通信,TF卡和SPI Flash則分别挂載在兩個硬件SPI上,LCD通過并行方式與MCU連接。供電方面,采用锂電池(自帶過充過放保護電路)供電,由于GPS内置了LDO(低壓差線性穩壓器),所以直接與電池連接;另外一路則經3.3V LDO輸出給MCU、LCD、Flash和TF卡供電;同時,用STM32自帶的ADC模數轉換測出锂電池的電壓,以此估算剩餘電池電量。圖12.4為根據框圖設計出的PCB原理圖。
圖12.4 GPS 記錄器的PCB 原理圖
繪制 PCB根據液晶顯示屏的尺寸,确定了主控闆的大小。元器件不多,所以PCB尺寸隻有顯示屏的1/2左右。制作完成的PCB圖與實物如圖12.5所示。
表12.1 制作所需原材料和元器件
圖12.5 制作完成的PCB圖與實物
圖12.6 焊接完元器件的PCB
圖12.7 GPS 模塊通過支架來安裝,電池也加以更換
焊接元器件和PCB調試筆者的習慣是焊接完一部分立刻檢測該部分是否能正常工作,這樣可以盡早發現問題并快速判斷出問題源。
在焊接之前,目測一下闆子是否有斷路或短路的情況,然後用萬用表測量電源正負極之間是否短路。
首先焊接電源部分,将USB座、LDO穩壓管和充電芯片及阻容元件焊上,然後供電,測量輸出是否為3.3V,有條件的話,還可以接在示波器上看看輸出的電壓是否純淨。
在LDO輸出和整版的供電之間,筆者增加了一個0Ω的電阻,這個電阻可作為跳線使用,斷開後可以檢測芯片部分是否有短路等情況,調試完成後可直接短接導通。
電源部分完成後,接下來焊接單片機和外圍的晶體振蕩器、複位電路,組成最小系統。要判斷單片機是否能運行起來,可以将闆上的兩個LED也裝上,然後編寫一個測試程序,循環點亮和熄滅,如果成功,則表明單片機基本正常。
最後焊接Flash芯片、TF卡座、按鍵等。
至此,原來的空PCB已經比較像一塊電路闆了,如圖12.6所示。
一般來說,使用陶瓷天線的GPS模塊需要盡量使天線面向天空,這樣才能盡可能地接收信号,所以安裝GPS模塊的時候設計了一個支架,使得模塊天線與接收器成45°角,平時手持的時候剛好面向天空,即使平放或立着放都能部分面向天空,如圖12.7所示。另外,還為模塊換了一個備用電池。
全部元件組裝完成後的樣子如圖12.8所示。裝上電池和後蓋,如圖12.9所示,硬件裝配至此就完成了。
軟件設計思路與調試由于功能簡單,軟件不需要複雜的結構,流程如圖12.10所示。開機初始化完成後,系統便進入無限主循環中,循環檢查GPS是否接收完畢,是否有按鍵按下。
圖12.8 全部元器件組裝完畢的樣子
圖12.9 裝上電池和後蓋
GPS接收和解析使用了中斷,當接收完成後,設置标志位,主循環檢測到數據接收完成,便将數據顯示在LCD上,如果設置需要記錄,則再記錄到SPI Flash中。
如果“菜單”按鍵被按下,則轉到菜單函數;如果“顯示模式”按鍵被按下,則切換顯示模式;如果“記錄”按鍵被按下,則切換是否記錄到SPI Flash中。
圖12.10 軟件流程框圖
操作方式和界面記錄器上部有4個按鈕,用途分别為“菜單/退出”、“上一個/顯示模式”、“下一個/記錄模式”、“确定”。
常規顯示時屏幕分為3個區域,頂部顯示電池電量、衛星信息、時間等,中間用大字體顯示當前經緯度,下半屏則根據顯示模式分别顯示衛星信息、速度航向和記錄信息3種模式。按“顯示模式”按鍵可以在3種模式中循環切換,如圖12.11所示。
圖12.11 顯示屏下半部具備3種顯示模式
圖12.12 将數據存儲到 TF 卡中
按“記錄模式”鍵可以切換記錄開始和停止模式。按“菜單”鍵可進入功能菜單。選擇“菜單→轉儲→TF卡(KML)”可将存儲器中的數據以KML文件的格式轉存到TF卡中,如圖12.12所示。選擇“菜單→轉儲→TF卡(轉儲)”可将存儲器中的數據以原始二進制格式存到TF卡中。
轉儲之後,在TF卡的GPS目錄中就會有已經生成好的KML 文件,如果裝了 Google Earth,就會出現如圖12.13所示的圖标。
圖12.13 存儲在TF卡中的KML文件
直接雙擊之後會自動打開 Google Earth,黃色的連線就是我們記錄下的路徑,如圖12.14所示。
圖12.14 GPS記錄器記錄下的路徑可在 Google Earth 中顯示
選擇“菜單→浏覽記錄”可以實時浏覽存儲器中記錄的路徑和記錄點的信息,并能直觀地了解存儲器空間使用情況,如圖12.15所示。選擇“菜單→擦除空間”,可将數據擦除,繼續記錄,如圖12.16所示。
後記其實市場上早已有産品化的GPS記錄器,而且成本更低、功能更強,但是DIY的樂趣在于更深地了解其中的原理,以及發揮自己的想象力,根據自己的需要定制。比如,還是這套硬件,通過修改軟件,還能實現GPS測面積的功能。
圖12.15 實時浏覽存儲器中記錄的路徑和記錄點的信息
圖12.16 擦除記錄
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!