aitendoのGPSモジュールの不良について
- 2016/04/19 12:12
- カテゴリー:make:
aitendoのLCDに,同時に買ったGPSモジュールを組み合わせて,新しいGPS時計を作るという話を,ちらっと先日書きました。実はこの製作,現在進行中なのですが,なかなか難しい問題に遭遇してしまい,目下解決策を検討中です。
いくつかのアイデアを試しましたがどうもうまくいかず,これでダメなら「万策尽きた」と白旗を揚げようと思っていた方法で,現在検証中です。
ちらっと書きますと,1PPSパルスで画面の更新を行うという方法に起因します。HPGGAセンテンスで時刻を得ますが,問題はこの時刻の情報と1PPSがまったく非同期で,1PPSに対して前後してしまうということです。
GPGGAで時刻を得てから1PPSで更新するという単純な方法だと,1PPSの直前で1秒進んだ時刻を得ていないといけません。そこで1秒進めたんですが,場合によってはすでに1秒進んだ状態でGPGGAに載ってくる場合があることがわかりました。
これも,正確な別の時計を横に並べて,時刻をこまめに比較したから分かった事で,GPS時計だけを見ていたら気が付きません。
GPGGAの時刻情報を1秒進めるかそのまま使うか,条件分岐が必要なわけですが,問題はその条件です。なにせプログラムを実行しているマイコンにとって,時計はGPSのみであって,正確な時刻との比較など出来ません。GPSから出てくる時刻がすべて正しいと考えるしかないわけです。
で,この問題を対策するのに,手間取っています。まずは条件をつかまえる事,そして対策できたかを確認すること,この2つが必要なのですが,なにせ1秒進めるかそのままでいいかは,不定期に発生するものです。数秒で発生するかもしれないし,ずっと発生しないかもしれません。それで時間がかかっています。
さて,この製作過程でaitendoのGPSモジュールの問題点を見つけてしまいました。
今回時計に使った「NEO6M-ANT-4P」というモジュールとパッチアンテナのセットは,GPSモジュールにu-bloxのNEO6Mを使っていて,高感度,多機能で,かゆいところに手が届き,しかも安価と,欲しい人には盆と正月がいっぺんに来たくらいうれしいGPモジュールです。
現在は値上がりして2800円になったとは言え,今でも十分安いと思います。
さてこのNEO6M-ANT-4Pは,Warm Start用に衛星の情報を残すための充電式バックアップ電池と,設定情報を保存するためのEEPROMが搭載されています。
ところが,どうも設定を記憶してくれないようなのです。電源を入れている時は設定の変更が反映されているのですが,電源を切って一晩おくと,初期状態に戻ってしまいます。
初期状態では,1PPSのパルスは衛星をつかまえていない時には出てこないので,1PPSで割り込みをかけて表示の更新を行うというプログラムでは,衛星を掴むまで表示が全く出てこないことになります。
衛星をつかまえずとも,モジュール内蔵のRTCの情報を表示出来ればうれしいわけで,そのために設定の変更を行ってどんなときも1PPSが出てくるようにしてあったのです。
しかし翌日には出なくなっています。
他にも,ボーレートの変更や,余計なメッセージを出さないようにするなどの設定変更を行っていたのですが,翌日にはそれが元にすべて戻っていて,困ってしまいました。
当初,ツール(u-center)の使い方が悪いのだろうと思っていたのですが,頑張ってあちこちいじってみても状況は変わりません。いよいよ困り果てて調べて見ると,どうも設定が消える人と消えない人がいるようです。
そしてさらに調べていくと,バックアップ電池が不良の場合にこの症状が出るという情報を手に入れました。いわく,バックアップ電池が不良と判断されるとCold Startになるため,設定が初期化される,ということです。
ん?ほんとかいな。
Cold Startって不揮発メモリであるEEPROMに書き込んだ内容さえも初期化してしまうんでしょうか。だとしたら設定の保存はバッテリバックアップで行われているだけということですから,そもそもEEPROMなんて意味がないと言うことになりませんか?
まあとにかく,このバックアップ電池をわざとショートして電圧を下げてやると簡単に現象の再現ができるので,原因としては間違いないと思います。しかし,そうなるとEEPROMへの設定の保存(あるいはその読み出し)が確実に行えるようになるには,どうしたらいいんでしょうね。
この問題,小容量の二次電池で設定がバックアップされているという話ですから,現時点できちんと設定が保存されている人でも,電池が切れてしまえば発生するはずです。つまり,設定の保存先をEEPROMだと思っていたら,実はSRAMでしたということですので,後で泣くことになりそうです。
根本的には,EEPROMへの設定保存が行えるようになることなのですが,海外ではEEPROM未搭載のボードを改造して設定の保存を行うケースを見つけたものの,もともとEEPROMが搭載されていると場合の対処法は結局見つけることが出来ませんでした。
あーめんどくさい。
複数買った人でも,電池は全滅していたという話も聞きますので,どうも個体不良と言うよりはロット不良の可能性もあるんじゃないでしょうか。中国製というのは随分良くなってきましたけども,こういう品質の問題をどうも軽く考えているようで,個体不良は仕方がないとしても,この手の傾向不良を減らせないのは問題だなあと思います。
で,電池を良品に交換するということも考えたのですが,それでも電池が切れればアウトですので,やっぱり根本対策ではありません。ならば,初期化された設定の状態で使うというのが一番確実です。
幸いなことに,デフォルトの設定のままでも問題なく動くようにAVR側のソフトを書くことが出来ましたので,これで行きます。
もっとも,衛星をつかまえないと1PPSが出てこないというのは困ったもので,その間表示が全く更新されません。1PPSが来ない間は勝手に更新するというソフトを組んでもいいんですが,もう面倒くさいので、1PPSが出てこないうちは表示が代わらないという仕様にしました。つまり,信用出来る時刻情報が1PPSという形で得られるまでは,表示を行わないという考え方です。
一応これで,バッテリが死んでいてもCold Startから起動するGPS時計が出来ました。GPSモジュールをいちいちPCのソフトでいじらなくても,買ってきてすぐ使えるメリットはありますが,せっかくつかまえていた衛星の情報がすっかりなくなってしまうため,毎度毎度Cold Startになって,時刻情報が得られるまでに時間がかかってしまうことは,残念な所です。
まあ,気が向いたらここにCR2032でも付けてみましょう。
それにしてもAitendo,一筋縄ではいかないお店です。そこがまた面白いんですけどね。