2017年1月8日日曜日

GPSモジュールを利用した基準タイミング信号源の作製

市販のGPS受信モジュールを使いやすいようにケースに収めました。
GPS受信部にはu-blox社のNEO-6Mモジュールを使用しました。
アクティブアンテナとセットで$10程度で入手可能です。

受信モジュールは基板に実装された状態で販売されており、5V電源を接続するだけで受信を開始します。u-blox社から提供されているソフトウェア「u-center」で、受信状態やモジュールの詳細な設定が行なえます。
同基板上に3.3VのLDOが実装されており、モジュール自体は3.3Vで動作しているようです。

そのままでも十分使えるのですが、他の機器に信号を供給する際には駆動能力や波形が不適切なので、バッファとLPFを追加して、より実用的なものに仕上げました。
なお、このモジュールから出力されるTimePulseには20ns程度のジッタが数サイクル毎に挿入されるため、取り扱いに注意が必要です(後述)。

ブロック図は以下のようになっています。

図1 GPS基準タイミング信号源 ブロック図

給電はUSBから行います。USB-UARTブリッジを除いて、他の回路は全て3.3Vで動作します。
出力は2系統あり、片側は10MHzのLPF通過後、トランスで絶縁して出力しています(TimePulseの設定値が10MHz以上のときに、きれいな正弦波が出力される)。もう片方は3.3VのTTL信号です。
使用する機器と出力したい周波数によって選択します。

アルミケースに収めた完成品の写真を以下に掲載します。
角穴の加工が雑です・・・・。
また、今回は接着剤(ボンド G17)でアルミケース上にゴムマットの取り付け、部品の取り付けを行いました。完全に接着されるとホットボンドと比較して強固に固定されるため、安心感があります・・。

図2 上部

図3 内部構成

図4 左からUSBコネクタ, LPF有絶縁出力コネクタ, GPSアンテナ接続コネクタ

図5 TTL出力コネクタとモニタ用LED

図6 動作の様子(YouTube)



■ジッタについて
このGPSモジュールは48MHzの原発振で動作しているようで、その逆数時間(=20.8ns)のジッタがTimePulse信号に挿入されます。
12MHzや8MHzなど、整数で割り切れる周波数に設定しても数サイクルに1発程度挿入されるようです。以下にその瞬間を捉えた波形を示します。

図7 ジッタ挿入箇所

緑色の波形は、ジッタが無いときに記録したリファレンス波形です。
ジッタが挿入されると、20ns程度TimePulseの周期が伸びており、変化点でLPF通過後の出力振幅も変わっていることがわかります。

GPS衛星と同期して補正が掛かる瞬間に生じていると思われますが、詳細は今のところ不明です。
→ (16/1/9追記)GPSアンテナを接続する前にTimePulseを出力させると、48MHzの整数分の1ではジッタが発生しませんでした。また、GPS捕捉後にu-centerからコールドスタート要求を出すと再捕捉するまでの間はジッタが発生しません。やはり、補正がかかる瞬間に乗ってると考えられます。

このように、短期的に見れば不安定な信号ですが、GPS衛星によって常に補正されるため、誤差は蓄積されません。よって、数十秒~数千秒周期のパルスに分周し、周波数カウンタのゲート信号に用いると、極めて確度の高い測定が行なえます。

次回は、この信号を利用してOCXOの周波数測定をやってみます(n番煎じですがw)


■仕様変更(2016/1/9追記)
・10MHz LPF+BPFに変更しました。
LPFの後段に10MHz BPFを入れたところ、安定した正弦波が得られました。
BPFの追加により、8MHzや4MHzなど、10MHz以外の信号を出力したい場合はTTL出力端子のみとなります。
これでもまだ若干のジッタ(5ns程度)はありますが、OCXOが届いてから比較してみようと思います。
以下に出力波形を掲載します。上からフィルタなし・LPFのみ・LPF+BPFです。
図8 10MHz BPF

図9 生・LPF通過後・BPF通過後波形①

図10 生・LPF通過後・BPF通過後波形②


■10MHz BPFについて(2018/10/26追記)
使用したBPFの回路図を参考までに載せておきます。
調整は10MHzを入力しながら左右のトリマを少しずつ回し、出力信号が最大となる点に合わせればOKです。



■u-blox NEO-6Mの測位モード設定とClock Accuracyの関係(2020/6/13追記)
Configuration ViewのNAV5にて、モジュールの測位モードを変更可能です。
Dynamic Modelに関して、初期値の「0 - Portable」から「2 - Stationary」に変更したところ、Clock Accuracyが改善しました。初期状態では0.5ppb~0.7ppbをフラフラしていましたが、設定変更後は0.25ppb程度となり、変動量も小さくなっているようです。
周波数基準器として使用する場合は、通常アンテナ位置を固定した状態で運用しますので、設定を変更しておいたほうが精度向上の観点で良さそうです。


ublox社のドキュメントを参照すると、Dynamic Modelの説明があります。
測位エンジンのパラメータを切り替えているようです。
日本語訳:
「u-bloxレシーバーは、さまざまな動的プラットフォームモデル(下の表を参照)をサポートして、ナビゲーションエンジンを予想されるアプリケーション環境に調整します。
これらのプラットフォーム設定は、電源の再投入やリセットを行わずに動的に変更できます。この設定により、レシーバーの測定値の解釈が向上し、より正確な位置出力が提供されます。レシーバーを特定のアプリケーション環境に適さないプラットフォームモデルに設定すると、レシーバーのパフォーマンスと位置の精度が失われる可能性があります。」


■2021/7/17追記
本記事で使用したNEO-6Mですが、中身はNEO-7Mっぽいです。ファームウェアはROMにかかれているため書き換えができません。





~おわり~

2 件のコメント:

  1. 初めまして。
    10MHz BPFでたどり着きました。
    製作された、BPF、簡単でも、かなり性能が良いと拝見させて頂きました。
    出来ましたら、回路をお教え願えませんでしょうか?

    宜しくお願い致します。

    返信削除
    返信
    1. akioさん
      コメントありがとうございます。回路図を追加しましたのでご確認ください。
      なお、手持ちにある部品で作製したもので、定数が最適でないかもしれません。

      削除