非職業的技師の覚え書き

JK1EJPの技術的検討事項を中心に記録を残します。

AFP-FSK Transceiver(10)ソフトウェアの変更

AFP-FSK Transceiverの利点の1つとして、ソフトウェアが公開されている点を挙げられます。学びの機会を提供してくれるとともに、国内仕様に合わせて変更することが出来ます。

ソフトウェアの構成

ソースコードの要所要所を深堀しただけですが、おおよそ以下の構成になっていると推定しています。

Embedded software configuration of ATMEGA328P for AFP-FSK Transceiver.

基本処理

セットアップとループの2段構成は、Arduinoでお馴染みのマイコン組込みソフトウェアの基本構成です。

セットアップでは割込み処理他のファームウェアの設定を行っています。ここはATMEGA328Pのデータシートを座右に置いて首ったけで調べる他ありません。ロジック回路と結びついた1-bit毎に機能上の意味があるため、初見での理解は大変です。

ループ処理では、

  1. 押しボタンスイッチUI(User Interface)のポーリング処理、
  2. 送信試験で活用している強制送信ピンの監視、
  3. AFP-FSK処理

を反復実行しています。

割込み処理

ループ処理の他に重要な役割を果たしているのが割込み処理(ISR)です。AFP-FSK Transceiverは2つの割込みサービスルーチンを利用しています。1つ目は(a)設定時間(1msec)のタイマー割込み処理、2つ目は(b)アナログコンパレータの割込み処理です。後者も16-bitタイマーユニットと密接に連携しています。

(a)設定時間タイマー割込み処理は、5桁の7セグメントLEDを順番に点灯させるダイナミック・ドライブ制御を行っています。ATMEGA328Pからの信号線を節約する処置です。他に、押しボタンスイッチの状態読み込みを実施しています。

(b)アナログコンパレータの割込み処理は、AFP-FSK方式を実現する根幹であり、AG6NS Kazu OMの素晴らしいアイディアが結実している箇所でもあります。AFP-FSK TransceiverはDigital Transceiverですが、SDRのようなサンプリング信号処理は行っていません。

ATMEGA328Pのデータシートから関連する内部ユニットを抜き出し、A2ピンから入力されるAUDIO信号と内部ユニットとの接続関係を下図に示します。

Analog comparator and 16-bit timer in the internal unit of the ATMEGA328P that measures the period of the AUDIO signal with an interrupt service routine.

Analog Comparatorによって、FT8等のAUDIO信号はBandgap Reference(シリコンのバンドギャップエネルギーに起因する基準電圧)と比較されます。ATMEGA328PのBandgap Referenceは1.1±0.1Vです。AUDIO信号は、AFP-FSK Transceiverの入力回路でバイアス1.35VのAC信号に変換されるため、ノイズしきい値は250mVになります。振幅250mV以上の反復再現性の高い信号が入力されれば、AFP-FSK処理を施されて送信されます。「反復再現性」は半周期計測値の突発変動を除去することで確保されているようです。半周期計測値の毎回25%更新の移動平均値に対して、31%以下の計測値はリップルと判定され無視されます。

Analog Comparatorは何もしなければ1周期毎に割込みを発生しますが、割込み処理ルーチンの最後にトリガーエッジの上下方向を毎回反転させています。これにより、AUDIO信号がBandgap Referenceを横断する時の方向、すなわち微分検出符号を反転させ、AUDIO信号波形の上側と下側で約半周期毎の計測を行っています。詳細は読み込めていませんが、AUDIO信号検出の信頼性を上げる処置ではないかと推測しています。

ソフトウェアの変更

以下の5項目の変更を加えました。

List of software changes.

1.バンド選択関数の調整

AFP-FSK TransceiverはBand Moduleに搭載された抵抗R8をバンドIDとして読み取り、自動的にバンドを切り換えます。Mainボードに搭載されたR5(10kΩ)とR8による電源電圧の分圧値を10-bitのADCで読み取り、バンド選択関数に書かれたしきい値と比較して切換えます。正しく動作すれば、間違った周波数の送信電力をLPFに注入することは避けられます。

各Band Moduleの抵抗R8とバンド切換しきい値を調べると、下記左表(a)のように設計されていました。下記表は国内で許可されるバンドのみ示しています。R8の公差は抵抗値の許容ばらつきを示します。5%精度の抵抗を使用すれば問題ないことが分かりました。

Band Module resistor R8 value and band threshold setting.

抵抗の精度をさらに緩和するために、1点だけ公差が厳しい10mバンドの上限しきい値を上記右表(b)に示すように800から805に調整しました。これにより、抵抗値(33kΩ)の許容公差を8.2%から11.4%に緩め、10%精度の抵抗でも問題がないように揃えました。

2.バンド仕様の設定変更

オフバンド防止のための上下限を設定するget_band()関数があり、米国仕様と思われるバンドとその上下限が設定されていました。国内で許可されないバンド設定を削除するとともに、許可されるバンドについてもその上下限を国内仕様に変更しました。

3.VFOコードの変更

AFP-FSK Transceiverには押しボタンスイッチによって搬送波周波数をUp/Down調整するVFO機能が搭載されています。その関数の中で前記のバンド上下限と搬送波周波数を比較して「out-of-band」フラグを設定する仕掛けになっていました。

しかしながら、搬送波周波数が許可バンド内であってもオーディオ周波数を加算したFSK周波数は逸脱する可能性が残ります。そこで、設定した搬送波周波数にオーディオ周波数の上限値を加えた値をバンド上限仕様と比較して「out-of-band」フラグを設定するように改めました。

4.強制送信コードの変更

PCBのテストピンによって搬送波周波数を強制的に送信するテスト機能ですが、「out-of-band」フラグを参照していませんでした。VFO関数によって「out-of-band」フラグが設定されていたら、送信を許可しないように改めました。

5.AFP-FSK送信コードの変更

FSK処理後の周波数をPLLシンセサイザーにリアルタイムに設定して送信する機能ですが、上記4と同様に「out-of-band」フラグを参照していませんでした。VFO関数によって「out-of-band」フラグが設定されていたら、送信を許可しないように改めました。

ソフトウェアの書き込み

手順

コンパクト設計のAFP-FSK Transceiverには、ATMEGA328Pへのソフトウェア書き込みピンが準備されていないため、以下の手順が必要になります。

  1. VFOボードをMainボードから取り外す。
  2. 両面実装のVFOボードに作業用のスペーサを逆向きに取り付ける。
  3. ATMEGA328Pをソケットから引き抜く。
  4. 外部のライターでATMEGA328Pに修正コードを書き込む。
  5. ATMEGA328Pをソケットに挿し戻す。
  6. VFOボードから作業用のスペーサを取り外す。
  7. VFOボードをMainボードに取り付ける。

大変な手間です。反復デバックが必要になった場合は、空中配線で書き込みピンを準備したくなるところです。

書き込み

動作確認が取れた現行のATMEGA328Pは温存し、変更版ソフトウェアの書き込み用に新規のATMEGA328Pを準備しました。(1)Boot Loader書き込み済みのATMEGA328Pと、念のため(2)素のATMEGA328Pも準備しました。これが活きました。

書き込みはAruduino UnoにAVR ISP Shieldを取り付け、「Arduino as ISP」で行いました。

ATMEGA328P software writing system with AVR ISP shield on top of Aruduino Uno.

(1)Boot Loader書き込み済みのATMEGA328Pには、なぜか書き込みができませんでした。Boot Loaderの再書き込みにも失敗しました。直前にリセットを押したり、AVR ISP Shieldの導通を確認したりしながら、5回ぐらい試したところで断念しました。手順のケアレスミスではなく、根本的な原因があるようです。

そこで、(2)素のATMEGA328Pに切り換えたところ、Boot Loaderの書き込み、それに続く変更版ソフトウェアの書き込みと簡単に進んで、1回で呆気なく完了しました。

(1)と(2)の書き込み時のログ出力を下記に示します。書き込みシーケンスの詳細は分かっていませんが、AVR PART(AVRマイコンの"devicecode" )を確認に行って失敗しているように見えます。

Excerpts from avrdude's log during a write process.

変更版の試験

40mディフォルト周波数の送信試験

AFP-FSK Transceiverのsetupシーケンスによって、7.074MHzが40m FT8のディフォルト周波数としてVFOに設定されました。前回と同じで問題ありません。

強制送信ピンをGNDに落としてDummy Loadに送信し、スペクトルを観察しました。

The modified version of the software transmitted a 7.073248 MHz radio wave in response to the 7.074000 MHz VFO indication, just as it did before the change.

変更版ソフトウェアも変更前と同じく、7.074000MHzのVFO表示に対して7.073248MHzの電波を送信しました。PLLシンセサイザの外部発振器の補正値をソースコード上で調整しなかったため、安定なTCXOによって変更前と同じ結果が再現されました。ソフトウェアの変更が終了したら、キャリブレーション機能によってEEPROMに補正値を書き込む予定です。

オフバンド送信抑制機能の試験

更新版で追加したオフバンド送信抑制機能をテストしました。

オフバンド6,999,000Hzと、40mバンド下端7,000,000HzのVFO設定で、Dummy Loadに対して強制送信テストを行いました。

Forced transmit test with VFO settings at 6,999,000 Hz off-band and 7,000,000 Hz at the lower limit of the 40m band.

オフバンド6,999,000Hzでは送信が抑制され、7,000,000Hzでは送信が許可されました。オフバンド抑制機能が正常に機能していることが確認されました。

なお、FSKモード運用時にはオーディオ周波数下限値(200Hz -5%)のチェックも行われ、下限値より低いFSK周波数は送信が抑制されるため、バンド下端の7,000,000Hz上で送信されることはありません。

次に、40mバンド上端付近7,195,000Hzと7,196,000HzのVFO設定で、Dummy Loadに対して強制送信テストを行いました。

Forced transmit test with VFO settings at 7,195,000 Hz and 7,196,000 Hz near the upper limit of the 40m band.

AFP-FSK TransceiverのFSKモードでは、最大上限値(4,000Hz +5%)のオーディオ周波数がVFO設定値に加算され得ます。7,195,000 +4,2000Hzはオンバンドですが、7,196,000 +4,2000Hzはオフバンドになります。

VFO設定値7,195,000Hzでは送信が許可され、オフバンドの可能性がある7,196,000Hzでは送信が抑制されました。オフバンド抑制機能が正常に機能していることが確認されました。