【Maker 電子學】GPS 接收器的原理與應用—PART5

作者:Bird 

上一回我們介紹了 GPS 衛星的導航訊息內容,以及詳細的衛星捕獲過程。我們也說明了藉由行動通訊網路傳送衛星曆書的 A-GPS 工作原理。

這一回我們要進入實戰,開始介紹 GPS 接收器的輸出,以及如何解讀這些輸出的資訊。

GPS 接收器

現在要取得 GPS 接收器或是接收模組已經變得非常容易。如果你上蝦皮去搜尋「Arduino GPS」,可以看到一大堆這樣的東西:

(圖片來源:Bird 提供)

這些 GPS 接收器模組絕大多數都有 logic level 的 UART 輸出,少部分可能還會附帶 UART 轉 USB 的晶片,讓你可以用 USB CDC 的虛擬 UART 來使用它。

以這個模組爲例:

(圖片來源:Bird 提供)

它是一塊大概 2 cm*3 cm 大小的電路板。在零件面我們可以看到一個金屬殼蓋起來的模組,上面寫著 NEO-7M,這就是 GPS 接收模組本人。NEO-7M 是由 u-blox 這家瑞士公司所推出的 GPS 接收器模組,它的 datasheet 可以很容易在網路上查到。

我們來看一下它的規格:

(圖片來源:Bird 提供)

首先我們看到,NEO-7M 的接收器規格有 56 個 channel,也就是說它可以同時接收及追蹤 56 顆衛星的訊號,或是同時解碼 56 組 PRN。咦!我們之前不是說 GPS 衛星只有 30 顆,就算 cold start 時要同時盲猜所有的衛星,也只會用到 30 個 channel,要那麼多 channel 幹嘛呢?

答案在下面。我們看到它除了可以接收 GPS 之外,還能接收 SBAS、QZSS 和 Galileo 等其它三個導航系統。

對,這是我們之前沒有提到的部分。這個世界上除了美國的 GPS 之外,其實還有其它好幾個衛星導航系統,其中 Galileo 是歐盟主導的系統,它是一個完全獨立於 GPS 之外,但是編碼與訊號格式和 GPS 相容的系統,因此它可以共用 GPS 的接收器。

而 QZSS 叫做「準天頂衛星系統」,是一套由日本主導的衛星導航系統。這個名字是來自與它的衛星軌道:它是一個接近同步但又不是完全同步的軌道,讓衛星在日本和亞洲的上空南北移動。QZSS 目前的用法是和 GPS 一起運作,藉由校正、補償 GPS 的訊號,可以提供比 GPS 更高的精度,官方宣稱可以到 10cm 的定位精度,除了與 GPS 一起運作外,未來日本也計劃讓 QZSS 可以不依賴 GPS 獨立運作。

QZSS 有一個很有趣的特色,就是它的衛星上面不用配備極爲昂貴的原子鍾,而是透過與地面站的通訊校正衛星的時鐘,讓衛星上的時鐘也能達到接近原子鐘的精確度,這樣的做法可以大幅降低衛星的成本,畢竟原子鐘是 GPS 衛星上最貴的零件。

至於 SBAS 則是各種利用地面站與同步衛星聯合監測並改善 GPS 定位精度的系統總稱。我們之前說過,GPS 的運作原理是利用測量 PRN 的傳輸延遲來對衛星進行測距,進而完成定位,而 GPS 發射 PRN 的電波在穿過大氣層時會經過各種艱難險阻,導致各種不確定的傳輸延遲和誤差。SBAS 就是藉由另一個系統來測量目前電波穿越大氣層時會遇到的各種誤差,用來補償 GPS 訊號的誤差,達到更高的精確度。

以上這些系統都使用與 GPS 完全相容的無線電系統與編碼系統,因此在設計接收機時可以用同樣的 RF 系統與 correlator 就可以解出對應的資訊。

GPS 天線

在接收器模組電路板背面那塊方形的零件,是很常見的一種 GPS 陶瓷天線。我們之前說過,GPS L1 訊號的頻率是 1575.42 MHz,它在空氣中的波長是 19.05 cm。設計無線電天線時,天線的尺寸會與波長相關,波長越長的訊號需要越大的天線來接收。即使用最典型的 1/4 波長天線,GPS 的訊號也需要 19.05 / 4 = 4.7625(cm)這樣的長度來接收。不過我們可以利用電磁波在介電常數比較大的物質中傳遞時速度會變慢的原理,在頻率不變的前提下讓它的波長變短,就可以用尺寸比較小的天線元件來接收。

這塊方形的 GPS 天線就是利用下面的高介電係數陶瓷,讓 GPS 無線電訊號的傳遞速度變慢,使得我們可以用大概 2 公分左右尺寸的天線來接收來自兩萬公里之外,強度只有 -166 dBm 的衛星訊號。

GPS 的無線電訊號採用旋轉極化,因此天線並沒有擺放方向的限制,但原則上天線跟 GPS 之間要有 LoS(line of sight),也就中間不能有任何阻擋。當 GPS 接收器的接收感度很高時,偶爾會因爲建築物反射 GPS 訊號之後的強度仍然可以讓接收機解得出來,而造出所謂的「鬼影」(ghost)效果,但在大部分的情況下,GPS 衛星與接收機之間是不能有任何阻擋的。

GPS 接收器的輸出

一般這樣的 GPS 接收器都是用 UART 輸出一種叫做 NMEA-0183 的資料。它看起來像這個樣子:

$GPGGA,092751.000,5321.6802,N,00630.3371,W,1,8,1.03,61.7,M,55.3,M,,*75
$GPGSA,A,3,10,07,05,02,29,04,08,13,,,,,1.72,1.03,1.38*0A
$GPGSV,3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPGSV,3,2,11,02,39,223,16,13,28,070,17,26,23,252,,04,14,186,15*77
$GPGSV,3,3,11,29,09,301,24,16,09,020,,36,,,*76
$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45

NMEA 是美國國家海洋電子協會(National Marine Electronics Association)的縮寫,它定義了船舶上面用的各種電子裝置像是 GPS 接收器、氣象儀器、聲納等其它導航儀器的通訊界面。由於 GPS 的出現爲航海的導航功能帶來革命性的變化,使得 GPS 在航海上被普遍使用,因此 NMEA 的通訊標準就成爲了最常見的 GPS 接收器輸出格式。

NMEA 最早定義的通訊標準是在 RS-422 上,可以讓一台主機連結多個裝置,不過大部分的 GPS 接收器也都支援一對一通訊的 RS-232 模式。至於在我們使用的這種 GPS 接收模組上,輸出訊號的格式則通常是 logic level 的 UART。

NMEA-0183 這個標準規定的通訊格式是 4800 bps,no parity,1 stop bit。在現在這個年代,4800 bps 這個速度慢得有點過時,因此 NMEA 後來又定義了 NMEA-0183HS 標準,將傳送的速度提升到 38,400 bps。所有的通訊內容是以 ASCII 來傳送,因此都是印得出來的字元;每一行的行尾以 CR 和 LF 來結束,也就是 ASCII 的 0x0d 和 0x0a,這個格式讓我們可以很容易地用 terminal 程式來觀察 GPS 接收器的輸出。

接下來我們來看看接收器吐出來的資訊內容。

NMEA-0183 每一行代表一則資訊,以 $(dollor sign)開頭,CR 和 LF 結尾。每一行最大的長度是 82 個字元。$ 之後的第二個和第三個字元代表資訊來自什麼裝置,如果是來自 GPS 接收器的話,這兩個字元就是 GP;接下來的三個字元就是資訊的識別碼,像是 GGA 代表 GPS 的定位資訊、GSV 代表天空中可以看到的衛星狀態、GSA 代表定位的狀態和精度等。

在識別碼之後,就是以逗號分隔每一筆資訊所帶的參數。比方說如果是 GGA,後面就會帶時間、經緯度、衛星狀態、精度等數值,在每一行的最後,會有一個星號再加上一個數字,這是整行資訊的錯誤識別碼,用來讓使用者判斷接收到的資訊有沒有錯(錯誤識別碼的計算方式是將整行所有的字元做 XOR 計算之後,將得到的數字以十進位表示出來)。

小結

這一回我們介紹了實際可以用在 Arduino 或其它微控制器專案的 GPS 接收器模組,並說明了這種接收器模組所使用的界面。下一回我們會繼續介紹 NMEA-0183 的輸出格式,並介紹實際的程式碼範例。

(責任編輯:賴佩萱)

Liang Bird
Liang Bird

Author: Liang Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。