スキップしてメイン コンテンツに移動

ホビー用GPSユニットのためのノイズ対策・・・試行錯誤

GPSユニットはノイズに弱い。

  マイコンをつなげてGPSデータを取ろう! と思って、シリアル-USB変換ケーブルを通している際には普通に取れていた高感度ユニットが、[測位不可]のまま数十分を過ぎることもしばしば。
とりとめもない事例を連ねてみた。
なおオシロで測定とかしていないため、抽象的な話ばかりでごめんなさい。 

<ユニットの個性>

  たくさんのユニットが安価に手に入るようになって、迷うところが多いが、ユニットの種類があるだけそれぞれの相性が発生する。
2010年現在入手できるモジュールを分類してみると、
・SiRFStarⅢを搭載したオーソドックスなもの(チップセット的には古くなりつつある) 12~20chが多い。感度と信頼性は一番まともだと思う。
・その他の似たような性能のモジュール。 年々低消費電力、高性能化している。
・各社の新チップセット。 NMEAの10Hz更新や、20ch以上の同時測位に対応したもの。

まだ1Hz更新以上の新世代モジュールを試したことはないけれど、いつか試してみたい。 ただ、測位環境によって出力される座標が安定しない現象が報告されていたりする。


特に相性が無かった組み合わせ XBee付きでも
 Arduino FIOとEM-406aを組み合わせた時は、感度も抜群で使いやすかった。
XBeeを取り付けて無線GPSとしてデータ取りに活躍。

LS20126
LS20126はSiRFチップセットを搭載した小さいモジュールで、かつ温度、加速度3ch、2次元コンパスなども搭載している変わったモジュール。 感度はEM-406とほぼ同じで、軽いため良く使っている。

 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を追加

Popular posts

【サボテン】太陽電池の結線

 久しぶりにサボテン計画。 忙しかったり投薬治療直前でだるかったりして、かなり放置していた。 さぼてんも不機嫌そうだ。 せっかくなので、園芸用の水受けに移す。  関節痛で寝込んでる間に、エイプリルフール終わってましたね^^・・・。  太陽電池の展開機構を想像したが、まずは太陽電池の結線を済ませよう。  配線を綺麗にまとめたくていろいろ探していたら、千石電商でぴったりなものを見つけた。 LEDリング基板 というらしい http://www.led-paradise.com/product/629?  本来はチップLEDをリング状にまとめる代物。 イレギュラーな使い道だ。   今度は小径のを買って、GX200のリングライトに仕立て上げよう。   嬉しいことにフレーム径にジャストフィット。 配線を綺麗にまとめられた。   太陽電池の接続部。逆流防止用にショットキーダイオードを入れている。 かなりスッキリ。 蛍光灯下 500ルクスでの実験。 EDLCは10Fを使用。  ちゃんと充電が行われている。 といっても、とてもとてもゆっくりとだけれど・・・。

Arduino Nano Everyを試す

 秋月で売っていたAtmega8と、感光基板でエッチングしたArduino互換ボードを製作してみて、次に本家ボードも買って…  と気が付いたら10年が経過していた。  ハードウェア的な観点では、今は32bitMCUの低価格化、高性能化、低消費電力化が著しい。動作周波数も100MHz超えが当たり前で、30mA程度しか消費しない。  動作電圧範囲が広く、単純な8ビットMCUが不要になることはまだないだろうけど、クラシックなAVRマイコンは値上がりしており、価格競争力は無くなりつつある。 そしてコモディティ化により、公式ボードでは不可能な値付けの安価な互換ボードがたいていの需要を満たすようになってしまった。     Arduino Nano Every https://store.arduino.cc/usa/nano-every https://www.arduino.cc/en/Guide/NANOEvery  そんな中、Arduino本家がリリースした新しいNanoボードの一つ。  他のボード2種はATSAMD21(Cortex-M0+)と無線モジュールを搭載したArduino zero(生産終了済み)ベースのIoT向けボードだが、 Nano EveryはWifi Rev2と同じくAtmega4809を採用していて、安価で5V単電源な8ビットAVRボードだ。  Atmega4809はATmegaと名がついているが、アーキテクチャはXMEGAベースとなり、クラシックAVRとの間にレジスタレベルの互換性は無い。   https://blog.kemushicomputer.com/2018/08/megaavr0.html  もちろん、ArduinoとしてはArduinoAPIのみで記述されたスケッチやライブラリは普通に動作するし、Nano Every用のボードオプションとして、I/Oレジスタ操作についてはAPIでエミュレーションするコンパイルオプション(328Pモード)がある。 公式のMegaAVR0ボードはどれもブートローダーを使わず、オンボードデバッガで直接書き込みを行っている。  ボードを観察してみると、プログラマ・USBCDCとしてATSAMD21が搭載されている(中央の四角いQFNパッケージ)MCU的にはnEDBG

ATmega4809(megaAVR0)を試す

megaAVR 0という新しいAVRシリーズを試してみた。  小さいパッケージなのに、UARTが4本もあるのが気になったのがきっかけ。 登場すると噂の Arduino Uno Wifi rev2  にも採用されるらしい。  簡単にデータシートを眺めてみると、アーキテクチャはXmegaシリーズを簡素化し、動作電圧範囲を広げたもののようだ。  CPUの命令セットはAVRxtと新しくなっているが、Xmegaで拡張された一部の命令(DESやUSBで使われる命令)が削除されていて、基本的に今までのATmegaとほぼ同じだ。  コンパイラからは、先に登場した新しいtinyAVR0, tinyAVR1シリーズと共にAVR8Xと呼ばれて区別されている。  CPU周りを見てみると、割り込みレベルなど、今までのクラシックなATmegaで足りないなと思っていたものがかなり強化されていた。 ArduinoAPIを再実装するとしたら便利そうなペリフェラルもだいたい揃っている。 データシート P6  DMAは無いけれど、周辺機能にイベント駆動用の割り込みネットワークが張り巡らされているのがわかる。  できるだけCPUを介在させない使い方がいろいろ提案されているので、アプリケーションノートやマニュアルを読み込むことになる。 ピックアップした特徴 ・データメモリ空間(64kB)に統合されたFlashROMとEEPROM ・RAM 6kB ROM 最大48kB (メモリ空間制限のため) ・デバッグ専用の端子 UPDIを搭載 ・優先度付きの割り込み(NMIと2レベル) ・ピン単位の割り込み(かなり複雑になった) ・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった) ・豊富な16ビットタイマ(4809では5基) ・16ビット リアルタイムカウンタ(RTC) ・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch) ・内蔵クロックは最高20MHz(PLL)と32kHzの2種類。外部クロックは発振器と時計用水晶のみ ・ADCは10bit 16ch ・内蔵VREF電圧が5種類と多い(0.55V,1.1V,1.5V.2.5V.4.3V

GPSアンテナをつくる

GPSアンテナを作ってみた。 1575MHzの波長は約19cmなので、半波長で9.5cmとなる。 GHz帯とはいえ、結構長いものだなぁ。 セラミック等の誘電体がなければ、平面アンテナで真面目に半波長アンテナを作ろうとすると手のひらサイズの面積が必要になってしまう。 普通のダイポールだと指向性があるので、交差させてクロスダイポールにする。 屋外地上局のアマチュア衛星用アンテナの設計をそのまま縮小したもの。 水平パターンはややいびつ 92.2mmの真鍮の針金(Φ=0.5mmくらい)を2本用意して、42.3mmで90°に曲げる。 長さの同じ素子同士を並べて配置する。 (全長が半波長より長い素子と短い素子が交差した状態) 片方をアンテナ信号線、もう片方をGNDにつなげば完成。 実際5分くらいでつくったけれど、果たしてどうだろうか。 今回は、道具箱に眠っていた表面実装タイプのMT3339系モジュールに取り付けた。 アンテナはもともと3x1.2mm程度のとても小さいチップアンテナで、 LNAが入っているけど感度が悪かったのでお蔵入りしていた代物。 最近の携帯機器はみなアンテナに厳しい。 さて・・・ クロスダイポール版モジュールをPCでモニタしたウインドウ(左)と、QZ-Rader画面 東側に建物遮蔽があるので、そちら側の衛星はSNが悪い。 とりあえず補足できた衛星数はシミュレーションされたものとほぼおなじだった。 アンテナの角度をいろいろ振って、逆さまにしてもロストすることはなかった。 セラミックのパッチアンテナレベルにはなったかな・・・。 簡単にできてそれなりに測位するけれど、携帯性は皆無になった。 あと、近接周波数の干渉を受けやすいかもしれない。 GPSアンテナのDIY例としては、QFHアンテナもある。 ラジオゾンデなどで使われている例がある。 いつもお世話になっているQFHアンテナ計算シートのサイト https://www.jcoppens.com/ant/qfh/fotos_gps.en.php ヘリカルアンテナは加工精度の難易度が上がるので、今回はクロスダイポールにした。 GNSSとなると、複数の周波数のために調整されているセラミックパッチアンテナが有利だと思う。 セラミックパッチア