Computer & RF Technology

ubloxのGPS LEA-6Tの実験ボードを作って試してみる

GPSは携帯電話やカーナビなど実に至る所で使われています。数多く使われているだけあって、その価格も非常に安価になってきています。下の写真は先だって入手してみた、今回の主題とは別のGPSモジュールです。Droneなどの自律飛行のために、Arduinoベースのフライトコントローラに接続して使うもののようです。載っているGPSのモジュールは、ublox NEO-6Mという小型のもので、パッチアンテナも付属しており、電源5Vが2本、シリアルの入出力で2本の計4本の接続だけでこのままで使うことが可能です。ちゃんとバックアップバッテリやEEPROMも搭載されており、たとえ外部からの電源が途切れても短時間で測位を再開できるようになっています。

ubloxのGPSモジュールは、モデルがいくつかあります。そのなかでLEA-6Tという時間精度と関連機能が強化されたモデルが思ったよりも安価に入手可能であることがわかりました。GPSは、その原理上正確な時間を取得することができます。モジュールからはPPS (Pulse Per Second)の信号も出ており、これを時刻源として利用して、NTPサーバの構築に使用されたりしています。RFの応用目的には周波数の基準としてGPSは非常に魅力的です。どのように使えるのか、実際に使ってみないと理解が深まりませんので、こちらのモジュールも試してみようと買ってみました。

当然ながらモジュール単体では動作させることができませんので、実験用の基板を作りました。単に端子を引き出すだけでは物足りないので、何かアプリケーションを作れるように小さいMCUを一緒に載せることにしました。50mm角の基板に納まるように小さなSSOPパッケージのPIC18F14K50を使うことにします。正直なところPICは好みではないのですが、ホストとのインターフェースを考慮すると、USBを内蔵したこれがどうしても選択に残ります(シリアルもしくはUSBシリアル変換を使うことは可能な限り避けています)。ついでに小型のI2C LCDも搭載できるようにしてみました。

というわけでできあがったのがこの基板です。バックアップバッテリや、SOT-23パッケージのEEPROMにも対応しています。他に余計な回路も詰め込んだので、少々密度が高くなってしまいました。USBはGPSモジュールからとMCUからと2系統載っています。ubloxのモジュールはモジュール単体でもUSBに対応しているので、そのままPCと直結することができ大変便利です。まずはこれを使いたいと考えて基板を作りました。基板はElecrowで製造しましたが、色が選べたので今回は黒くしてみました。見た目には格好良いのですが、パターンが見えにくく試行錯誤の際に回路検討がしにくいです。試作の段階では普通に緑を選んでおくのが正解なようです。

アンテナは別途ケーブルで接続するタイプのパッチアンテナを用意しました。安価でしたので、ちゃんと使えるのか不安でしたが、まずハンディGPSに接続して試してみたところ、普通に使えて安堵しました。

実はこの写真は2本目に購入したものなのですが、注文時にコネクタのタイプとケーブルの長さをカスタム指定し、SMAの8mで製作してもらいました。ケーブルを長くしたのは、自宅屋根の上にアンテナを設置するためです。カスタムしてもらっても安価でした。

部品が用意できたので、まずはGPSモジュールとUSBコネクタ、アンテナと電源まわりの最小限の部品だけを載せて、USBをMacに接続してみます。

ubloxのUSBは中身はCDCデバイスなので、LinuxやMacであればデバイスドライバは不要で、何もしなくてもシリアルデバイスとして見えます。電源も供給されますし、速度も何も全く設定不要で悩まなくて済むので便利です。

USBに接続すれば電源が供給されますので、測位動作を開始します。アンテナを窓際に置き、メッセージ出力をscreenでモニタします。NMEAメッセージはテキストで出てきますので、その内容を観察します。しばらく待つと測位が成功したようで、中身が変化しました。測位後のデータは緯度経度で位置がわかってしまうので、参考に初回起動時のまだ測位成功していない段階のメッセージを載せておきます。

$ screen /dev/tty.usbmodem411
$GPRMC,,V,,,,,,,,,,N\*53
$GPVTG,,,,,,,,,N\*30
$GPGGA,,,,,,0,00,99.99,,,,,,\*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99\*30
$GPGSV,1,1,01,03,,,23\*7A
$GPGLL,,,,,,V,N\*64
$GPZDA,,,,,00,00\*48
$GPTXT,01,01,02,u-blox ag - www.u-blox.com\*50
$GPTXT,01,01,02,HW  UBX-G60xx  00040007 FFFFFFF9f\*4B
$GPTXT,01,01,02,EXT CORE 7.03 (45970) Mar 17 2011 16:26:24\*44
$GPTXT,01,01,02,ROM BASE 7.03 (45969) Mar 17 2011 16:18:34\*57
$GPTXT,01,01,02,MOD LEA-6T-0\*31
$GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR\*20
$GPTXT,01,01,02,ANTSTATUS=OK\*3B
$GPRMC,,V,,,,,,,,,,N\*53
$GPVTG,,,,,,,,,N\*30
$GPGGA,,,,,,0,00,99.99,,,,,,\*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99\*30
$GPGSV,1,1,00\*79
$GPGLL,,,,,,V,N\*64
$GPZDA,,,,,00,00\*48
$GPRMC,,V,,,,,,,,,,N\*53
$GPVTG,,,,,,,,,N\*30
$GPGGA,,,,,,0,00,99.99,,,,,,\*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99\*30

いろいろな情報が載っているようですが、このままではよくわからず。有り難いことにubloxではu-Centerというソフトウェアが用意されています。残念ながらWindowsのみですが、VMwareに入れたWindowsで動作させてOKでした。u-CenterをインストールするとUSBドライバも同時にインストールされ、USBをVMware側にアタッチすることでうまく認識します。認識後はWindowsではCOMxxとして見えますので、適宜選択します。

u-Centerを使うとGPSの測位の結果だけではなく、各種グラフの表示や地図との連携等も可能です。GPSの設定項目は実に多種多様で、マニュアルを眺めつつu-Centerで設定を変えて様子を見ることで具体的な使い方がわかってきました。

ちなみにこちらは、パッチアンテナを使用したバージョンです。基板にはU-FLコネクタを付けて、そこにパッチアンテナを接続しています。バックアップバッテリは、裏にホルダでCR2032を固定しています。実は電池は別件で使用済みのものの再利用ですが、電圧さえ残っていればバックアップ程度であればとりあえず平気なようです。

こちらはI2C LCDを付けた状態です。PICにUSBCDCデバイスを実装し、GPSからのシリアルをそのままCDCにブリッジすると同時に、メッセージから情報を抽出し、とりあえずUTC時刻と、受信衛星数、HDOPをLCDに表示するようにしています。また、このLCDにはアイコンがあるので、適当に受信状態や、測位モードをアイコンで表示させるようにしてみました。ディスプレイを付けても50mm角に納まっています。

反省点としては、小さいMCUということでPIC18F14K50を載せましたが、NMEAメッセージをテキスト処理するにはさすがに非力すぎました。USBのバッファを確保してしまうと、特に768byteしかないSRAMが不足します。連続したバッファが256バイト境界を跨げないなどの制約もあります。やりたいことはなんとかなりそうですが、正直厳しいです。

というわけで、まずはLEA-6Tを使うことができました。LEA-6Tは普通にGPSとして使うだけではなく、時間の精度が高い他、PPPやRTKなど高度なGPSの利用が可能とのことです。いろいろ研究してみたいと思います。

リファレンス

Load more