アンテナアナライザーの製作(コントローラー)
RFブリッジのセンサー回路と広帯域RF発振器がほぼ完成したので、次は、これらのアナログ回路の発振周波数を計測する周波数カウンター、SWRやインピーダンスの計算の基になる、センサー回路からのDC電圧計測機能、そしてこれらのデータから、SWRやZ,R,Xを計算する機能を持ったコントロール回路の製作に入りました。
このコントロール機能はLCDドライバーとは別の品種となるPIC24FV32KA302という16bitマイコンで構成します。このマイコンチップを選んだのは、内臓されているADが12bit品であるからでした。 過去、PIC16F1939で、予備検討した時のADは10bit ADでしたが、分解能にいまひとつ不満が有りました。 例えば、リアクタンスを表示するときの最少分解能が4Ωくらいしかなく、表示される数値は0,4,8・・・のように変化するものでした。 今回12bitのADを、仕様書通りに使いこなせば、0,1,2,3・・・のように変化する数値が得られると考えます。 ただし、10bitのときでも、なかなか、仕様書通りの性能が出ませんでした。それは、アナログの値がそこまで安定しなかったり、ノイズで差が出なかったりが原因で、これらの最大の原因はDC/DCによる電源のノイズでした。 今回、2回路のDC/DCを使いますので、もっと条件は不利になりますが、わざわざ12bitのADを使った価値が出せるかトライする事にします。
上の写真はコントロールマイコンからUART経由でデータを受信して、LCD上に表示したショットとLCD基板の裏側に配置したふたつのPICマイコンです。 完成したあかつきには、ケースに入れ、操作が出来るように操作キーもLCDの隣に実装してあります。 一番下の赤のキーが電源でその上の、2個の青キーはバンドのUPとDOWNです。さらに緑の3個のキーがありますが、この時点では、何をするキーか決めておりませんが、マイコンのi/oへの配線だけはやってあります。 通信は38.4Kボーの一方通行です。 画面に示すLCD表示に関しては、ほぼプログラムの実装を終えています。 今後、周波数対SWRのグラフを描かせるためのアルゴリズムを検討し、その内容に従い、LCD表示のデザインをする事になりますが、その前に、アンテナアナライザーの基本機能として、周波数、SWR,インピーダンス(Z)の表示が出来るようにします。
まず、周波数表示ですが、今回採用したPIC24FV32KAのタイマーは他のPIC24FJシリーズと同じような構成になっていますが、設定レジスターが微妙に違うようです。 今回の周波数カウント最大値は100Hz単位を表示する為、 640,000を超えますので、 20bit以上のカウンターを必要とします。 TIMER2とTIMER3を連結して32bitカウンターがレジスターの設定のみで出来ますが、このタイマーは同期タイプで、外部カウントできる周波数上限は10数MHz止まりですので、今回は使う事が出来ません。 外部クロックでカウント可能な非同期カウンターはTIMER1の16bitしかありませんので、これにソフトで作った16bitカウンターを連結して32bitカウンターとしました。 TIMER1にプリセット値として64000をセットし、カウンターが64000になったらT1IFが1になりますので、これが1になる度に、ソフトカウンターをインクリメントするという手法で100MHzくらいまでは動作できるカウンターに仕上がりました。 T1IFフラグは割込み設定やT1IEの設定に関係なく立ちますので、カウンターモードに入ったら、全ての割込みを禁止します。 TIMER1のプリセット値を65536すなわち0000にしたら割込みフラグが立ちません。さらに、TIMER2で20msecのゲート時間を作った後、いくつかのNOP命令でこのゲート時間を微調整しますが、この微調整の時間内にTIMER1がキャリーオーバーしないように小さな値にしてあります。
周波数カウンターの校正は、ゲート時間を正しく20msecに調整するのではなく、正確な基準周波数を入力して、その基準周波数と同じ数値になるようにNOP命令の数を調整し、調整しきれない時は、水晶発振周波数をトリーマーで微調整します。 正確な基準周波数は10.00000MHzのWWVHをゼロビートで受信できるようにトランシーバーを調整しておき、受信周波数を10.12000MHzに設定した後、CW送信モードにして、この信号を入力したとき、カウンターの数値が10.1200になるようにトリーマーを調整するだけです。 もちろん、この調整の前に、受信周波数と、送信周波数にずれが無い事を、もう1台の受信機で確かめておきます。
次は、12bit ADの取り込みです。 インターネット上から、PIC24FJ用のADサンプルプログラムを入手し、4チャンネルのADが使えるようにプログラムしたのに、読み込んだデータはどうも10bitのようです。PIC24FV32のデータシートには12bit、10bit選択のレジスタービットは無効と書かれていますので、何もせずとも、12bit ADで動作すると思ったのですが、そうではないようです。ためしに、この12bit/10bitの選択ビットに1をセットしたら、12bit ADの動作となりました。このデータシートは英文も、日本文もこの部分は間違っているようです。
ADのデータを読めるようになりましたので、その数値を加工なしで、ベクトル計算し、R,X,Z,SWRを求め、LCD上に表示させる事にしました。
上の写真は、50Ωのダミー抵抗を接続した状態で、ADのデータを補正なしで計算させたものです。 本来はZもRも50Ωとなり、SWRは1.0にならなければなりませんが、補正が出来ていませんので、R=36、X=15と表示されています。 このRとXの時の計算されたSWRは1.6ですから、SWRの表示は正しく表示されている事になります。
このRとXが50と0にならない最大の理由は検波ダイオードの非直線の性です。 これを正しく補正してやると、アナライザーは期待した通りの数値を表示する事になります。
ここで、この製作の中でやろうとしているベクトル計算のアルゴリズムを紹介する事にします。 この方式はアンテナのインピーダンスが50Ω近辺なら、かなり精度が出ますが、SWRが2を超える当たりから誤差が大きくなります。 しかし、私たちがアンテナを調整する場合、SWR2以下の数値はそれなりに精度が出て欲しいですが、SWR2以上の場合、例えばSWR3とSWR4が逆転しない程度しか要求されません。
上のJPGが測定原理を示したものです。 クリックしたら拡大します。 そして、下の黄色に塗った部分の式がこの原理から算出された、各データを得る為の式です。
これらの計算を32bit浮動小数点型式で計算する事により、アンテナアナライザーとして表示したい数値が得られます。
ただし、単純に、この計算式をC言語で書いても、プログラムはすぐに暴走します。原因は、0で割り算したり、負の値を平方根した事によります。アンテナ端子に何もつながないときや、ショートした時の例外処理を入れておかないと、たちまちエラーになりますので、この例外処理は実験しながら、挿入位置を吟味する必要があります。
また、周波数やAD値のチラツキが目立ちます。特に、Zが100Ωを超えた当たりからのAD値のチラツキは激しく、メーターの指針も安定せずに、フラフラ揺れてしまいます。メカニカルのアナログメーターなら、安定して指示しますが、デジタル駆動ではそうはいかないみたいです。
とりあえず、アンテナアナライザーの基本動作は出来るようになりましたので、AD値の補正方法を確立させ、校正プログラムを組み込むと、SWRのグラフィック以外、完成となります。SWRのグラフィック表示は、周波数のSWEEPをハンドで行う必要があり、確定したアルゴリズムは、まだ有りません。
かねてより考えていた、ダイオードで検波したDC電圧から、元のRF電圧を換算する計算式をプログラムの中に仕込んでみました。 50Ωのデータで校正してありますので、左の写真のごとく、ちゃんと50Ωのダミー抵抗を正しく測定して表示しました。しかし、校正していない100Ωのダミー抵抗では、R=87,X=36と表示し誤差が出ます。 今後この誤差を詰めていきます。 まだ確実なアイデアではありませんが、試行錯誤しながら解決策をみつけようと、このアンテナアナライザー製作の企画を思いついた次第です。 そして、やっと、その実験道具が出そろいましたので、ああでもない、こうでもないと、いつ終わるか、いつ投げ出すか、結論の見えない製作記事が続く事になります。
その後の検討で、ここで紹介したベクトル計算によるRやX、SWRの算出方法は現実的でない事が判ってきました。 その内容は次の記事で紹介しております。