nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

GPS較正VFO その6  R909-VFO-GPS-1602基板の紹介 (まとめ)

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表示)基板がベースです。

 

R909-VFO-GPS-1602部

R909-VFO with GPS

 

 GPS Corrected VFOの仕組みですが、GPSの1秒パルスPPS信号をゲート信号として使います。Si5351aから周波数出力2.5MHzを出し、40秒間カウントして、10,000,000との差を計算します。この差がSi5351aVFO較正データになります。 

 GPSモジュールが衛星からの電波を捕捉、PPS信号が出力されると44秒後に較正周波数が得られます。

較正され、10Mhzを出力

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モジュールと繋ぐために使います。

 

  1. 基板作成

 ユニバーサル基板やブレッドボードで回路を組める程度の構成です。しかしながら、スイッチ操作もあるし、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社の協力を得て作成しました。

 

 

 

R909-VFO_GPSのOLED表示ではGPSつながらない?chatGPTさんにアドバイス聞いてみた

R909-VFO_GPSと言うプロジェクトを進めています。QEX誌に掲載されたGPS corrected VFOの改良版スケッチをR909-VFOの1602LCD表示版に移植することができました。エアバンド受信機の局発をSi5351aモジュールで較正した際にFづれが気になっていました。局発周波数をGPSで較正できるのは進歩です。基板データとか回路図、組立説明などは追ってGITHUBに掲載する予定です。

 

ところで、R909-VFOの1602LCD版はデバッグ用の基板で、ケースインを想定しないで設計したものです。ケースイン想定の基板はR909-VFOのOLED版になっています。しかしながら、ATmega328Pのメモリー容量では必要なライブラリー、ADAFRUITSのOLED、tinyGPS、Si5351aなどが入る余地ありません。そこでADAFRUITSのOLEDの替わりにtiny4kOLEDを入れ表示させてみました。

 

表示が出ました。しかしHardwareSerialでGPSモジュールと繋がりません。次に、SoftwareSerialに切り替えようとすると、ロータリーエンコーダーをサービスしている信号変化割り込みがエラーになります。

tiny4koledでR909-VFO表示を試す

 

あまりに色々な条件制限があり、また、Arduino IDEとしてエラーメッセージは出さず、実行時におかしくなったりするので、TRY&ERRORアプローチでは追い込みが大変です。

 

以前にADAFRUITSのOLEDライブラリー使用時にSRAMモリーが混んでいるとHardwareSerialが誤動作することがありました。実行時にSRAMの取り合いが原因なので、コンパイル時にわからないのです。

 

一度chatGPTさんにでもアドバイス聞いてみようかと思い、アクセスしてみました。回答は既に手を打っているような内容が多いですが、根掘り葉掘り聞いたら、色々とこれはと言う対策案を教えてくれました。スケッチまで送れと言われ送ったら、輻輳がありそうな関数処理の後にはdelay入れろとか、i2cのプルアップ大丈夫かとか、実行時SRAMモリーをモニターする関数とかを教えてくれました。既にdelayは入れまくってますが、効果ありそうな場所を教えてくれたのはありがたいです。処理の重い関数が干渉するのを避ける入れ子制御を入れるというのもなるほどです

GPS較正VFO その5  R909-VFO-GPS試作が何とか動きました

GPSモジュールの受信感度向上が一番の課題だとわかりました。色々と試行錯誤した中で、

1.Si5351aモジュールからのRF干渉、

2.屋外に出して天頂からの電波を受けやすく、

3.電源などからの電導ノイズを軽減する、

の3点に留意する必要があったようです。1メートルぐらいのコアを入れたケーブル経由でGPS接続をし、そしてGPSモジュールは屋外に出すという対策をしました。十数分待てば10衛星が捕捉できるまで改善しました。


これで、やっとPPSパルスカウントをゲートに、2.5MHz信号を100,000,000回ぐらい数えるという処理のデバッグができました。較正周波数も表示するようにしたので、Si5351a個別モジュールの較正周波数取得に使えるようになりました。このR909-VFO-GPS試作機にモジュールをつなげば、較正周波数を取得でき、受信機へ組み込み時の周波数設定に使えます。
スケッチはGITHUBに置いてあります。PCBのガーバーデータとか、BOMなどもアップロードしてあります。

 

44秒ごとに較正した周波数の変動差分を表示します。差分が0.5Hz以下になった時にEEPROMに較正値(10MhzにおけるGPS標準との差)を記憶します。

Stability

現在保持している較正周波数です。

CORRECTED frequency

CORRECTED 

 

この基板ではArduinoはpro miniかATmega328Pです。このスケッチはフラッシュの78%まで使っているので、OLED表示基板に載せ替えるのはちょっとむつかしそうです。

今回の試作ではArduino機能ではない、ATmega328P機能である信号変化割り込みとかT1カウンタでのパルスカウントを使いました。今後の試作に役に立ちそうです。

回路図は次。元のPCBに対するパターンカットジャンパとGPSモジュールとの接続ケーブル信号配置は次です。

回路図

Wires & Jumpers

 

GPS較正VFO その4 PCでGPSをつないで挙動を試してみる

GPS corrected VFOを試作しています。PPS信号がなかなか安定に出力されません。なのでスケッチのデバッグが進みません。ロケーション悪く、GPSモジュールのチップセットが古いのがまずいんでしょうか。

GPSモジュールをつなぎ、窓際にもっていけば、すぐ受かるんではと思ってましたが、そんな簡単ではないようです。PCにつないでPCアプリを使ってみて、挙動を確かめてみることにしました。E108 GN02DのマニュアルではNaviTrackと言うアプリを使うように書いてありますが、最新版のDLがうまくいきません。替わりにE108 GN03Dのマニュアルに書かれているGnssToolKitを使わせてもらうことにしました。このアプリはGITHUBにあります。まずはダウンロードし、手持ちのUSBseralを介しGPSとつなぎます。

接続信号ケーブル、およびPCアプリの操作画面は次の通りです。

接続ケーブル

GnssToolKit用GPS接続ケーブル



GnssToolKit画面

GnssToolKit操作画面

南面の部屋で実験をやっているので、当然ながら天頂より、南の衛星しか見えません。更に、南西側に隣接するマンション棟があるので、主に南から東方向の衛星を捕捉しています。ベランダに出すと5~6衛星が捕捉できます。しかしPPSが安定しません。GPS corrected VFOのスケッチでは44パルスのPPSで較正値を算出するのですが、44秒も待っていると途中で欠落があったりします。


そこでもう一度マニュアルを見直しました。位置確定条件は「受信衛星数は6以上、全衛星の信号強度は-130dBm、10回のテストで平均値が得られ、測位誤差は10メートル以内です。」確かにこの条件は厳しいです。感度についての条件を見ると、コールドスタートで-148dBm、いったんロックして5分経過すると-162dBMに上るとのこと。

以上を勝手にまとめてみると、
1.PPS安定出力には、まずは6以上の衛星を捕捉し、10回調べOKとなり、ロケーションが確定する。
2.受信感度が上がったところで、5分以上安定している。
というのが条件のように思えます。GPSモジュールの挙動が判ってきたので、もう一度R909-VFO-GPSの実験に戻りたいと思います。

 

 

 

GPS較正VFO その3 R909-VFO基板で時間、緯度、経度モニター機能

R909-VFO-1602基板にSQ2GUのGPS Corrected VFOのスケッチの移植中です。その途中で、時間、緯度、経度モニター試作機を作りました。。

SQ2GUのGPS Corrected VFOのスケッチデバッグ中なのですが、まともに動き出すまでずいぶん時間がかかります。時間短縮のため受信信号強度を稼ごうと、屋外に出し、衛星を4つ捕捉するまで待ちますが、なかなか期待通りにはいきません。

このスケッチでは、まずはGPSとの接続確認、次にGPSの衛星捕捉、4衛星を捕捉するとやっと、PPSパルスが出てきます。PPSパルスを、44秒間計測し、VFOの信号周波数との差分を計算します。差分値を較正値として記憶し、Si5351aモジュールを較正、44秒ごとに誤差を算出し、誤差周波数(Fstab)表示します。Si5351aモジュールの水晶発振回路の安定度では、数Hzぐらいで+-を行ったり来たりします。

R909-VFO GPS Corrected Fstab 写真

R909-VFO with GPS安定度


しかし、あまりにGPSの立ち上がり時間がかかるので、デバッグが進みません。どうもGPSが外来ノイズを受け感度低下を起こしているようです。屋外に出すとき、実験用電源としてスマフォ用モバイルバッテリーを使用しています。リチュームイオン電池から5VへステップアップするLDOのスイッチングノイズのことをすっかり見落としていました。

ノイズ対策確認実験のため、先に紹介したGPS時計機能と緯度経度モニター機能を合体し、GPS_TIME_LOCモニタースケッチを作りました。


\GPS_watch_Loc_kpa1.ino

github.com

 

推定は当たっていたようです。GPSの電源配線(+5V,GND)をダストトロイダルコア巻きにし、モバイルバッテリーを回路からなるべく遠くへ離すと改善されました。室内でも窓際なら、ちょっと時間がかかるが衛星捕捉できるようになりました。

 

TIMEとLOC表示事例


GPSの衛星補足確認のために作ったスケッチですが、時間、緯度、経度モニターなので、役に立つのかも知れません。

 

 

 

 

GPS較正VFO その2 R909-VFO基板に”GPS Corrected VFO@SQ1GU”を移植中

R909-VFO基板にGPS受信モジュールE108 GB02Dが繋がったので、次はGPS Corrected VFOのスケッチを移植します。

割り込みとか、カウンタの関係で使用ポートが固定されており、合わせるため、パターンカットジャンパを行っています。

・D2をGPS/PPS信号入力にし、REAをD4に移す。・D5にSi5351a-CLK1の2.5MHz信号を入力。・GPS/EN信号をD7につなぐ、・GPS/TXをD6につなぎ、SoftwareSerialで受ける。・GPS/RXはつなぐとまずいようです。

回路図

回路図

ケーブル

接続ケーブル


ところがなかなかうまく動きません。

GPSが衛星を捕捉するまでずいぶん時間がかかります。そのあたりのGPS受信機の動きを体得しないといけないなあと思い、GPS時計と言うのを移植してみました。

移植用に修正したGPS時計のスケッチ 

GPSde


このスケッチを動かすとGPSさんの挙動を知ることができました。ざぼんさんありがとうございます。電源を入れると、衛星捕捉に行き、一つ、二つ、三つと探し、四つ目が見つかると必要な情報が整い、PPS信号が出力されます。結構時間がかかりますね。

この時計スケッチ動作中の衛星補足時間と、GPS較正VFOのスケッチの操作中ではなんとなく、後の方が時間がかかるようです。次にSi5351aのモジュールを外してみると、時間が短縮されました。Si5351aモジュールをつなぎ、RF信号をONすると、RF信号からなのか、電源からの回り込みなのか、干渉を受けてGPSの受信感度が劣化しているようです。

とりあえず、今日はここまでにします。


この項続く

GPS較正VFO その1 準備でR909-VFO基板にGPSをつなぐ

R909系の受信機やVFOにF-COR機能(Si5351aの基準発振25MHz補正)を付けました。Si5351aモジュールにより、結構数kHzずれているのものあり、F-CORモードにしてロータリーエンコーダーを回すのは大変です。

WEBを見ていたらGPS Corrected VFOという試作が紹介されていましたGPSでSi5351a構成のVFO周波数を較正するというものです。該当のQSP記事を探しその仕組みをみたら、このやり方はちょうどよいF-COR操作解決策になりそうです。GPS Corrected VFOではGPSの1秒パルスPPS信号をゲートに使い、Si5351aの周波数出力を25MHzに正規化しカウント、25MHzとの差を取得し、その差をSi5351aVFO較正データにしようというものです。


ということで、F-COR機能オプションとしてこの較正法を検討することにします。まずはAliExpressで1000円ぐらいのお手頃GPSユニットを買い,GPSとの接続実験を始めました。E108 GN02-D

部品類一式

R909-VFO基板とGPS

基板のガーバーファイル一式。

github.com

基板の。部品表。

github.com

 

R909-VFO-1602回路図。

回路図

パターンカット ①J4#6とD4(ATmega328P)間パターン、J4#6とD4間(Pro mini)パターン,②RE#AとD2間パターン

ジャンパ ③RE#AとD4(ATmega328P)間をつなぐ、RE#AとD4(Pro mini)間をつなぐ、④J4#6とD2間をつなぐ、⑤CLK0(J1)とD5をジャンパ。

 

 

R909-VFO基板とのつなぎはSoftwareSerialを使いJ4ピンヘッダーで開いているポートを利用することにします。

WIRE説明

R909-VFO基板とGPS接続線割り当て

 

 

GPSユニットが到着したので、SoftwareSerial経由でGPSと接続を確認、GPSデータのモニターを行ってみることにします。

1.ライブラリTinyGPS++のダウンロード
 GitHub mikalhart から TinyGPSPlus ライブラリをダウンロード。
  https://github.com/mikalhart/TinyGPSPlus/releases

2.ダウンロードした、”TinyGPSPlus-1.0.2b.zip”をArduino IDEへインクルード

 

WEBのページを参考にGPSとの接続確認スケッチを作成。このユニットにはEN端子が付いていて、LOWにするとSLEEPになるので、HIGHにするため、LCDのバックライトのポート信号を流用しました。GPS_TEST20241022_1.ino

 

続いて、TinyGPSを使い、GPSからのNMEA0183コマンドを解析し緯度、経度などのデータを取得し、LCDに表示してみます。

GPS_TEST20241022_3.inoのスケッチWEB

 

スケッチのデバッグには衛星補足が必要です。窓際か、ベランダに置いて、しばらく数分ぐらい待つと、ppsのLEDが光り始めると共に経度緯度など取得でき表示できました。

これでGPSユニットの基本的な使い方が判りました。次にGPS Corrected VFOのR909-VFO基板への移植に移ります。そして、その後、R909-VFOのF-COR機能として盛り込む予定です。


この項続く。