ラベル GPS の投稿を表示しています。 すべての投稿を表示
ラベル GPS の投稿を表示しています。 すべての投稿を表示

2014年12月14日日曜日

10HzGPSのステータスLEDについて

10HzGPSから出力した1PPS出力でLEDを光らせていて気がついたのですが、このGPSモジュールのLEDは1PPS出力とは非同期のようです

赤が1PPS信号 黄色がLEDパルスです
PPSは正論理、LEDは負論理です

1PPSを信用した場合、LEDのパルスは約220msec後に50msecの間有効になっているようです

これについてGPS受信チップのデータシートを確認した所、Pin7 GPIO6に
General purpose I/O (Default status indicator. When GPS position fix is available, it output 50ms high per second, otherwise it output low.) 
多目的I/O(デフォルト地位指標。 GPS位置フィックスが利用できるとき、それは1秒につき高さ50msを出力しました、さもなければ、それが低く出力されました。) 
という記述があります(日本語はYAHOO翻訳より)

10HzGPSモジュール自体のデータシートによるとLEDはx.000秒に正確に同期しているようですが、実際にはそのような記述はなく、図による解説だけです

本来であればもう少しオシロなどで確認しておきたいところですが、僕の部屋はPC等のノイズでGPSが受信しづらい状況であまり詳しく確認できていない状況です


さて、1PPSとLED出力 どちらが正しいのか
とりあえずケータイで117に電話して耳と目で同期を確認してみましたが、どちらもずれているような気がします(そもそも117がどれくらい正しいか という問題があります 電話網での遅延とか)
確認には高精度にUTCに同期したクロックソースが必要ですね
トライステートのGPS時計でも買おうかと思ったんですが、時間専用GPSレシーバーとか謳っていながら1PPS出力端子を持っていないようなんですよね なんだかなぁ…

このGPSモジュールとの格闘はしばらく続きそうです
比較的入手性がよく比較的使いやすいGPSモジュール となると数少ない選択肢ですが、缶サットに使った際はあっさり現在位置を見失いやがりましたので、あんまり使えるモジュールでも無いのですよね

早くITAR規制外れた使いやすいGPSが輸入されてこないか…と思う今日このごろです

2014年12月13日土曜日

10HzGPSの出力タイミング

10HzGPSがNMEAデータを出力するタイミングについてです

この画像はGPSのTXとPPSをロジアナで表示したものです

1PPSの立ち上がりはUTCのx.000秒に正確に同期していると予想されます
それに対し、NMEAの出力はかなりズレています
というか1PPSが立ち上がった時点でx-1.900のデータの出力が終わっていません

このタイミングはコンスタントにこの時間分ズレるわけではなく、常に変動しています
もしかしたら捕捉した衛星の数によって処理時間が変わる…という可能性もありますが、そこまでは測定していないです

問題はNMEAの出力がPPSと非同期という点です
NMEAが送られてきた点に同期してマイコン内の時間を校正するといつまでたっても校正が終了しません

±100msec程度でいいならNMEAを受信するだけでもいいですが、±50msec以下でタイミングを合わせたい場合はPPS信号を使用する必要があります

2014年12月12日金曜日

ストリナ10HzGPSの改造

ストリナで売っている10Hz出力なGPSモジュールですが、このモジュールで使用されているGPS受信チップには1PPS出力端子があります
この出力端子は"±11ns high accuracy time pulse"(データシートより)だそうで、正確な時間が必要になる電子工作では十分な精度のタイミングソースとして使えます
しかしこのGPSモジュールではPPS出力はLEDをドライブしているだけで、コネクタには引き出されていません(そもそもコネクタは未実装ですが)
ということでPPSを引き出しつつ、他にもちょっと説明を


まずコネクタですが、4極、5極、6極のいずれかを使用します
4極の場合は電源とデータだけなのでPPSは引き出せません
5極の場合はGND2本を使用してPPSを使わない or GND1本にしてPPSを出力
6極の場合は全てのPADを使用しつつPPSを出力
という感じです

ピンアサインは画像に書いてあるので一目瞭然だと思いますが
「TXってどっちから見た送信だよ!」
と言う人がいるようなので念の為に矢印を書いておきました
GNDの隣にあるTXピンはGPSからマイコン等へ流れる位置情報データ
VCCの隣にあるRXピンはマイコン等からGPSへ流れるコンフィグデータ
となります

PPSピンはGPSデコードチップから直接ジュンフロン線などで引き出します
パターンが狭いので隣のPADと短絡しないように注意してください


それと使用する際の注意点ですが、画像に見て右上にある円形の物体ですが、これがバックアップバッテリで、ちょっと見た感じではちゃんと固定されているような気になるのですが、実際には2箇所の薄い電極で基板に乗っているだけです
なので何かに引っ掛けると簡単に剥がれてしまいます
ということで実際に使う場合はGPSモジュールをテープでグルグル巻にして置いたほうが安心です

それと同じく脆弱な場所として、アンテナの横にあるLEDも簡単に壊れてしまいます
LEDなんていらない!という場合はとっとと壊しちゃってもいいですが、GPSのFIX確認にLEDを残しておきたい場合は接着剤などを盛って保護してやる必要があります


とりあえずハードウェア面はこれくらいでしょうか
ソフトウェア面では、GPSチップに内蔵されたEEPROMの書き換え回数が少ないので頻繁に設定を変えていると設定を焼けなくなる… くらいでしょうか


それではみなさんも快適な測位ライフを!

2012年7月26日木曜日

Cで度分形式を度に変換する

GPSから出力されるNMEAの度分形式を度に変換するコードです



  1. #include <stdio.h>
  2. void dm2d(const char *str, char *data) {
  3.     int cCnt = 0, i = 0;
  4.     int d = 0, m = 0, cm = 0, cmc = 0;
  5.     while(*(str + cCnt) != '.') { cCnt++; }
  6.     while(i < (cCnt - 2)) { d = (d * 10) + (*(str + i++) - '0'); }
  7.     while(i < (cCnt)) { m = (m * 10) + (*(str + i++) - '0'); }
  8.     i++;
  9.     while(*(str + i) != '\0')
  10.     { cm = (cm * 10) + (*(str + i++) - '0'); cmc++; }
  11.     sprintf(data, "%3d.%0*d", d, cmc + 1, (((m * 10000) + cm) * 10) / 60);
  12. }
  13. int main(void) {
  14.     char str[20];
  15.     char data[20];
  16.     scanf("%s", str);
  17.     dm2d(str, data);
  18.     printf("%s\n", data);
  19.     return(0);
  20. }

浮動小数点数を使っていないので標準的なprintf等を使わなくても簡単に出力できます

桁数が少ない等の問題はありますが
とりあえず正常に動いてるっぽいので置いておきます
気が向いたら度から度分秒に変換したり度分から度分秒に変換するコードも書くかも