アンテナアナライザーの製作(SWRカーブの表示)
LCDコントロール用のPIC24FJ64GA004のROM容量が93%まで詰まってきましたが、操作性やデザイン性は後回しにして、とにかく、周波数対SWRのグラフが描けるまでやってみる事にしました。
今までの実験中に気になった事項として、周波数表示のチラツキがあります。 デジタルカウンターの場合、一番最下位の桁は、常にチラつくのが普通です。 この対策の為、測定した周波数の5回分の平均値を表示させていますが、それでも、チラチラはかなり気になります。 そこで、周波数が1MHz以上の場合、100Hzの桁を表示させないようにする事にしました。 この対策でも100Hzの桁の0と9の堺では、1KHzの桁がチラツキますが、その頻度はかなり低くなりますので、結構精度が上がったように見えます。
周波数の調整は1800度(5回)回転の可変抵抗器で行っていますが、18MHzや24MHzの周波数調整が、かなりクリチカルです。 いままで、110KHzから64MHzまでを4バンドでカバーしていましたが、各バンドでのバリキャップ電圧の上限下限を調整して、6バンドに分割し直し、最高周波数も59MHzまでとしました。 この変更で、周波数可変抵抗器のホット側、GND側に直列に入る抵抗値を切り替える必要が生じ、i/oが不足しますので、SWRグラフ表示用に用意しておいたOPTION SWはADポートへ接続し、キーが押された時のADポートのDC電圧を測定して、どのキーが押されたかを判断する事にしました。 この変更により、i/oポートが2本空きましたので、これをバンド拡張の制御信号としました。
しかし、このADポートの電圧で、キーの判定を行うとき、ADポートが急に0Vになると、UARTのTX端子が、時々、Lに落ちるというトラブルが発生しました。 この場合、当然UARTが正しく動作しないだけでなく、プログラムも暴走します。 原因が判らず、1週間くらい悩みましたが、ADポートをいきなり0Vにするのではなく、最少電圧として、0.3Vくらいにしてやると、全く問題なく動作します。
上の画像は、左が、ADポートをタクトSWでいきなり0Vにした時のAD入力ポートの波形です。 右は、タクトSWにシリーズに1.6KΩをいれたときの波形です。 いきなりAD端子をGNDへショートすると、リンギングが発生し、瞬間的ですが、ADポートが最大で1.8Vくらいマイナス方向へ振られます。 これでラッチアップを起こし、マイコンが暴走する原因となっていました。
LCD上に周波数対SWR特性のグラフを描かせようとすると、周波数を一定間隔で連続可変する必要がありますが、このアナライザーの場合、14VのDC電圧を10KΩの可変抵抗器で分割して、バリキャップに加え、発振周波数を可変させるものですから、自動SWEEPという機能は使えません。 SWEEPはハンド操作になりますので、バリキャップ電圧ラインに大きな時定数を持たせ、不規則なハンドによる周波数可変が有っても、バリキャップ電圧が滑らかに変化するような機能を追加しました。 ただし、この機能がONの場合、周波数可変つまみの変化に周波数が即追従しませんので、通常はOFF状態にしてあります。
グラフィックモードになったら、最初に中心周波数を決めます。この周波数は有効桁数3ケタの数値に丸め込みます。
1.8262MHz は 1.83MHz へ
14.2358MHz は14.2MHz へ
などのように設定しておきます。 次にこの中心周波数に対して、+/-何KHzもしくは+/-何MHzかの帯域幅を設定し、その範囲の周波数帯に限定して周波数対SWRのグラフをプロットさせます。
1,2,4,6,10,20,40,60
を基準とした予約数値で、グラフの周波数目盛となる縦線の位置が変わらないようにしました。 LWのときは最小幅+/-1KHz、最大幅+/-60KHzとなり、最高周波数の50MHzバンドでは、最小幅+/-100KHz、最大幅+/-6MHzとなります。 この幅はUP/DOWNキーで変更できます。
このように設定されたバンド幅で、周波数調整つまみをゆっくり回して、周波数が設定された範囲に入ったら、LCD画面上にSWRがプロットされます。
左の写真は、なんとか当初の狙い通り、SWRのプロットが出来るようになりましたので、私の7MHz用フルサイズ垂直DPのSWR特性をシャックの中で表示させたものです。
市販のアンテナアナライザーでスポット周波数をチェックし比較しても、ほとんど誤差なくグラフに表示されていますので、結構精度も出ているようです。
プロットされる周波数の分解能は設定されたバンド幅を222で割り算した周波数単位となります。 上のグラフの例では、バンド幅が400KHzですから400/222=約1.8KHzが最少分解能となります。 最少分解能が100Hzより小さくなると、グラフは線にならずドット表示になります。
また、周波数を可変(スィープ)する速度が速すぎても、グラフは線にならずドットになりますが、これは、周波数カウンターが周波数を計測する時間間隔と、LCD上にドットをプロットする時間間隔によります。 このアナライザーの場合、コントロールマイコンのメインルーチンが1周するのに、約25msecかかっておりますので、周波数カウントの周期も25msec間隔となります。 ところが、LCD表示マイコンのメインルーチンが約42msecで1周しており、実際にグラフで表示されるのは、この42msec間隔となります。 ドット表示にしない為には、周波数変化スピードは42msecの間に、前述の最少分解能周波数以下である必要が有ります。 この条件を満足する為に、バリキャップ電圧回路に時定数回路を設け、電圧が急変しないようにします。 しかし、バリキャップ電圧の時定数を大きくし過ぎると、周波数つまみの動きと周波数変化の追従性の関係が悪化し、操作しにくくなりますので、実際に使いながら、時定数は決める事になります。 最終決定は、全て完成してから、ハードの定数をいじる事にします。
そして、ここまでのプログラム実装でROM容量が98%となりましたので、気が付いたバグや、操作性の改善、グラフ表示部分の見栄えなど、手を付けたくても不可となりました。
TFT LCDによる表示の詳細はこちらを参照下さい。
今後、マイコンのROMを128K品に変えて、完成度を上げる予定です。
後日、128K品に替えましたが、ハードやソフトの問題でなかなか思うように進行しません。 問題の様子はこちらに有ります。