GPSから受信した高精度信号でSi5351aVFOの基準発振を較正、精度改善するVFO回路を試作しました。元ネタはずいぶん古いQEX記事です。このやり方だとSi5351aに対する較正周波数を取得するので、個別モジュール毎のR909-VFO機能のF-COR(Si5351aの基準発振周波数の補正設定機能)用データ取得にも役立ちます。
http://www.arrl.org/files/file/QEX_Next_Issue/2015/Jul-Aug_2015/Marcus.pdf
「GPS較正VFO その1から5」で実験の進捗に従うトライアンドエラーがありましたが、結局基板を作成したので、ここで情報を整理します。基板はR909-VFOと名付けているR909-DSPの局発部であるPANEL制御部(1602LCD表示)基板がベースです。
GPS Corrected VFOの仕組みですが、GPSの1秒パルスPPS信号をゲート信号として使います。Si5351aから周波数出力2.5MHzを出し、40秒間カウントして、10,000,000との差を計算します。この差がSi5351aVFO較正データになります。
GPSモジュールが衛星からの電波を捕捉、PPS信号が出力されると44秒後に較正周波数が得られます。
Si5351aモジュールの25MHz水晶発振器が10Mhz換算値でGPS標準周波数より1479.26Hzもずれています。また、クリスタル発振器が1Hzぐらいふらふらするようで、12.8MHzTCXOで較正した周波数カウンタは10Mhzと9.99999MHzで行ったり来たりしています。
試作・実験用GPSユニットにはPPS信号端子があり安価だったE108 GN02-Dを採用しました。
試作・実験に使うR909-VFO-Panel 1602基板にはArduinoとしてATmega328Pあるいはpro miniが載っていて、1602LCD、GPSモジュールを接続ピンヘッダー経由でつなぎます。そして、元々はこの基板とRF基板をつなぐために用意したJ4コネクタをGPSモジュールと繋ぐために使います。
- 基板作成
ユニバーサル基板やブレッドボードで回路を組める程度の構成です。しかしながら、スイッチ操作もあるし、GPSやSi5351aの取り外しなどあっても安定動作できるよう、プリント基板を作りました。基板のガーバーファイル一式はGITHUBにアップロードしてあります。PCBGOGOのKiCADプラグインを使い標準仕様で出力したものです。部品表、回路図も同じディレクトリーに置いてあります。
基板のガーバーファイル一式
https://github.com/Nobcha/R909-VFO-GPS/blob/main/R909-VFO-LCD-GPS_rev.kicad_pcb.zip
2.基板組み立て
部品表と回路図を参照し、表面実装のL・C・R・ICをまずははんだ付けします。続いてDIP部品のクリスタル・電解コン・半固定抵抗器、コネクタ、ICソケット、LEDをはんだ付けします。最後にSMAとスイッチ類です。
部品表 https://github.com/Nobcha/R909-VFO-GPS/blob/main/R909-VFO_GPS_bom.jpg
回路図https://github.com/Nobcha/R909-VFO-GPS/blob/main/R909-VFO-GPS1602_scm.pdf
スイッチ類、LCD・OLED用ソケット、LEDは裏面に実装します。
Arduinoはpro miniあるいはATmega328Pのどちらかを使用します。どちらかに応じて、pro mini用のコネクタ、28PICソケット、クリスタル、20pFを選択し実装してください。
3.スケッチはSQ1GU版を参照。
参考になるスケッチを探したところQEX記事を引用改良したSQ1GUさんのスケッチがありました。
http://sq1gu.tobis.com.pl/pl/syntezery-dds
当初はこのスケッチを移植、確認実験を進めました。R909-VFO用に修正したスケッチが次です。
https://github.com/Nobcha/R909-VFO-GPS/Si5351_GPS_kpa.ino
このスケッチではロータリエンコーダ操作がスムースに行きませんでした。更に探すと、ロータリエンコーダ接点入力を割り込みにした改良版がGITHUBにありました。このスケッチをダウンロードし、ポート設定をR909-VFO基板に合わせ、改良し、機能も修正追加することにしました。
gps-calibration-5351 https://github.com/csqwdy/gps-calibration-5351/blob/main/README.md
R909‐VFO用に移植、改良したスケッチをGITHUBにアップロードしました。
GITHUB https://github.com/Nobcha/R909-VFO-GPS/blob/main/Si5351_GPS_kpa.ino
オリジナルの試作スケッチから修正・改良を行なった点は
- D2にPPSを割り当て割り込み指定し、D3,D4にはロータリエンコーダ接点入力を割り当て信号変化割り込みにした、
- Correction周波数表示機能を追加、
元ネタではSi5351aモジュールの25MHz発振をTCXOに改良しているようです。本試作では水晶発振器のままであり経時安定度が悪い。なので、EEPROMへcorrection周波数を記憶する閾値0.2Hzではなかなか記憶しないので、Correction周波数表示モード時にロータリエンコーダを時計方向に回すと較正周波数correctionをEEPROMに記憶する機能を追加しました。
4.使い方
4.1 電源を投入すると名称やバージョンのバナー表示が出ます。そしてGPSユニットからの信号待ちになります。続いてGPSユニットが衛星捕捉待ちになります。衛星が捕捉できると、時間表示が出ます。衛星の捕捉数が表示されます。衛星を4以上安定し捕捉できるとPPS信号がでます。GPSモジュールのPPS-LEDが1秒間隔で点滅し始めると安定受信状態です。衛星の捕捉が安定しないときは、時々PPS信号が欠落します。欠落時には周波数表示の後に?を表示します。GPSからデータ更新が円滑に行われているときは!を表示します。GPSユニットあるいはアンテナを屋外に出さないと安定な受信ができないように思います。
4.2 44秒間連続で安定しPPSが出ると、較正周波数を算出しcorrection値とします。44秒間PPS信号が欠落しないというのは結構な受信安定度が必要です。このcorrection値はSi5351aモジュールの固有の較正値(10Mhz換算)ですので、個別モジュール組み込み時の参考データになります。
4.3 較正周波数が計算され、また、較正周波数の変動幅がF STAB値として計算されます。F STAB値が±0.2Hz以下になると較正周波数correctionをEEPROMに記憶します。次に電源を入れた時に反映されます。Correction表示モードの時にロータリエンコーダを時計方向に回すと較正周波数correctionをEEPROMに記憶します。
4.4 JST(日本標準時)はグリニッジ標準時に対して9時間早いのでTIME zone を+9に設定します。
4.5 BANKとして1-5まであります。初期値は1:10MHz、2:16.7MHz、3:37.2MHz、4:64.8MHz、5:145MHzとなっています。設定値は各BANK毎にEEPROMに記憶されます。
4.6 STEP周波数は1,10,100Hz、1,10,100KHz、1,10MHzの8種類が選べます。
4.7 FREQ Bankモードの時にロータリエンコーダを回すと、STEP周波数単位で指定BANKの周波数を増減できます。設定した周波数値はBANK毎にEEPROMへ記憶され、次回電源オン時には呼び出されます。
4.8 RE-SWを押しながら電源を投入するとEEPROMを初期化して立ち上がります。
操作の流れをフローチャートにまとめました。
5.参考と謝辞
本試作・実験を行うにあたり、インターネットの各種ホームページから情報を得て参考にさせていただきました。Arduinoのライブラリー作者、GITHUBでの情報提供者などの皆様に感謝申し上げます。(引用元は本文に記載)
また、試作基板はPCBGOGO社の協力を得て作成しました。