「お気に入りSDRトランシーバー#3マイコンソフト部の製作 」


製作中のSDR#3トランシーバーは、試験的な運用を通して細かなデバック作業を進めてきました。写真はマイコン部とSDR#3のPC画面。ATT、PRE AMP、RF AGCの ボタンを新たに追加。 マイコンは後からも交換し易いように、上側に実装します。

2023.2.03
はじめに
 SDRソフトは簡易的な物から高機能なものまで各種フリーソフトが出ていますが、いずれも外付けATT等の自作ハード部を制御することはできません。
当局のSDRソフトはSDRStudy改(RFWorld#22)を使っていますが、ソースが公開されているのでコントロールボタンを追加することは比較的容易です。PC本体とSDR本体間はシリアル通信で接続し、 SDR本体のハード制御はすべてパソコン(PC)のSDR画面上から制御出来るようにしています。
 今回はSDR本体側のPICマイコンのソフトについてまとめておきます。  

回路構成

 マイコン部は以前に製作したSDR#1からの再利用です。SDR#1では5Vと3.3Vが混在していましたが、SDR#3では3.3Vに統一しました、I2C制御に以前の5V-3.3V変換 回路が残っていますが、動作上特に問題が無かったのでそのまま回路を残しています。
 SDR#3では新たに、ATT制御電圧発生用としてデジタルポテンションメーター(MCP4801)を追加しました。D/Aを使うほどでもない場合、なかなか便利なデバイスですが 副数個使いたい場合には、I2Cアドレスが固定なのが残念。
 クロックOSCには秋月12.8MHzのTCXOを使いましたが、PICへの供給振幅が足りず、ワンゲートロジックICでAMPしています。AMPはなかなかFBで、次回はカウンター入力AMP部 にも使ってみたいところです。

  ソフトの概要と変更内容
 ソフトは、SDR#1、SDR#2を利用しますが、プログラム残容量が少なくなっていたので、一部を変更しました。大まかに次の機能から構成しています。

 開発はMPLABXのCを使用、プログラム容量は、8kWのほぼ80%を使用。

SDR#2からの変更内容
 SDR#2からの大きな変更として、PTT ON時の割り込み処理をシンプルにしました。SDR#2では、割り込み端子の立ち下がりで、TX ON、立ち上がりでRXにもどるという割り込み処理でしたが、 、SDR#3では割り込み端子の立ち下がりでTXに切り替え、割り込み端子がLowの間はTX ONを維持し、端子がHiになったらTX動作を抜けて受信フラグをセットしてメインにもどる ようにしました。結果、受信にもどる処理は割れ込みを使わないので処理が軽くなりました。
 Si5351のパラメーター計算のシンプル化、SDR#2では発振周波数を引き数としてすべてのパラメーターをソフトで計算しましたが、周波数固定や、変更の無いパラメーターは事前に手計算で 求めるようにしました。結果プログラム容量は10%以上低減できました。

マイコンの選定
 当局の開発環境に合わせると、PICマイコンの選択肢はほぼPIC16F886に絞られてしまいます。
条件として、1.秋月のライターで書き込み出来ること。2.機能としてI2CとUART内蔵。3.プログラム容量8k以上。他に電源3.3V〜5V対応という条件で選定 しています。
 ネックになるのが1.の制約でほぼ絞られてしまいますが、PICKitならもっと選択肢が増えますが、PICKitは最近入手困難で、次期SDR#4の開発にはdsPicを使いたいのですが ライターの入手目処が立ちません。PicKit4はすでに10k以上に値上がりしています。

プログラムの説明
 プログラムの詳細について。出来るだけコメントを挿入して後から見ても判り易くするよう心がけます。多くは参考図書(PIC16F1活用ガイド)の応用例 を参考にしています。一部SDR#1、SDR#2のコードが残っている箇所もありますが参考になれば。
MAIN部は、最初にローカル変数の(メインルーチン内のみで使用する変数)定義と初期設定。
Si5351の周波数設定、出力周波数とVCO周波数を引数として、Si5351 VCO部パラメーターP1〜P3を計算し、得られたパラメーターと書き込みスタートアドレスを引き数として レジスターに書き込みます。
 次にSi5351のシンセ部パラメーターを計算し、レジスターに書き込みます。周波数固定の場合は、P1-P3も固定なので手計算した結果を書きこむことで、プログラム容量を押さえています。
 Si5351の設定は比較的汎用性があり、応用が効くと思います。
   MAINの繰り返し(while部)では、カウンターゲートが閉じている間に周波数データーを取り込みT0時点の周波数とT1時点の周波数を比較し一定以上の差(ドリフト)がある場合叉は、 一定回数毎に、データ―をRS232経由で送出します。データーを間引くことでシリアル通信が煩雑化するのを押さえています。
 シリアル通信中に割り込みが入ると、誤動作原因になるため、シリアル通信回数低減とシリアル通信中はPTT割り込みを禁止します。  他に、PCからのコマンドのフラグをみて、アナログVFO/Si5351 VFO選択、ATTやPRE AMP ON/OFF等の処理をします。
割り込み処理では、PTTやPC画面のコントロールボタン操作のコマンド受信(アルファベット1文字)を受け、TXRX切り替え、周波数メモリーの呼び出し書き込みなどの制御の他、Si5351のチューニングを 行います。
 チューニングの方法は、PC画面のスペクトラム表示で信号の位置をマウスでクリックするとその位置の座標をPIC側に数値データ―を送り、PIC側では座標データを周波数換算し Si5351のデーターとしています。CWではPC画面スペクトラムが一本の線状なのでマウスでダイレクトにチューニング出来ますが、SSBの場合はセンター周波数はスペクトラムだけでは 合わせ切れないので、クリック後微調製が必要です。
 Si5351でのVFO周波数変更時はノイズが入るので250ms間ミュートしています。この為、DDSの様な連続して可変する使い方には不向きですが、マウスで指定した周波数にジャンプするような用途には 良いICです。
 叉座標データーはスペクトラム表示のピクセル数と周波数表示範囲から計算しているので、あまり細かな分解能が設定できませんが、画面1ピクセル当たり62Hzなので実用上問題無い感じです。
PIC初期設定、各ポートの設定、UARTの設定、割り込み許可設定等をします。
TMR1,2初期設定、周波数カウンターで使用するTMR1.2の設定で、クロックに12.8MHzを使用し、ゲート時間を100mSとします。
RS232送信、PICのTXレジスターに送信データー(1文字分)をセットすれば、後はすべて、PICでやってくれます。
I2Cコマンド送信、Si5351やmcp4018の制御用I2Cに関する部分は参考図書をほぼコピーしています。
Si5351の設定は、初期設定とPLL部パラメーター計算、シンセ部のパラメーター計算、およびその結果をレジスタに書き込みます。
Freq Counterは、8bitカウンターを3つ並べてそれぞれのカウント値をつなげて周波数とします。この部分も汎用性があり、応用が効きます。
Bin to 10進変換は、周波数カウンターで得られたバイナリーデーターを、Si5351の周波数データーやシリアルデーターとして便利なように10進変換します。
Fdata to シリアル変換は、10進数字データーをASCII変換します。変換データーは必要分配列にセットし、小数点やMHz等の文字列もセットしてRS232のTXレジスターに 書き込めばOKです
 プログラムソースリストは、デバック用ルーチンや使っていない部分のコメントなど残っていますが、参考まで。ソースリストはtxt文になっています。

プログラムソースリスト参照

使用してみて
 CW受信時は、ほぼマウスのみでチューニングすることに慣れてきました。一方7MHzのSSBは多くの局が3kHzステップで運用しているので、3kHzステップのUP/DWNがあれば、 アナログVFOは使わなくなるかもしれません。SDR#4の課題とします。
 7.140MHz〜7.195MHz付近で時々QRVしていますので、聞こえていましたらレポートをお願いします。

Top Menu