手元の周波数測定ツールが全部数ppm以上ズレてるのでPPS信号基準の10MHzのGPSDOを作ります。

今回購入したu-blox GPSモジュール基板は「neo 6M」

確度が±1ppm以下程度になればもう満足です。1Mhz信号は独自に欲しいので比較基準を1MHzとしました。なお電圧は3.3V(USB/MCUまわりは5V)。

GPS/PPS(1Mhz)--->位相比較器<-1/10分周-VSTCXO(10MHz) -> 出力                              
                       |                         | Vref                                         
                       |--loop filter------------|

・VSTCXOはIQD Frequency Products製LFTVXO009912。±500ppb確度。digikeyで3000円程度でした。円安だなあと痛感します。
・位相比較は古典的ですがCD4046の比較器II(D-FF)を使います。Phase Lock信号も取得可能ですので。VCOを使うには電圧が足りませんが位相比較器のみの使用ですので3.3Vで動作可能です。
・肝心のループ・フィルタは根気と能力のないわたくしとしてはchangpuakが提供しているカリキュレーターに丸投げします。うまくいかない部分はMCUのデジタルフィルタ任せということで。

これだけだとシンプルな回路ですが、日常的に使うとなると色々と付け加えたりする部分があるのとケースにも入れたいので、「完成」までにはかなり時間がかかりました。次にその「付け加え」部分を記述します。

回路付加

(あ)GPS/PPS未動作時のTCXOへのVref供給
・GSP/PPS正常動作時のVCO VrefをADC->MCU eeprom保存しておきます。
・DACでVrefに供給します。ただしADC値との誤差調整は必要です。

(い)MCU/ADC/DACデバイス
・MCUはATmega328のDIP版を使います。死蔵品一掃作戦の一環です。ArduinoIDEからのコーディング・コンパイルもできるようにしておけばMCUライターも不要となります。5V動作。
・ADC/DACは12bitのものをMCUに外付けして3.3V動作でI2C制御します。

(う)FT232 UART接続先の切り替え対応
MCU用とGPS用に2つのUART接続をするのでHC 157とHC00を使って切り替え回路を組みます。次項のSoftWareSerial(MCU・GPS間)については結線だけで済ませます(多分大丈夫)。

(え)GPSモジュール設定をu-centerに依存しない
PPS信号の出力周波数設定は、モジュールについているeepromに一旦書き込めばあとは通電ごとにその書き込み情報で動作するのですが、タイミングの関係か時々動作しないことがあります。
そこで、通電の都度に設定情報をモジュールに送ってやるのが確実です。
とはいえそれだけのためにu-bloxのMS-WINDOWS専用ソフトウエアu-centerを使うのはごめんです。
neo ?Mのレジスタ管理はわたしには大変そうに見えますが、今回はPPS設定だけできればいいので単純なバイナリ情報をいくつか送信するだけですみます。
というわけで、MCUから設定情報をモジュールに渡します。GPSモジュールはI2C接続もできますがI2Cでのpps設定は仕様上不可能なのでMCUからのSoftWareSerialでそれを行いたいと思います。

(お)レベルシフト
5V動作のFT232・MCUと3.3V動作の他のデバイスのレベルシフトが必要です。UART(TX->RX)は分圧でしのぎ、I2Cはレベルシフト専用チップを使うことにします。

(か)おまけの周波数カウンター
スクラッチで作ると本題のGPSDO機器がいつまでたっても完成しそうにないので今回は8桁の市販カウンターモジュールをポン付します。安価ですが結構いい感じのものです。後述。

(き)ケースと電源
別記事に書いたように死蔵品のYAMAHAのRTX-1000を再利用します。でも・・・・実はRTX-1000の電源は不適合でした。制作途中で別電源(Corsel)を使うことになりました。その事情は後述します。

長くなったのでその2に続きます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です