GPSユニットはノイズに弱い。
マイコンをつなげてGPSデータを取ろう! と思って、シリアル-USB変換ケーブルを通している際には普通に取れていた高感度ユニットが、[測位不可]のまま数十分を過ぎることもしばしば。
とりとめもない事例を連ねてみた。
なおオシロで測定とかしていないため、抽象的な話ばかりでごめんなさい。
<ユニットの個性>
たくさんのユニットが安価に手に入るようになって、迷うところが多いが、ユニットの種類があるだけそれぞれの相性が発生する。
2010年現在入手できるモジュールを分類してみると、
・SiRFStarⅢを搭載したオーソドックスなもの(チップセット的には古くなりつつある) 12~20chが多い。感度と信頼性は一番まともだと思う。
・その他の似たような性能のモジュール。 年々低消費電力、高性能化している。
・各社の新チップセット。 NMEAの10Hz更新や、20ch以上の同時測位に対応したもの。
まだ1Hz更新以上の新世代モジュールを試したことはないけれど、いつか試してみたい。 ただ、測位環境によって出力される座標が安定しない現象が報告されていたりする。
特に相性が無かった組み合わせ XBee付きでも |
Arduino FIOとEM-406aを組み合わせた時は、感度も抜群で使いやすかった。
XBeeを取り付けて無線GPSとしてデータ取りに活躍。
LS20126はSiRFチップセットを搭載した小さいモジュールで、かつ温度、加速度3ch、2次元コンパスなども搭載している変わったモジュール。 感度はEM-406とほぼ同じで、軽いため良く使っている。
XBeeを取り付けて無線GPSとしてデータ取りに活躍。
LS20126 |
GPSminiMODは小型で手軽だった。でも買うならGPSmicrominiモジュールにしよう(SiRFチップセットなので)。値段が同じなので間違えやすかった。 (おそらくminiMODはディスコン)
モジュール自体の改造を施した。コマンドを送信するためにRXを引き出し、中央のチップセットの推奨回路にあるように、信号LNAの後ろに推奨通りのコンデンサを追加し、電源ラインを強化した。 だいぶ測位性能が上がった。このGPSチップセットは比較的最近のものらしく、スリープ等がコマンドからできるので、ロガーとして使いやすい。
ただし感度はアンテナの大きさも手伝ってか、あまり高くない。
GPS miniMOD 改造後 |
<電源>
Arduino MEGAを使い、Arduino FIOとほぼ同じシステム構成で回路を制作したときに
測位不可のままとなった。 XBeeがついていると測位が開始できない。
測位成功後にXBeeを取り付けると、問題はなかった。
応急処置として、GPSユニットのシールドをGNDレベルとパスコンでつなぎ、XBeeを基板から離したところ測位するようになった。
その後、一旦リチウム電池からDC-DCを経由していた電源構成を見直し、XBeeとGPSの電源をバッテリから直に取るようにしたところ、問題は解決した。一旦5Vに昇圧したものを使っていたが、XBeeがスリープからの復帰を繰り返す毎にDCDCのコイルが鳴いていたので、供給限界だったのかもしれない。三端子レギュレータのノリで作ると良くないな、と。
<モード>
GPSは直前の測位情報を保存して、次回起動時にその情報を元にホットスタートを試みる。
情報が不安定な測位状態の時のものだったり、全く違う場所で起動した場合は、測位に時間がかかることがあるらしい。GPSユニットのデータシートを読んで、コマンドを送付し、適度にリセットをすると言った手順を踏むのもいいかもしれない。
物によってはスリープモードもあるので、携帯機器向けであれば電力制御もコマンドで済むかも。
<マイコン基板との相性?>
そもそもArduinoにしたのは、H8を使っていた際に測位すらできずにいたからだった。
改良後の電源構成にしてもいつまでも測位しない。 なぜだろう。
教育用キットとしてH8は相変わらず大人気なので、競技大会の報告書などで良く目にするのだが、GPSがうまく取れない原因として、H8のクロックノイズなどが挙げられていることがある。
他の人の解決策ではできるだけ ユニットを隔離することのようだが、小型ロボットだと実装の都合であまり離せないので面倒だ。
マイコンのノイズが大きいのか、こちらの電源周りの設計がヘボ過ぎたのかはともかく、測位出来ないとなにもできないだけに、問題としては根深い。
<まとめ>
まとめると、測位開始時のノイズ混入がとても影響するようだ。 こんな小さなアンテナで、微弱な信号を増幅して演算するのだから、質の悪い電源、電磁波干渉をうけたら感度が低下することは想像に堅くない。逆に一度測位に成功すれば多少のノイズにはビクともしない。 競技でGPS誘導に失敗するパターンは、始めから測位に成功してない場合が多い気がする。
対策としてはまずGPSはバッテリからなるべく直に電源を確保すること。マイコンにDCDCを使ったとしても分離する。 そしてアンテナ付近は適度にグランドプレーンを確保すること。となる。 おまじないではあるがチップのノイズフィルタも挟んでみると良いかもしれない。調べると、機器自身のノイズ対策はそのためのEMIフィルタもいろいろでてるくらい。
最新のスマートホンでも測位性能は機種によってだいぶ違うので注意。昔と違ってGPS測位が当たり前になり、基地局前提のA-GPSなどが普及した結果、単体での測位性能はあまり重要では無くなっている。 たとえばスマートフォンにGPS誘導させようと考えている場合は、機種によって違う精度に苦しめられるだろう。 アンテナの位置も手持ち前提で背面に配置されていたりするので、制御機器としては組み込みにくい事が多い。
閑話休題。
PSPの初期型の頃、外付けのGPSユニットが出た。
なぜかジャンク屋で見つけたので、友人のPSPにつなげてもらったが、感度が低くて使いにくかったらしい。 ユニットはSiRFStarⅢ内蔵なので、PSP自身のノイズが原因だったようだ。 ケーブルを自作して延長するといった対策がいろいろあったのを覚えている。 (現在の2000とか3000では対策済みです)
以上忘備録。 GPSは大抵ARMコアを積んでいるが、その計算規模が使用マイコンより大きかったりして若干凹む。 ああ、我々はモジュールというブラックボックスのユーザーでしか無いのだな・・と。
(文明の遺産はありがたく継承しましょう)
(追記:LS20126を追加