2015年7月11日 (土)

アンテナアナライザーの製作(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くらいにしてやると、全く問題なく動作します。

Aa50ad0v

Aa50ad1v

上の画像は、左が、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のグラフをプロットさせます。 

Aa50swrgraph設定される帯域幅は任意ではなく

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品に替えましたが、ハードやソフトの問題でなかなか思うように進行しません。 問題の様子はこちらに有ります。

アンテナアナライザーの製作(全機能組み込み) に続く。

INDEXに戻る

2015年6月25日 (木)

PIC24FV32KシリーズのEEPROM読み書き

<カテゴリー:PICマイコン

アンテナアナライザーのコントローラーとして、PIC24FV32KA302というマイコンを使っていますが、このマイコンに内臓されたEEPROMは、8bit系のマイコンとは異なり、プログラムメモリーのアドレス上に配置されています。 従い、EEPROMの書き込み読み出し方法は、従来の8bit系とは異なっています。

このEEPROMに書き込んだり、読み込む為の、サンプルプログラムはデータシートの中に出てくるのですが、イマイチ良く判りません。WEB上でサンプルを探しておりましたら、Microchipのホームページ内のFAQのところにひな形のプログラムがありました。 これをコピペしたら、エラーなくコンパイルされ、ちゃんと読み書きできました。

日本語ページでは、なかなか見つける事が出来ませんでしたので、以下そのソースを紹介します。

//データEEPROMへの読み書き

unsigned int eeRead(unsigned int address) {

  while(NVMCONbits.WR); // wait for any last write to complete

  TBLPAG = 0x7f; // eprom is a t 0x7ffe00

  return __builtin_tblrdl(0xFE00+address);

  }

 void eeWrite(unsigned int address, unsigned int data) {

   while(NVMCONbits.WR); // wait for last write to complete

   NVMCON = 0x4058; // Set up NVMCON to erase one word of data EEPROM

   TBLPAG = 0x7f; // eprom is a t 0x7ffe00

   __builtin_tblwtl(0xFE00+address, 0xffff);

   asm volatile ("disi #5");

    __builtin_write_NVM(); // Issue Unlock Sequence & Start Write Cycle

   while(NVMCONbits.WR); // wait for errase to complete

   NVMCON = 0x4004; // Set up NVMCON to write one word of data EEPROM

   __builtin_tblwtl(0xFE00+address, data); // Write EEPROM data to write latch

   asm volatile ("disi #5");

    __builtin_write_NVM();

   }

書き込みは下の1行です。

eeWrite(address,data);

addressがEEPROM内の相対アドレスで0から254までの偶数を指定します。

dataは書き込もうとするワードデータ(16bit)です。 書き込みは16bit単位で行われますので、8bit単位で行いたい時は、書き込む前に、ふたつの8bitデータを連結するか、空の8bit(例えば0x00)と書き込みたいデータを連結したワードデータを用意します。

読み出しは下の1行です。

DATA=eeRead(address);

DATAに16bitデータが格納されます。

PIC24FJ64GAシリーズのフラッシュメモリーに書きこむ例はこちらにあります。

INDEXに戻る

2015年6月24日 (水)

アンテナアナライザーの製作(SWR,R,Xの計算)

<カテゴリ:アンテナアナライザー>

50Ωダミー抵抗の場合、130KHzから64MHzまでSWR=1.0、R=50+/-1、X=0+/-0くらいの表示で収まっていますが、50Ω以外の抵抗では、大きく外れます。表示の数値が逆転する事はありませんが、曲りなりにも、デジタル表示付ですので、せめてSWR3以下くらいは、RもXもそこそこ表示できるように検討する事にしました。

今回、検波ダイオードに汎用品を使いましたので、当初から気にしていたRF電圧対検波DC電圧のデータを取る事にしました。

Aa50diode

上のグラフは、左が今回採用したRB751Sによる検波特性です。右は、SHF用ダイオードによる検波特性です。

グラフのX方向の目盛はADが出力したリニアデータで、Y方向は最大電圧を10000と定義したRF電圧です。 この二つのダイオードの大きな違いは、RF電圧が小さいとき、急激に直線性が悪化する度合いです。 RF電圧が小さい状態はインピーダンスの計測には影響が少ないですが、SWRの計測では、大きな問題になります。 一番知りたい、SWR1.5以下に大きな誤差が含まれます。 例え補正したとしても、その補正は相当クリチカルですから、安定して計測するには不向きです。 50Ωで校正して、100Ωで大きく狂うのは、このダイオードのカーブの性です。

やはり、アンテナアナライザーのセンサーとして、ダイオードを選定する場合、UHFやSHF用として作られたものを使わないと精度が落ちる事が判りました。 破壊強度は落ちますが、やむなくHSC285に変更する事にしました。

ルネサスのHSC285は個別販売していない上、生産中止品となっています。 現在も生産継続中のRFショットキーバリアダイオードで、アンテナアナライザーに使えそうな物としては下記3点が見つかっています。

RB861Y(ローム製):HSC285とほぼ同等。RSでバラ売り有り。 (Vfが0.1Vのとき順方向電流が0.1mAくらい)ただし、ワンパッケージ2個入りです。

HSMS-2850-BLKG (Avago Technologies製):HSC285とほぼ同等。RSでバラ売り有り。 こちらはワンパッケージ1個入りですが、外形のコンパチ性はありません。

JDH2S02SC (東芝製):Vfが0.1Vの時の順方向電流がHSC285の半分くらい。外形がHSC285とほぼ同じで、基板上での交換が簡単です。 ただし、バラ売りなし。 このダイオードの場合、アナログメーターだけなら我慢できますが、RやXをデジタル表示したい場合、使いたく有りません。

これらの高感度検波ダイオードは逆方向電流の温度依存性が他のダイオードより、きわめて大きいと言う欠点がありますので、そこは回路技術でカバー必要です。 また、逆耐電圧も数ボルトしかありませんので、普通のSWR計には使用出来ません。

前回の記事で、ベクトル計算による、R,X,SWRの算出方法を紹介しましたが、実験していくうちに、ダイオードの非直線性が、思った以上に大きく影響する事も判ってきました。 アンテナアナライザーで一番重要なデータは周波数とSWRです。  周波数はクリスタル制御のタイムゲートで測定しますので、そこそこの精度がでます。   問題はSWRのデータがいかに誤差が少ないかにかかっております。 ベクトル計算方式は、最初にダイオードの影響を補正しながらRF電圧を換算し、このRF電圧からRやXを求めて、さらに、このRとXから反射係数を求め、そして、反射係数からSWRを計算します。 VzとVsからそれぞれのRF電圧を補正しながら求めますので、この補正の時に大きな誤差が含まれます。 この誤差を含んだふたつのデータをベースにRやXを計算する事になります。 すなわち、誤差を2乗したようなものです。 一方、VzやVsからインピーダンスやSWRを直接換算する事もできます。  この場合も補正しながら換算する事になりますが、換算時のSWRやZの誤差は1回分だけとなります。  その変わり、RやXはこのふたつのデータから計算されますので、RやXには誤差の2乗が含まれる事になります。 しかし、RやXは 「アンテナアナライザーとインピーダンス」 の記事で取り上げたように、アンテナアナライザーとしては重要ではないので、VzやVsから直接ZやSWRを求める方がベターと思われます。 

もうひとつのADデータであるVoはそのレベルが大きく、ダイオードの非直線領域外での動作ですので、あまり影響は有りません。 ベクトル計算方法は理論的に正しくても、実際の測定器にはそぐわないのかも知れません。 

以上の経過からベクトル計算方式は諦めて、VzとVsからいきなりインピーダンスとSWRに換算する方式へ変更しました。 換算したZとSWRから以下の計算式でRとXを求めます。

Swrrxz

この計算式でRとXを算出し、50Ωダミー抵抗で校正を行い、3.5MHzバンドで100Ωダミー抵抗を装着すると、R=99、X=8、SWR=2.0と表示します。本来のXは0ではなく2くらいになるのですが、それでもかなりずれて表示している事になります。 まだ100Ωの時は校正されていません。 今後、校正プログラムが組み込まれたら、少しは改善するかも知れません。

校正プログラムはマイコン内部のEEPROMを使います。 このプログラム作成の前に、EEPROMの使い方を勉強する事になりました。 これが難解でやっとサンプルを見つけて、EEPROMの読み書きは出来るようになりました。

このEEPROMにラストバンドを書き込み、電源ON時に、このデータを読み込む事により、電源をOFFして、次に再度、ONしたとき、周波数はドリフト成分以外変化なしになります。 単3アルカリ電池3個で、消費電流は230mAくらいです。 単純計算では、連続8時間くらいはもちますが、実際の使用状態では、電池の消耗を気にして、ショッチュウPOWER-OFFしますので、ラストバンドメモリーは必須機能となります。

Aa50c100_2

このラストバンドメモリーの実装で、EEPROMの使い方が判りましたので、校正プログラムを仕込む事にしました。 コントロールマイコンからLCDマイコンへは一方通行の通信で、電源ON直後にLCD側が通信を受け入れられる状態かどうかが判らず、目見当で遅延時間を取り、データを送信するという、かなり適当な方法で、ふたつのマイコンのタイミングをとり、やっと、校正モード状態でのデータ推移が表示できるようになりました。

校正は3.5MHz付近の周波数で、50、100, 0Ωのダミー抵抗をつないだ状態とオープン状態の時の、それぞれのVZとVS及びVO(Osc電圧)をEEPROMに記録させます。記録が正しく実行されたかを確かめる為、LCD上にその記憶したデータが表示されるようにしています。 記憶スイッチ(今回はWIDTHキー)を押すたびにデータが書き換えられた事を確認できますので、安心できます。

このデータから、ZとSWRの校正を行います。校正ポイントは50Ωと100Ωになりますので、少なくともZ=50ΩとSWR=1.0、それにZ=100ΩとSWR=2.0は校正されます。 ただし、RやXの校正は行いませんので、50Ω以外の抵抗ではXがゼロにはなりません。 上の写真はたまたま、X=2を表示していますが、実際は0から7くらいまでばらつきます。 しかし、アンテナを調整する場合、この程度で十分ですので、これで良しとしました。

校正の仕方は実に簡単です。例えば、VZ50の下に1528という数字が表示されていますが、これは、50Ωダミー抵抗のとき、VZ(インピーダンスに比例したADの出力値)が1528であったという事です。 従い、ADが1528を出力したらZ=50Ωと定義します。また、VS100の下に0954という数値がありますが、これは100Ω時のブリッジ不平衡電圧をADが出力した値(VS)です。従い、VSが0954の時SWR2.0と定義します。 VS50の下の数値はゼロですから、ADの出力がゼロの場合、SWR1.0と定義します。 これで校正終了です。

50Ω、100Ω以外のインピーダンスの場合、0Ωから470Ωまでの16種類のダミー抵抗で実測したSWRとインピーダンスデータの表を作成し、このデータを基に「補間」技法で値を算出します。 (「補間」技法はプロの世界で、アンテナの任意の周波数のゲインを算出したい時などに利用されます。) これだけで、SWR10くらいまでなら、なんとかなります。また、10以上で数値が逆転するような事は有りません。 VOSCは校正データを取得した時の数値で、この電圧VOは常にチェックしており、校正時より現在のVOがどれだけ変化したかで、VZやVSの値を補正します。 VOは周波数を変えたり、温度が変わるとわずかに変化しますので、その変化分を測定データに反映させるためのものです。  VOSCとVZMAXは同じ電圧値になり、その1/2がVSMAXに一致しなければなりませんが、それぞれの検出回路に接続されたOP-AMPのゲインがバラツク事、VSは分解能を上げる為に2倍のゲインにしてありますので、AD値としては理屈通りにはなりません。 これは、計算時に理屈通りとなるように補正します。

LCDによるアナログメーターの動きを確認しました。 ほぼ予想通りの結果でした。

問題点は、LCDアナログメーターの応答速度と分解能です。 振れの速度は、0から無限大まで、約3秒かかります。 アナログメーターだけの場合、1秒以下で動いていましたが、デジタル数値の表示や電池残量表示を実際に動くようにしたら、ここまで遅くなってしまいました。 実際に7MHzのアンテナを接続し、共振周波数のチェックをしてみました。 指針の応答が遅いので、周波数調整つまみをゆっくりと動かす必要はありますが、共振周波数を見つける事はできます。 ただし、かなりぎこちないです。 現在指針分解能は1度きざみですから、本物のアナログメーターにはとても及びません。

現在1度きざみのサイン(sin)データのテーブルですが、これを0.25度きざみのテーブルに変更してみました。 指針の動きはかなり滑らかになりましたが当然、0から無限大までの時間は10秒近くになってしまいました。 そこで、小細工です。 ターゲットの角度に対して遠い時は1度刻みで送り、近くなったら、0.5度刻みにし、さらに近くなったら0.25度きざみで送る事にしました。この処置により、周波数可変つまみの動きに対して、指針の追従性がかなり改善し、SWRのデイップ点を探すのがスムースになりました。 しかし、まだ、納得いくレベルでは有りません。

次のステップとして、アナログメーターを消して、そのエリアに周波数対SWRのグラフデータを描かせるのですが、 現在の状態で、LCDマイコンのROM容量が93%になっています。  残り7%のROMで、完成は無理ですので、せめてSWRのグラフデータだけでも実現させるべく、トライします。

 

アンテナアナライザーの製作(SWRカーブの表示) に続く

INDEXに戻る

2015年6月17日 (水)

アンテナアナライザーの製作(コントローラー)

<カテゴリ:アンテナアナライザー>

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を使った価値が出せるかトライする事にします。

 

Aa50lcd0_2

Aa50pic1_2

上の写真はコントロールマイコンから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上に表示させる事にしました。

Aa50test1

上の写真は、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が逆転しない程度しか要求されません。 

Swrzrx1 上のJPGが測定原理を示したものです。 クリックしたら拡大します。 そして、下の黄色に塗った部分の式がこの原理から算出された、各データを得る為の式です。

 

Swrzrx3_2

 これらの計算を32bit浮動小数点型式で計算する事により、アンテナアナライザーとして表示したい数値が得られます。

ただし、単純に、この計算式をC言語で書いても、プログラムはすぐに暴走します。原因は、0で割り算したり、負の値を平方根した事によります。アンテナ端子に何もつながないときや、ショートした時の例外処理を入れておかないと、たちまちエラーになりますので、この例外処理は実験しながら、挿入位置を吟味する必要があります。

また、周波数やAD値のチラツキが目立ちます。特に、Zが100Ωを超えた当たりからのAD値のチラツキは激しく、メーターの指針も安定せずに、フラフラ揺れてしまいます。メカニカルのアナログメーターなら、安定して指示しますが、デジタル駆動ではそうはいかないみたいです。

Aa50test2

とりあえず、アンテナアナライザーの基本動作は出来るようになりましたので、AD値の補正方法を確立させ、校正プログラムを組み込むと、SWRのグラフィック以外、完成となります。SWRのグラフィック表示は、周波数のSWEEPをハンドで行う必要があり、確定したアルゴリズムは、まだ有りません。

かねてより考えていた、ダイオードで検波したDC電圧から、元のRF電圧を換算する計算式をプログラムの中に仕込んでみました。 50Ωのデータで校正してありますので、左の写真のごとく、ちゃんと50Ωのダミー抵抗を正しく測定して表示しました。しかし、校正していない100Ωのダミー抵抗では、R=87,X=36と表示し誤差が出ます。 今後この誤差を詰めていきます。 まだ確実なアイデアではありませんが、試行錯誤しながら解決策をみつけようと、このアンテナアナライザー製作の企画を思いついた次第です。 そして、やっと、その実験道具が出そろいましたので、ああでもない、こうでもないと、いつ終わるか、いつ投げ出すか、結論の見えない製作記事が続く事になります。

その後の検討で、ここで紹介したベクトル計算によるRやX、SWRの算出方法は現実的でない事が判ってきました。 その内容は次の記事で紹介しております。

アンテナアナライザーの製作(SWR,R,Xの計算) へ続く。

INDEXに戻る

2015年6月12日 (金)

アンテナアナライザーの製作(広帯域発振器)

<カテゴリ:アンテナアナライザー>

疑似両面基板で作ったブリッジ回路とインピーダンス、SWRセンサー回路に市販のアンテナアナライザーを接続し、インピーダンスやSWRに比例したDC電圧を取り出すことを確認できましたので、いよいよ、アナライザーの心臓部とも言える、広帯域発振器の製作にとりかかりました。

基板は、ブリッジ部分と同じように疑似両面基板として、過去検討した事のある回路をベースに、一部電源電圧の変更などの理由から抵抗やコンデンサの値を変えながら組み立て、とりあえず、18MHzから54MHzまでをカバーする発振回路の動作確認を行う事にしました。  この周波数帯がOKなら他のバンドは簡単に実現できると考えたからです。  しかし、それは甘い考えでした。

今回のアナライザーは単3アルカリ乾電池3本による4.5Vの電源をベースに、一度14Vのバリキャップ用電源をDC/DCで作った後、その14VをさらにDC/DCで5Vに変換し、アナログ回路を動作させ、5VからLDOで3.3Vを作り、これでアナライザーの計算部分を担当するPIC24FV32KA302とLCDの表示を担当するPIC24FJ64GA004とLCDそのものの電源をまかないます。 これらの電源をON/OFFするのはPIC12F675に任せます。電源OFFの時は、数秒後にSLEEPモードに入り、消費電流はナノアンペアとなります。

DC/DCからのノイズを比較的簡単に対策する方法を紹介します。 回路部品の配置や接続方法は大抵のDC/DC ICのデータシートに推奨パターンや配線方法が記載されていますので、それを踏襲しますが、その通り実現するには、チップ部品がマストです。その上で、この回路を両面基板の片面のみで構成させ、反対面にあるGNDラインに1点で接続します。 DC/DCのGNDラインのどのポイントを接続するかは、思案のしどころですが、DC/DCの入力も出力もきれいな直流電流ですので、DC/DCのパルス電流が流れていない所を選べば問題有りません。 しかし、GNDパターンは全て同一の導体ですから、どこでも同じではないかと言われるかも知れませんが、電流は常に最短距離を流れようとしますので、回路素子の接続ポイントを最短で結んでいくと、パルス電流が少ない場所を見つける事ができます。

マイコンが3.3Vで動作しますので、マイコンのADに加えることが出来るDC電圧は最大で3.5Vくらいしか許容できません。 ところが都合の良い事に、バッファアンプがLM358ですので、このアンプを5Vで動作させた場合、出力されるアナログの最大電圧が3.5Vくらいしかなく、ちょうど良い電源電圧設定となっています。

Aa50osc2

左の写真はそのようにして組み立てたOSC基板です。左上の一角は電源回路で4.5Vの電池から14V、5V、3.3Vの電圧を作っています。

右下の一角に広帯域発振回路を配置し、とりあえず18-54MHzバンドのみ実装してあります。 そして、この発振器の出力は4ピンのコネクターを経由してブリッジ回路に接続されています。 最初に電源投入したときは、発振動作せず悩みました。 原因は1608の抵抗電極がはげ落ちて抵抗の役目をしていない部分があり、正帰還がかかっていなかったものでした。

なんとか発振するようになりましたが、動作はかなり不安定です。 基板に手を近づけたり、オシロのプローグを当てるだけで、発振の振幅が大きく変わり、時にはブロッキング発振を伴ったり、停止したり、矩形波になったりです。 高周波の正帰還発振回路にDC負帰還をかけて、出力を安定させるのですが、ブロッキング発振を誘発します。 これは、負帰還回路の時定数だけでなく、RFの回り込みによる正帰還ループの変化にも関係します。 最初に実験した回路はセンサー基板とOSC基板をリード線で接続していましたので、機械的に固定されていなく、対策の立てようが無いという状況でした。

そこで、センサー基板と発振基板をピンヘッダーとソケットで固定し、3D構造が変わらないようにする事で、発振回路はかなり安定させました。 ここでの「安定」の意味は、バンド全域できれいに発振している状態ではなく、周波数や出力レベルを変えた時、正常発振やブロッキング発振や、発振停止が決まって起こるという事で、「安定」して、うまく動作しないという意味です。

Aa50osc5_2

Aa50osc6_2

ひび割れたセラミックコンデンサの交換や、ハンダがついていいない端子の修復などを行った結果、18-54MHzがなんとか正常に発振し始めましたので、5-20MHzバンド、1.6-6MHzバンド、130-500KHzバンドを追加しました。  マイコンがまだ接続されていませんので、バンド切り替えは、ロータリースイッチで行えるよう仮配線しました。 選択された各バンドの共振回路を発振回路に接続する為の高周波用PNPトランジスタの選定は重要で、今回はパナソニック製を使いましたが、コレクタ容量が1PF以下のPNPはそれほど多くないので、手配に苦労します。 フェアチャイルドのMMBTH81が最適ですが、これも入手は難しいです。 ただし、ONセミコンが同名のセカンドソースを出していますので、使えるかも知れません。

発振回路に使用しているFETはデュアルゲートである必要はありませんが、UHF帯まで比較的簡単な回路で使えるFETはデュアルゲートのものが選択子として広がります。 この回路ではNXP製のバイアス回路内蔵のFETを使いましたが、バイアス回路が無いので、外付けでバイアス回路を追加する必要がありますが、東芝の3SK293などでも代替え可能です。

周波数確認はオシロの水平目盛を読んで、おおまかな周波数を知るという仮組み立て状態にしておき、 電源ラインに電解コンデンサによるデカップリング回路を追加したり、回路ブロックごとにラインチョークを入れたり、抵抗、コンデンサの値を吟味して、1.6MHz以上はなんとか安定して発振させる事に成功しました。

次は、問題の500KHz以下の発振回路です。 過去、1MHzくらいまでは、発振実績がありましたが、今回、目標とする周波数はLW(ロングウェーブ)です。500KHz以下を発振させるのは、VHFの発振回路より難しく、ブロッキング発振が止まりません。 昔、現役のころ、ヨーロッパ向けのLWラジオを設計した事がありました。 受信周波数は145KHzからですが、局発はそれより455KHz高い、600KHz以上の周波数ですから、あまり苦労せずに出来た記憶があります。 今回はその時の周波数の1/4くらいで、LC発振器よりCR発振器の方が簡単という周波数帯です。 とりあえず、なだめすかして、やっと130KHzくらいまで発振できるようになりました。 ところが、この回路条件では、1.6-4MHz当たりが発振しなくなります。 全バンドうまく発振する為の定数選びをカット&トライする事、丸2日。 アナログ回路は、デジタル回路と違い、誰が何回作ってもうまく動作するとは限らないという所が苦労の種ですね。 このアナログ回路がLWからVHFまで安定に動作する為のカナメはR20とC17及びR23とC18の定数にかかっています。この4つの定数を最適化する事により広帯域発振回路が成功するか否かが決まります。

 

Aa5064mhz_2

Aa50500khz_2

Aa50130khz_2

 上のオシロ画面は、左から64MHz、500KHz,130KHzの発振波形です。 130KHzではかなり歪みがありますが、とりあえず安定して発振させる事ができました。 オシロの波形を見ていると、周波数が高いほど、RF信号の波高値が高くなっています。 これは、オシロのプローグの周波数特性が原因のようです。スペアナでチェックすると130KHzから64MHzまで+/-1dBくらいで収まっていました。 オシロのプローグは秋月から買った100MHz用ローコスト品ですから、こんなもんかと諦めています。  最高周波数は54MHz以上という目標にしましたが、実際には65MHzくらいまで発振します。周波数範囲が不必要に広いと、周波数調整がクリチカルになりますが、とりあえず、現状でおいておきます。 気になるようでしたら周波数調整用可変抵抗器の上下にシリーズに入れた抵抗値を調整できます。

検波に使ったダイオードはRF用ではないので気にしていましたが、50MHz付近までは問題ないようです。 以外と好結果を出すのが1N60ですが、サイズがでかすぎて、ブリッジ回路をうまく組めませんので、今回は、この汎用ダイオードでいく事にします。 

この状態で、インピーダンス検出DC電圧やSWR検出DC電圧をデジタルテスターでチェックすると、なまいきに、インピーダンスやSWRに比例した数値を表示します。 機械式アナログメーターに半固定抵抗をシリーズにつなぎ、50Ωや100Ωのダミー抵抗で校正し、目盛板に目盛を書き込めば、クラニシやコメットのアナライザーと同じくらいの精度で動作をします。 しかし、今回はここで終わりではなく、 すでに試作したLCDアナログメーターに表示させるところまでやります。

アンテナアナライザーの回路図をダウンロード

まだ、マイコンが接続されていませんが、マイコン回路込みの配線図となります。

コントロールマイコンがそこそこ動くようになると、アナログ回路も気になるようになります。 130KHz付近でレベルが変わる問題や、デジタル表示の誤差の問題から、低い周波数での発振波形歪みの改善、ダイオード検波の非直線性の改善など行い、アナログ回路はほぼ完成しました。 ダイオードはRB751SからHSC285に変更しました。

最終的な発振波形は以下の通りです。

Aa5064m_2

Aa507m

Aa50470k

Aa50130k

このアナライザーの周波数範囲は118KHzから546KHzまでと、1.4MHzから64MHzまでとなり、これらを4つのバンドに分割してカバーします。

 

アンテナアナライザーの製作(コントローラー) に続く。

INDEXに戻る

2015年6月 3日 (水)

アンテナアナライザーの製作(センサー回路)

<カテゴリ:アンテナアナライザー>

TFT LCDを使い、アンテナアナライザーの表示部分の試作を行いましたが、実際に動作させるには、アンテナアナライザーのハード部分が必要になります。 手っ取り早いのは、市販のアンテナアナライザーを買ってきて、そのアナログ回路から必要な信号のみをもらい、マイコンのADにつなげばテストはできますが、それでは、自作の意味がありませんので、多少時間がかかろうとも、アンテナアナライザーの自作にトライする事にしました。

アマチュアがRF回路のかたまりの製品を自作しようと思ったとき、一番困るのがプリント基板です。 メーカーに頼めば、数万円かかりますし、自作しようとすると、メーカーに依頼する以上の初期投資が必要になります。 ここにあまりお金をかけたくありませんので、最高周波数を、手作りでなんとか扱える50MHzバンドまでに限定し、代わりに136KHzをカバーできるアナライザーとする事にしました。

Aasensor1左の写真は2.54mmピッチの蛇の目基板に1608のチップ部品を載せて作った、インピダンスブリッジとセンサー回路です。 

この基板の裏側には厚さ0.1mmの銅箔を両面テープで張り付け、両面基板と同じ構造にした上で、アースが必要な部品は、銅線によるスルーホールで裏側のGND面に直につないであります。

Aasensor2

3個の49.9Ω抵抗でブリッジを組み、4個めの抵抗の代わりに、M型コネクターをつなぎ、ここにアンテナを接続します。 ブリッジ回路には、ショットキーダイオードによる検波回路を3回路接続し、アンテナのインピーダンスに比例したDC電圧、アンテナのSWRに比例したDC電圧、広帯域RF発振器にNFBをかけて、全帯域でフラットな出力を得る為の発振出力に比例したDC電圧を出力させます。

このセンサー部分の構造で、使用可能な最大周波数が変わります。この手作り疑似両面基板の場合、50Ωのダミー抵抗を接続した場合、100MHzくらいまで、SWR1.0をキープできますが、200MHzくらいまで、周波数を上げるとSWR1.1くらいになってしまいます。 もし、500MHzくらいまで、SWR1.0をキープしたい場合、ガラエポによる正規の両面基板に、全てチップによる部品を実装し、これでもかと言われるくらいスルーホールを追加しないと実現できません。 クラニシのアナライザーを修理した時、ほとんど、リード付の抵抗、コンデンサやダイオードを使っており、200MHz以上で、SWR1.1以下にならず、その実装に苦労した事がありました。 類似モデルを再設計したときの対策は、ストリップラインを短くする事。 短く出来ない場合、GNDと信号ラインを可能な限り幅広くしました。 VCCラインや制御用ラインは基板が生産できる最少幅(0.2mm)まで狭くし、その代りGNDと信号ライン(200MHzが流れるライン)は3mmくらいまで拡大した結果300MHzまでSWR1.01をキープできました。 ここで、悟った事は、少なくともブリッジを組む回路だけはチップ部品を使うという事です。 クラニシのアナライザーでも、ブリッジの50Ω部分だけはチップ部品を使用しています。 ただし、ブリッジの回路に接続する検波用ダイオードがリードタイプの為、これを交換したとき、なかなか正常時のSWRが確保できず何度も作り変えた事がありました。

また、周波数カウンターの入力信号用として、プリスケーラーで1/2分周した信号を取り出します。 周波数カウンターのカウントに使うマイコンは、最大カウント周波数として50MHzまで保証されており、例え54MHzでも実力で動作しますので、本来はプリスケーラーは不要なのですが、発振回路と同じ周波数の信号を引き回しますと、異常発振が起こる可能性が高く、あえて周波数を下げてあります。 異常発振対策としては、1/2より1/4分周のほうがより安定しますが、この分周比を大きくすると、カウンターのゲート時間も、その比の分だけ長くする必要が生じます。 今回は100Hz単位での周波数表示を行いますので、基本のゲート時間は10m秒必要です。 これに1/4のプリスケーラーを設けると、ゲート時間は40m秒必要となります。カウンターの周波数表示は40m秒でも問題ありませんが、インピーダンスやSWRの元データ取得周期も40m秒間隔となりますので、後々弊害が出るかも知れません。 とりあえずここは1/2に留めて置きます。

センサー部分に使う検波用ショットキーダイオードは、非常に重要で、今回は、壊れにくいロームのRB521Sというものを使いましたが、高周波用ではないので、20MHz付近を過ぎたあたりから、次第にDC出力が落ちてき、50MHzでは約30%くらいダウンします。 そこで、430MHzでSWR計に使用した実績のある、RB751Sを秋月から購入し、交換しました。 同じようなDC検波テストを行うと50MHzで約5%のダウンです。 DC出力が5%ダウンしたら、インピーダンス指示も5%ダウンする訳ではなく、NFB回路が動作して、指示は変化が無い代わりに、RFの出力が5%上昇します。 5%のRF出力上昇は一応許容範囲ですので、RB751で進行する事にします。

ただし、RB751は電流容量が小さいので、破壊耐力も小さくなっています。  メーカー品のアナライザーに使われているショットキーダイオードはGHz帯まで使えるものを使用しているようですが、これらの破壊耐力はもっと小さくなっています。この為、かなり特別な対策を行っているようです。 

MFJやクラニシが発表したアンテナアナライザーの最大の特徴は、少々手荒く扱っても壊れにくいというものですから、世界中で普及したと考えられます。 プロが使うVNAなどを同じように扱うとすぐに壊れますので、精度は高いが高価なVNAを選ぶより、せいぜい25Ωくらいから100Ωくらいまでしかカバーしない、ダイオードによる検波方式の方がアマチュア向きなのでしょう。 

出来上がったセンサー基板です。  実際に発振器やマイコンとつないだ時は、若干いじる必要があるかも知れません。

Aasensor3

Aasensor4

その後の検討で、ショットキーダイオードはRB751でも問題があり、最終的にダイオードはSHF用検波ダイオードHSC285に変更しました。 配線図も修正してあります。

センサー部分の配線図をダウンロード

センサー基板が、なんとか完成しましたので、次は広帯域発振器の製作にかかります。

アンテナアナライザーの製作(広帯域発振器) へ続く。

INDEXに戻る

 

2015年5月30日 (土)

TFT LCDによるアナログメーター 3

<カテゴリー:PICマイコン

Aameter2_2

PC上で動作するコードジェネレーターのバグと、C言語のポインターの使い方でかなり苦労しましたが、左のような、アンテナアナライザーの表示画面ができました。 

なぜLCD上の疑似アナログメーターの表示にこだわるかと言えば、それは、マルチファンクション画面が得られるからです。 画面はこれで完成ではなく、アナログメーター部分を消して、周波数対SWRのグラフを描かせる事により、LCD表示のアナログメーターも生きてくる訳です。 しかし、ここまでの表示で、const用に使えるROMエリアを含めて85%くらい使っており、これ以上のグラフィックを仕込むとエラーになります。 SWRのグラフ表示は、実際にハードと結合した時の様子を見ながら考える事にします。

通常、プログラムの効率化の為、共通の関数を条件判断しながら、使い回ししますが、これをやると、条件判定の為、動作が少しだけ遅くなります。今回のプログラムでも、メーター指示や、数値の表示の中で、IF文が多くなると、目に見えてメーターの動きはおそくなりました。

対策としては、条件判定を必要最小限に抑える代わりに、関数をいくつも設けることにしました。ROMの容量アップになりますが、プログラム用の容量より、グラフィック用のROM容量がはるかに大きく、全体的にはあまり影響はありません。

残り15%のROM容量でどこまで出来るかは、これからの作業になりますが、ROM容量128Kバイトのマイコンは64pinのQFPですので、出来ることなら、この44pinの64Kに収めたいところです。 また、クロックも現在20MHzですが、これを32MHzまで上げる事にします。

このLCDの表示状態で、SWRやZ,R,Xをリアルタイムにデジタル表示すると、アナログメーターの指針の動作速度は、どんどん遅くなっていきますが、 その上で、周波数カウンターを動かすと、周波数カウンターの基本ゲート時間が10ミリ秒必要であり、メーターの指針の動きはもっと遅いものになりそうです。 改善策としては、周波数カウンターは、外付けPICマイコンで処理し、カウントした結果だけをもらうという案になりそうです。

また、RやXを表示させるためには、10000倍した整数計算では、その精度が不十分で、32bit浮動小数点による計算はマストですから、これもLCD表示マイコンから切り離した方がよさそうです。

これら、周波数カウンターやR、Xのベクトル計算も、LCD上でのグラフィック表示がなければ、8bitマイコンでも十分処理可能なものです。

これからハードの設計を始めますが、基本設計はほとんど出来ていますので、蛇の目基板を使い、いかにして手作りするかが、本当の課題です。 完成はいつの事やら。

アンテナアナライザーの製作(センサー回路) に続く。

2015年6月30日追記

ハードウエーアーが基板状態ですがほぼ完成し、LCDアナログメーターの改善を行う事が出来る時期になりました。 当初、メーターの振れ分解能は1度きざみでしたが、動きが粗く、とてもアナログメーターの動きをまねる事ができませんでしたので、LCDの1ピクセル単位の変化となる、0.25度きざみでドライブする事にしました。 しかし、0.25度きざみでそのまま駆動すると、ゼロから無限大までの移動時間は10秒を超えてしまいます。 動きはスムースですが、実用的では有りません。

Aa50meter3_2

そこで、目標の角度と、現在位置の差を計算し、T/Gに対して数度しか離れていない場合、0.25度きざみで送り、その倍の差が有る場合、0.5度きざみで送り、同様に差が倍になるごとに送る角度も2倍にし、最大で2度きざみで送るようにしました。 この細工により、T/G角度近くになると、指針の動きにブレーキがかかりますので、本物のメーターの動きに、より近くなりました。

結果は非常に良好で、7MHzのアンテナをつないで、実際にSWR最少周波数を探す操作をすると、かなりスムースに指針が追従し、なんなく共振点に周波数を合わせる事が出来るようになりました。 本物のアナログメーターには及びませんが、さほど違和感なしに操作できます。 これから完成度を上げていきますが、ROM容量が、目いっぱいの状態ですので、マイコンを変更するまでは、とりあえず、お預けとなりそうです。

左のLCD画像は最新の表示画像で、50Ωのダミー抵抗を装着した時の表示です。

アンテナアナライザーの製作(センサー回路) に続く。

INDEXに戻る

2015年5月12日 (火)

TFT LCDによるアナログメーター 2

<カテゴリー:PICマイコン

 8bitのPICマイコンでは容量不足で、まともにLCDの表示が出来なかった為、マイコンを16bitに替え、かつLCDも一回り大きな2.4インチサイズにして、実用サイズのLCDアナログメーターを実験中です。

16bitpic_pwb_4

16bitpic_lcd

マイコンはi/oに不足がありますが、とりあえず簡単に実験できそうな、PIC24FJ64GA004という16bit品と、前回と同じメーカーDisplaytechの、DT024CTFTという、320x240ピクセル2.4インチサイズで作ることにしました。 マイコンが16bit品になったので、コンパイラもXC16に変更必要です。そこで、開発環境も、MPLAB Xに変更する事にしました。 しかし、これが、くせもので、従来のやり方では、全く動きません。 すでに通り過ぎた方は、問題ないにしても、これから、XC16やMPLAB Xの環境でPIC24xxxの開発を始めようと思っている方に多少なりとも、役にたつならと、失敗と対応方法を紹介します。

まず、MPLAB Xですが、エジターの日本語が文字化けして読めません。 WEBで調べていくと、プロジェクトを作るときにEncodingの指定をやるのだそうですが、それを見落としてプロジェクトを作ってしまっているので、後から、Encodingを変更する方法を探す必要がありました。 

プロジェクトをオープンして、プロジェクト名の周りが青色になっている状態で、マウスを当て、右クリックすると、一番下にPropertiesがありますので、これをクリックします。出てきたダイアログの一番上にるGeneralの文字をクリックすると、中央下にEncodingの設定ランがあります。その中から、Shift_JISを選択すると、文字化けは直ります。

初期段階として、PICのソースファイルにConfig事項を書き並べて、チップの初期設定をおこないますが、HI-TECH CとXC8やXC16では全く書式が異なります。

HI-TECH Cによる16F1939のConfig記述例

 __CONFIG ( FOSC_INTOSC & WDTE_OFF & PWRTE_ON
 & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF
& FCMEN_OFF);
 __CONFIG ( WRT_OFF & VCAPEN_OFF & PLLEN_OFF & STVREN_OFF & BORV_LO
& LVP_OFF );

これに対して、XC16で24FJ64のconfig記述例

// コンフィギュレーション設定 Fosc=20MHz Xtal
#pragma config POSCMOD = HS, I2C1SEL = PRI, IOL1WAY = ON
#pragma config FCKSM = CSDCMD, FNOSC = PRI
#pragma config WUTSEL = LEG, IESO = OFF, WDTPS = PS1
#pragma config FWDTEN = OFF, ICS = PGx1, COE = OFF, BKBUG = OFF
#pragma config GWRP = OFF, GCP = OFF, JTAGEN = OFF

XC16をデフォルトでインストールすると、以下のホルダーの中に、各PICの品種ごとに、どのように設定するか説明があるのですが、書いてある単語が何を意味するのか判らず、結局、該当チップの英文データシートを読む必要が生じます。それも大変な作業で、今回のPIC24FJ64の設定がなんとなく判るまで2日間もかかりました。 それでも上の設定が正しいのかは?です。とりあえず動いいていますので、良しとします。

C:\Program Files (x86)\Microchip\xc16\v1.24\docs\config_docs

最近のPICマイコンは、i/oピンの多重化がすさまじく、何もしなければパラレルポートを使う事が出来ません。このマイコンも、端子機能はピン配置図に書かれている名称の左から順に優先度が高いと説明されていますが、一番右側に書かれたパラレルi/oをそのまま使う方法が判りません。

ほとんどのi/oで一番左側に書かれている機能はADです。 ADを使うか使わないかを最初に設定しないと、i/oをHに設定したのに、いつのまにかLになっているとかの異常動作に遭遇します。 HI-TECH CでもADは最初に設定する事が必要でしたが、16bitになって、ほとんど全てのi/oがAD対応になっていますので、面倒がらずに、全部設定が必要でした。 ADの設定を行うと、各ピンの一番右側に書かれた端子機能をそのまま使う事ができました。 

次にHI-TECH CではLATB1などのようにi/oのビット指定が出来るのですが、この単語ではエラーになります。これらの定義はincludeファイルの中にあるはずですが、そのファイルを見つける事ができませんでした。結局、WEBで調べてLATBbits.LATB1のように記述したら良いと判るまで、またまた2日間もかかってしまいました。 16bitをパラレルで一挙に書き込む場合はLATB = 0xFFFFでOKでした。

とりあえず、マイコンはソフトで書かれた通りi/oのH,Lの設定が出来るようになりましたが、今度は、LCDがまともに動作しません。 このメーカーのホームページにサンプルコードがありますが、このクラスのLCDは8bit RGBドライブオンリーで、マイコンからのパラレルドライブやシリアルドライブの実働例はありません。FAQなどを調べていくと、世界中のユーザーが困っているようです。 私の実験では、マイコンからのパラレル8bitドライブはなんとかなっても、シリアルドライブは全く不可というのが実態のように思えます。多分、自社でもテストした事がないのでしょう。

このような環境で、案の定、16bitドライブにしてもまともにカラーが出ません。悪戦苦闘の末判った事はRGBモード時設定するように説明されたカラーコードフォーマットの指定をマイコンからのパラレル接続でも行わないとダメという事でした。

このLCDは以下の初期設定で16bitパラレルドライブの基本的な動作は可能となります。

IM0をHとして、IM1-IM3はL(GND)にしておき、ハードリセットをかけた後のイニシャル処理です。

void init_LCD() {
 lcd_CMD(0x01);//ソフトリセット
 __delay_ms(120) ;
 lcd_CMD(0x11);//Sleep Out
 __delay_ms(120) ;
 lcd_CMD(0x13);
 lcd_CMD(0x0036);//Memoryアクセス(画面のスイープ方向設定)
 lcd_DATA(0x0048);//画面は縦置きOnly
 lcd_CMD(0x3a);//カラーモード書式設定
 lcd_DATA(0x55);//16bit(5-6-5)        この設定が必要でした。
 lcd_CMD(0x002A);//カラムアドレスセット
 lcd_DATA(0x0000);//SC[15-8] 0から
 lcd_DATA(0x0000);//SC[7-0]
 lcd_DATA(0x0000);//EC[15-8] 319まで
 lcd_DATA(0x00EF);//EC[7-0]
 lcd_CMD(0x002B);//ローアドレスセット
 lcd_DATA(0x0000);//SP[15-8] 0から
 lcd_DATA(0x0000);//SP[7-0]
 lcd_DATA(0x0001);//EP[15-8] 239まで
 lcd_DATA(0x003F);//EP[7-0]
  lcd_CMD(0x0029);//Display ON 検討中はこのタイミングで。
 lcd_CMD(0x002C);
 __delay_ms(200) ;
 
}

今回の配線図を下記からダウンロードできます。

マイコンとLCDは専用ラインでつながっていますので、CE端子は常時Lで良く、またLCDの内部情報の読み出しも行いませんので、RD端子も常時Hとしております。

LCDMeter0.pdfをダウンロード

Lcd320meter1

開発開始してから約1週間経過した時点で左のようなアナログメーターの表示に成功しました。

前回のドット数は160x128でしたが、今回は320x240でそれなりに分解能も向上しておりますが、単純に約4倍の面積に拡大しただけでは、このような綺麗なグラフィックにはなりません。 

まず、JW CADを使い、正確な目盛板を作成します。 JW CADのフォントは限られていますので、グラフィックの部分のみを作画して、これをスクリーンショットでGIF画像に変換します。 この時のサイズは面積比で16倍以上あります。 この画像をWindows標準のペイントで読み込み、文字を入れます。フォントも色も豊富にありますので、デザインは簡単です。

デザインが終わったら、実際のLCDに表示するピクセルサイズまでペイントで縮小します。 この状態での各ピクセルのカラーデータをそのまま取り込むという手法で実現できます。

PCでの画像処理は、その豊富なアプリのおかげで、簡単に実現できますので、これをマイコンが扱えるデータに変換する為に、変換プログラムを作る必要が生じます。 PICのマイコンとLCDをにらみながら、ちまちまソフト開発をやるはずでしたが、 このSWRメーターの目盛が表示できたのを境に、マイコンプログラムの開発ではなく、PCのアプリ開発がメインになってしまいました。

そして、さらに、1週間くらい過ぎた時点で、PCアプリが完成しました。

下の画像は、PCの画面上に表示された、LCD表示用カラーコードジェネレーターです。  LCDと同じピクセルサイズに縮小したグラフィックデータを読み込むと、C言語で扱えるLCDへ表示する為のデータファイルを出力します。 出力されたファイルを#include命令で読み込み使う事ができるようになります。  バグだらけのアプリでしたが、なんとか動作するようになりました。

Ccg0

 このアプリはTcl/TKと呼ばれるインタープリンターで作られておりますので、動作は遅いですが、コードジェネレーターですから、たとえ1分かかろうが問題ありません。  実際のところは数秒で出力されます。

バグだらけですが、ソースをダウンロードできます。Ccord_Generator4.tclをダウンロード

defaultcolor.txt を同じディレクトリーに置いてRUNさせて下さい。defaultcolor.txtをダウンロード

グラフィックデータをC言語で出力するのはOKですが、フォントデータを出力させる場合、都度ソースを微調整していましたので、このままでは機能しません。 取説が無いので作った本人も、もう忘れてしまいました。

このアプリはTcl/Tkというインタプリンターをインストールする必要があります。インストールの詳細は「Tcl/Tk」で検索してください。 ダウンロード元は全部英文で、個人情報の登録が必要です。

メーターの振れ角を66度として、0.5度きざみで指針データを作り、これをROM上に配置して指針の動きを表現するもので、PC上でのシュミレーションではうまくいってましたが、いざPIC24Fのマイコンに書き込む作業をしたところ、ROM不足でエラーとなってしまいました。

なぜなら、この指針用データが90Kバイトくらいあり、完全なメモリー不足でした。 本来は、もっと早く気付くべきところですが、アプリが完成して、コードを出力したら、そのファイル容量が170Kバイトくらいを示しましたので、やっと判った次第です。 データのスパンを1度ごとにして、容量を半分にしてみましたが、指針データ以外で24Kくらい使っていますので、やはり足りません。

現在のROM容量64Kに収まる範囲で可能な方式として、指針データは常に計算で出し、指針より少しだけ広い四角い範囲のグラフデータに、指針データを重ねると、ちょうどドット数の多いフォントと同じようなデータが作れますので、これをグラフ画面上に上書きすることにしました。

Lcdswrmeter2

左の画像は、そのようにしてメーター目盛の上に、指針とその周囲の目盛画像を上書きしたものです。最初の案より指針データを計算する分だけ動作が遅くなっています。

この目盛のSWR1.0から無限大までの指針移動時間は実測で、約3.3秒ありました。指針位置の計算はsin()と平方根で出していました。

Y座標は、半径やXの値を2乗してから、平方根ですから、かなり時間がかかりそうです。 そこで、平方根を止め、Xはsin()で、Yはcos()で計算させると、指針の速さは約2.7秒まで改善しました。

三角関数は時間がかかると思われますので、sin()の0度から90度までを予め、PCで計算し、その結果を10000倍した数値を整数として、配列に記憶させ、sin(deg)はそのまま取り出し、cos(deg)はsin(90-deg)で取り出す事にしました。   結果は約1.3秒まで改善しました。

関数のなかを見渡して、繰り返しループの中で、初期設定など、結果が変化しない処理事項を取り出し、ループの外に置くとか、見やすくするために置いた変数を固定値に変えるとかの作業を行った結果SWR1.0から無限大までの指針移動時間は約1秒まで改善出来ました。

Lcdswrmeter3

次に、一部、浮動小数点(double)を使用していた計算式を10000倍の整数計算した後、四捨五入した整数に直す方法で、全ての計算を整数で行った結果、ゼロからフルスケールまでの時間は約0.65秒となりました。

左の画像はその速さで指針が動いている時のショットです。動きが速いので、指針もボケて写っていますが、見た目のチラツキは少ないです。

アナログメーターの指針移動時間で違和感が無いのはゼロからフルスケールまで0.3秒くらいの移動時間ですから、あと半分くらいは短縮必要です。

しかし、 現在はメータードライブだけしかやっていませんので、例えば、SWRメーター以外にインピーダンスメーターも同時に表示したり、周波数カウンターの周波数表示など、負担が増えるばかりで、指針の移動スピードもどんどん遅くなってしまいます。

また、この方式の場合、チラツキは最少に抑えられますが、指針の移動スパンは1度以内に限られます。VUメーターではないので、かなり遅い追従時間でも問題は無いと思われますが、実際に作ってみないと、何とも言えません。

次回は、LCDの全画面表示にトライします。

TFT LCDによるアナログメーター 3 に続く。

INDEXに戻る

2015年5月 4日 (月)

TFT LCDによるアナログメーター1

<カテゴリー:PICマイコン

AadigitaltestPICのマイコンを使用して、アンテナチューナーのコントローラーやATUの製作を行ってきましたが、この過程で、SWR計も作ってきました。 PICマイコンに少し、慣れたころ、このマイコンのAD入力にCAA-500のインピーダンス検出DC信号や、SWR検出DC信号を加え、アンテナアナライザーによるインピーダンスやSWRのデジタル表示にトライし、RやXの表示も行えるところまで実験ができましたので、次の目標は、オール自作のアンテナアナライザーと決めました。 左の画像は、CAA500のセンサー基板に、PIC16F1939を使用した自作のマイコンボードとLCDディスプレーを接続し、マイコンで周波数や、SWR、インピーダンス、R、Xを表示させている実験風景です。

アンテナアナライザーのセンサー部分や、広帯域発振回路など、なんとかなりそうですが、これをメカニカルアナログメーターや、キャラクタ表示の液晶で実現してもMFJやコメットと同じなので、面白く有りません。  そこで、マイコンでは、無理と言われる、液晶表示の疑似アナログメーターの実験を始める事にしました。 最近の車のインパネは高精細度の液晶によるスピードメーターやタコメーターがすばらしいデザインの元で実装されております。またKENWOODの最新モデルにも、液晶表示のアナログメーターが実装され、デジタル駆動にもかかわらず、非常にわかりやすいアナログメーターとなっています。 これらの最新技術のLCDアナログメーターに及ばないにしても、安いマイコンと、安い液晶でどこまで、液晶表示のアナログメーターが実現できるかの実験記です。

使うマイコンは、少し役不足ですが、ATUに使ったPIC16F1939。 これで160x128ドットのTFT液晶をドライブします。 液晶は262K色対応で、普通の写真を表示させても、遜色のないカラー画像が表示できるという中国製です。

とりあえずは、TFT LCDを初期設定し、画像や、文字を表示できるところまでトライします。

この実験ボードの配線図です。TFT-LCD.pdfをダウンロード

実験に使うマイコンはROMもRAMもグラフィックLCDをドライブするには小さすぎますので、今回は、基本動作を得とくする事が目的となり、実践版は次の試作までお預けとします。

試用するLCDはDisplaytechのDT018ATFTという品番で、液晶ドライブIC ILI9163Cが内臓されています。 このILI9163Cという台湾製のICはインターネット上でも良くみかけるST7735とコンパチで、ST7735用のイニシャルルーチンでちゃんと初期設定されてしまいます。初期設定が成功したら、後は、ILI9163Cのデータシートを読みながら、ああでもない、こうでも無いと試行錯誤する事になりますが、いつのまにか、文字表示や自作したイメージデータの表示が出来るようになりました。

Pic_lcd_demo

左の画像は、なんとか表示できるようになったので、SWR計の目盛をLCD上に表示させたものです。SWR検出信号をADにつなげば、赤色の指針がSWRを指します。

メーターの目盛は3角関数とピタゴラスの定理を駆使して、描かれており、ブリッジの不平衡電圧を角度に変えて、目盛と同じ式で指針を表示していますので、指示誤差は有りません。

150x50ピクセルくらいの範囲で描画していますので、あまりきれいではありませんが、実験機としては十分です。

ただし、大きな問題があります。

動作がおそろしく遅いのです。

指針が移動するのに、0.5秒くらいかかります。1度移動しようが、60度移動しようが0.5秒です。 これでは、全く使いものにはなりません。  これは、指針も3角関数と、ピタゴラスの定理でXYドットをいちいち計算して表示していたのが最大の原因です。  

これを、指針のドットのみ1度ごとのXYデータの配列として記憶させて置き、測定された指針角度から、このイメージデータを呼び出し、表示させる事にしました。 角度データは80度分必要ですが、とりあえず10度分だけ作って振らせてみました。 指針は赤色で描画した後、一度白色で再描画し、指針を一度消し、次に新しい位置に、赤で描画するという事を繰り返します。 このドット単位での書き換え動作は、目盛と指針が重なった場所の目盛表示を復帰させるのも、ドット単位で行えますので、復帰させるドット情報も簡単に計算できます。 しかし結果は、かなり早くなりましたが、指針のチラツキが目立つようになりました。 まだまだ、改善が必要です。

次に、文字フォントと同じように8x16の書き換え可能なドットパターンを用意し、この範囲に含まれる目盛のドットに加えて、指針のドットも書き込み、これを指針角度に応じて、画面上に再描画させる動作を実験しました。この場合、指針の移動に伴い、旧指針を消すという動作と消えた目盛の復帰動作が不要になりますので、面を書き換える時間増より、コマンド切り替えの回数減少から、LCD側の動作速度がかなり早くなります。 また、ちらつきもほとんど無くなる事も判りました。 ただし、LCDにカラードットを書き込む前のドットパターン作成作業は複雑になりますので、マイコンのクロックを上げたり、16bit RISCタイプに変えるなど、対応が必要になると思われます。

次は、マイコンを16bit品に変え、かつLCDも320x240ドット品に変えて、動作速度の改善に取り組みます。

同じようなLCDをお使いになりたい時の為に、このLCD用の初期設定ルーチンだけですが、以下に示します。

void lcd_CMD(unsigned char CM) {//1-byteコマンド
      RS = 0;
      WR = 0;
      LATD =CM;
      WR = 1;
      RS = 1;
     }
void lcd_DATA(unsigned char DA) {
      WR = 0;
      LATD = DA;
      WR = 1;
     }

void init_LCD() {
      lcd_CMD(0x01);//ソフトリセット
       __delay_ms(120) ;
      lcd_CMD(0x11);//Sleep Out
      __delay_ms(120) ;
      lcd_CMD(0x36);
      lcd_DATA(0xC8);
      lcd_CMD(0x2A);
      lcd_DATA(0x00);
      lcd_DATA(0x00);
      lcd_DATA(0x00);
      lcd_DATA(0x9F);
      lcd_CMD(0x2B);
      lcd_DATA(0x00);
      lcd_DATA(0x00);
      lcd_DATA(0x00);
      lcd_DATA(0x7F);
      lcd_CMD(0x36);
      lcd_DATA(0xAC);
// lcd_CMD(0x29);//Display ON このコマンドは画面クリアーの後が良い。
      lcd_CMD(0x2C);
      __delay_ms(200) ;
 }

TFT LCDによるアナログメーター 2 に続く。

INDEXに戻る

2015年3月 2日 (月)

160m垂直アンテナ

<カテゴリ:アンテナ>

設置可能な環境の中で、色々と160m用アンテナの実験を行いましたが、やはり、アンテナは屋根より高くないといけないようです。 そこで、前回挑戦して挫折した、7MHz用垂直ダイポールとスカイドアエレメントを利用した垂直アンテナに再トライする事にしました。

160mv5_2

前回の失敗原因は送信出力でアンテナの共振周波数が変わるとい問題でした。  この原因は、近接平行する他のバンドのエレメントとの干渉が高周波電圧で変化し、共振周波数がずれてしまうものでしたので、逆に、近接するすべてのエレメントをショートして、垂直アンテナの頂冠としてしまえば、この問題は解決しそうです。  前回、これを実行しなかったのは、160mから他のバンドへQSYするとき、アンテナワイヤーの接続替えをやらねばならず、それが面倒な事でした。  その為、実験もせずに諦めていた訳です。

ちょうど、今晩から広島WASコンテストが始まるという日の午後、急きょ、この全アンテナエレメントショートの垂直アンテナをでっち上げて、使って見る事にしました。

 

7MHz用垂直ダイポールの下側エレメントを切り離し、上部エレメントを下の方へ延長し、例の金網のところまで降ろします。 18MHz用スカイドアのエレメントは、ベランダに置かれたプリセットMTUから外し、この7MHz垂直ダイポールの上部エレメントに接続します。 さらに6m用のヘンテナもアンテナチューナーから切り離し、これも垂直ダイポールの上部エレメントに接続しました。

160mv5box

この状態でマッチングBOX内のローディングコイルは約2μHで1.910MHzに共振します。 インピーダンス変換トランスは10:6のタップですので18Ωくらいのインピーダンスになっているようです。  アンテナアナライザーで1.910KHz付近に共振周波数がある事を確認し、実際に10Wの出力でSWR最少周波数を確認してみました。1.909KHzでSWR最少1.05となっていました。60W送信してもSWRの悪化や共振周波数のずれは有りません。

一応、使用可能になりましたので、これを2015年広島WASコンテストで使ってみました。 3時間の国内コンテストですが、20局しか交信できませんでした。 昨年のコンテストでは31局と交信していました。 アンテナの形態は昨年と同じですから、多分コンディションが良くなかったのでしょう。 

下に、MMANAによる指向性データを示します。

160mv5data

既存のDPやスカイドア、ヘンテナのワイヤーを一度MTUから切り離し、これを互いにショートした上で、地面まで引き降ろすという作業はかなり面倒です。 次の日の朝、ハイバンドのコンテストが朝8時から始まりますので、雨の中、この切り替えを元に戻す作業をしましたが、かなり手こずりました。 暖かくなったら、このワイヤーの切り替えをスイッチで行えるように切り替え器を設置する事にします。 

その後、アクティビティも下がり、このアンテナの改良は頓挫していましたが、2022年になり、1.8MHzのSSBで国内ラグチューをやる目的で、再度160mバンドアンテナにトライです。

160m用 8m高のスローパー へつづく。

INDEXに戻る

2015年1月26日 (月)

160m用ロングワイヤー4

<カテゴリ:アンテナ>

全長40mのロングワイヤーは、その絶対利得が+1.47dBiと実験したアンテナの中では唯一プラスのゲインになりましたが、垂直面内の指向性がほとんど真上に集中し、近隣の局のSは強烈に上昇しましたが、DXの信号はほとんど聞こえない状態でした。 2015年CQWW 160mコンテストの2日目、ゲインはかなりダウンしますが、打ち合上げ角が31度くらいになるT型ロングワイヤーに変えて、再度トライする事にしました。

160m13t9drw

マッチングBOXの中のローディングコイルのタップ位置を選択して1.817MHzに共振させ、トランスの巻き数比を9:5とした時、 最少SWRは1.05くらいでバンド内は1.4以下に収まっています。 アンテナの推定インピーダンスは15Ωくらいです。

ゲインは-6.14dBiとかなり落ちましたが、打ち上げ角は31度となり一応DXも可能な状態になりました。  夕方になるのを待って、ワッチすると、ハワイがQSBを伴いながら599で聞こえます。QSBのピークを見計らって、コールすると「PDP?」と返ってきましたので、数回コールしましたが、結局交信不成立。 その後ワッチを続けると、アリゾナが+10dBくらいで入感します。 ただし、コールしてもQSOは出来ません。 

結果的に、2日目の晩もサハリンと交信できただけでしたが、少なくとも前日のフルサイズLWよりDX向きである事は判りました。 先端がシャックと同じ高さで、我が家の屋根より低いというアンテナでは、DXは無理と諦めることにしました。 このコンテストはJA同志のQSOも得点になりますので、CQ TESTを出すと、ちゃんと呼ばれます。 国内にはそこそこ飛んでいるようです。

160m13t9mmana

垂直面の指向性は良さそうですが、地上高が低いのがやはり致命傷ですかね。

次の日の月曜日、雨の中、アンテナの撤去を行いましたが、再度使用する事はないでしょう。

次に160mバンドにQRVする時は、160m用ロングワイヤー(LW) 1で紹介したスカイドアエレメントを使用した屋根より高いアンテナに再挑戦します。 前回は出力で共振周波数が変わるという問題で投げ出しましたが、対策を考えて再トライです。

160m垂直アンテナ へ続く。

INDEXに戻る

2015年1月24日 (土)

160m用ロングワイヤー3

<カテゴリ:アンテナ>

全長が26mのロングワイヤー(実際はショートワイヤーの呼び名に等しい)は、その高さの割にしては良く飛んでくれました。  しかし、臨時に仮設する条件であれば、最長50mのロングワイヤーを展開できる場所が有りながら、電線の重さの為、張る事が出来ず、26mで妥協していた状態でした。  最近、直径1mmのステンレスワイヤーを市場価格の半額近くで入手できましたので、1.8MHz用フルサイズロングワイヤーにトライしました。

160mlw3

相変わらず、高さは最高8mくらいしか取れませんが、全長50mのワイヤーを用意して、とりあえず張ってみましたら、アンテナの共振周波数は1.6MHz以下となっていましたので、そこからせっせと、ワイヤーをカットし、10mくらいカットしたところで1,817MHzに共振させる事に成功しました。実際のワイヤーの長さは測っていませんので、約40mくらいとしか言いようが有りません。 アンテナアナライザーで確認すると、共振周波数でのインピーダンスは48Ωくらいです。 インピーダンスが高いのはステンレスワイヤーの直流抵抗成分の性かも知れません。なぜなら、40m長のステンレスワイヤーのDC抵抗は60Ωくらいありましたので。 このDC抵抗が原因していると思いますが、アンテナの帯域が従来のアンテナに比べ大幅に広くなっています。アンテナのQがかなり小さくなった為と思われます。 

160mtrns

この状態で直列に1800PFのコンデンサを挿入すると、1.910Mhz付近で同調します。この短縮コンデンサはMMANAで計算しても1800PFと算出されていました。 調整の為、1700PFくらいのセラミックコンデンサに150PFのバリコンをパラ付けして微調整できるようにしてあります。

Qが下がっても、従来のアンテナ以上に飛ぶなら、成功と思いますので、さっそく、アンテナを仮設した晩に1.9MHzでCQを出してみました。 とりあえず5局と交信できましたが双方とも受信状態はあまり良くなかった様でした。

やはり、全長のDC抵抗が60Ωというのは、ダミー抵抗をドライブしているのに等しいと思われます。 

160madj

せっかく入手したステンレスワイヤーでしたが、アンテナワイヤーとしては無理と判りましたので、LANケーブルから取り出した、AWG24のワイヤーに取り替える事にしました。 約7mのLANケーブルがジャンク箱の中にありましたので、この外被をさき、かつツイストされた4組のワイヤーを気長にほどき、全部継ぎ足すと56m近くになりました。 このワイヤーを30mにカットし、12mの1.25SQ KIV線を継ぎ足すと、DC抵抗は3Ωになりした。  このワイヤーを池の上に展開し、1.817MHzに同調するように長さを調整した結果、インピーダンスは、アンテナアナライザーで18Ωと測定されましたので、送信機からの同軸ケーブルを10番タップに接続し、6番タップからアンテナへ接続しました。 SWRは1.05以下です。 1.8MHz帯のバンド全体でSWR1.2以下とかなり広帯域です。  LANケーブル用のワイヤーはその被覆が非常に薄く、同じAWG24でもUL1007タイプよりはるかに軽量です。被覆材料はPE(ポリエチレン)ですから高周波特性も良好です。

このアンテナはコンテストの時だけ臨時に仮設して使用するものですから、架設する度に、共振周波数がすこしアップ、ダウンします。 この微調整用として、整合BOXのすぐ近くでワイヤーを約70cmくらい折り返して束ねて置きます。 共振周波数がずれたとき、この束ねた部分を長くしたり短くしたりして、調整し、いちいちワイヤーをカットしなくて済むようにしてあります。

下に、MMANAでシュミレーションした、水平面、垂直面の指向特性を示します。 シュミレーションでは深さ5mの池の地形は想定されていませんので、これより打ち上げ角が低い事を期待したのですが、実際は期待外れでした。

このアンテナを2015年CQWW 160mコンテストで試してみました。 5エリアの局が+70dBくらいで入感します。韓国も+30dBくらいで入感しますが、いつも+40dBで聞こえるサハリンの局は+20dBくらいです。 +20dBで入感する局とは交信できましたが、それ以下のSの局を呼んでも、CQのコールが一瞬とぎれるだけで、QRZすら返ってきません。 まあ、これが普通ですから、送信能力は諦められますが、HLの局と交信している7や8エリアの局すらあまり良く聞こえません。 どうやら、打ち上げ角がシュミレーション以上に真上へ出てしまったようです。

160mmmana

結局、このアンテナは1晩で不合格の判定を行い、どう改善するか思案しておりましたら、飼い猫が走り回り、マッチングBOXを引きずった為、ワイヤーが切れてしまいました。 猫の遊び場に設置したのがいけなかったと反省しながら、午前中に撤去しました。 

160m用ロングワイヤー4 に続く

INDEXに戻る

2014年12月29日 (月)

アンテナアナライザーとインピーダンス

<カテゴリ:アンテナアナライザー>

アンテナアナライザーは、アンテナのSWRやインピーダンスなどを、送信機無しで簡単に測定できる為、アンテナ自作派にとって手放せないアイテムであります。 最近のアンテナアナライザーは、SWRやインピーダンスを表示した上で、リアクタンスの表示もできるのが多くなりました。  しかしながら、アンテナアナライザーは、決してアンテナのインピーダンスやリアクタンスを表示しているものでは無いという話です。

アンテナアナライザーを使用している方から質問がありました。 周波数を145MHz にしておき、100Ω のダミー抵抗をつないだのにインピーダンス表示が100Ω にならない。 リアクタンスはゼロのはずなのに、ゼロを表示しないというものでした。

Dammy50

この問題は、このブログの「同軸ケーブルの切り出し」でも触れましたが、インピーダンス検出位置 (専門的には基準面と言うそうです) と実際に接続されたダミー抵抗との距離に関係します。 インピーダンス検出位置に100Ω のダミー抵抗が置かれている場合、検出値は正しく100+j 0Ω となりますが、距離が有る場合、その距離と測定周波数の波長の関係で異なってきます。 アンテナアナライザーにダミー抵抗を装着する場合、検出部とダミー抵抗の位置は、おおかた5cm 近く離れており、これが大きく影響するものです。

下に、ダミー抵抗、測定位置、測定位置から見たダミー抵抗の電気定数を計算する式を示します。 ダミー抵抗はMコネクターの同軸ケーブル接続側の先端に、チップ抵抗がハンダ付けされた一般的な校正用ダミー抵抗です。 測定位置はアナライザー内部のブリッジ回路が存在する機械的な位置です。 それらの間にd[m] の距離があり、かつ、その間の伝送路の特性インピーダンスZoを50Ωとします。 今回のダミー抵抗はd=56.5mm のものを使いました。 また、この伝送路の短縮率は0.67 であったと仮定します。

Aaz1

 赤枠で囲まれた計算式が測定位置から見たダミー抵抗のインピーダンス計算式で、複素数扱いとなります。

下の表は、この計算式をエクセルの中に埋め込み、計算した結果です。

ダミー抵抗は純抵抗の100Ω でしたが、計算結果は83.9Ω しかありません。 また、ダミー抵抗には、リアクタンス(Xx) は含まれないのに、計算結果には30.8Ω の容量性リアクタンスが含まれています。 そして、抵抗とリアクタンスを合成したインピーダンスも90Ω 以下となっています。

周波数に関係なく、d=0 なら計算したインピーダンスはダミー抵抗に一致します。 また、周波数が低くなると、計算値はダミー抵抗の値に近づいていきます。 さらにダミー抵抗が50+j0 の場合、周波数やd に関係なく計算値は常に50+j0 となります。 そして、50+j0以外の場合、dを色々変えていくと、リアクタンスの極性も反転します。 もちろん、実際の測定結果も数値がぴったり一致しないまでも、同じ傾向を示します。

これらを実感していただく為に、計算式を埋め込んだエクセルファイルを用意しましたので試してみて下さい。

インピーダンス計算エクセルファイルをダウンロード

ところで、今回は測定位置からダミー抵抗までの短縮率(速度係数)を仮に0.67と置きましたが、 実際のところポリエチレンを完全充填している訳ではなく、半分以上が中空となっていますので、短縮率は0.67より大きな数値と考えられます。 しかし、使われているコネクターがインピーダンス無管理のMコネクターですから、基準面からダミー抵抗までの線路の特性インピーダンスは30Ωより低いと予想され、実際は計算値以上に誤差が大きくなるようです。

今までの話は、アナライザーのブリッジ回路の位置とダミーの抵抗との距離の話でしたが、これが、同軸ケーブルで接続されたアンテナであった場合、同軸ケーブルの長さは最低でも、コネクターを含めて10cm 以上はあるでしょうから、アナライザーが表示した数値は決してアンテナのインピーダンスではないという事がお判りでしょう。  アナライザーは常にブリッジ部分のインピーダンスを計測しているだけなのです。

同軸ケーブル越しに測定した抵抗やリアクタンスを含むインピーダンスが50+j0 で無かった場合、アンテナのインピーダンスは50+j0 では無いとはいえますが、いったいいくらなのかは不明なのです。 仮に156+j0 と表示されても、Rの部分が50では有りませんので、j0 だからこの周波数で共振しているという事も言えないのです。 この事は、アナライザーがリアクタンスゼロを検出しても、アンテナが共振状態であるとは限らないという事ですから、アナライザーのリアクタンス表示のみで共振周波数を判断してはいけないという事にほかなりません。 

アンテナ直下で、同軸ケーブルの長さが50cm 以下などのように、極力短い状態で測定した場合、HFの比較的低い周波数に於いては、かなり近い値を知る事はできますが、VHFやUHFでは、実態とは全く異なる数値を表示している事になります。 ちなみに、50cm の長さの同軸ケーブルでアンテナに接続した場合、前述の145MHzで生じた計測誤差が14MHzでも起こります。

同軸ケーブルの長さを正確に測定周波数のλ/2の整数倍に設定してやると、アンテナアナライザーはアンテナのインピーダンスを表示しますが、それは、波長がぴったりλ/2の整数倍のときだけです。 アンテナアナライザーの周波数を少し変化させたとたん、実際値よりずれてしまいます。 これは、同軸ケーブルの長さをこまめに変えられないというアナライザーとは関係ない事情によります。

このような説明をすると、アンテナアナライザーなど、全く役に立たない道具にしか見えないようですが、実はSWRだけは、同軸ケーブル越しでも、ちゃんと、読み取る事ができます。

SWRを表示する際に、アナライザーが測定したインピーダンスや、Sパラメーターから反射係数を求めて、求めた反射係数からSWRを算出して表示している場合、同軸ケーブルの長さに関係なく、アンテナのSWRを表示します。 実際は接続する同軸ケーブルにロスがありますので、表示されるSWR値は実際値より小さく、すなわち良く表示されます。 しかし、長さが50cm くらいの同軸ケーブルの場合なら、435MHzでも大きな誤差なくSWRを知る事ができるわけです。 

そして、反射係数を直接求めず、ブリッジの不平衡電圧に比例した数値からSWRを表示するほとんどのアンテナアナライザーも、SWRが大きい場合、多少の誤差はありますが、SWRが1.0 に近づくほど誤差が少なくなり、ちゃんとアンテナのSWRを表示します。 

この理屈を確かめるには、この記事の中でダウンロードしたインピーダンス計算エクセルファイルのZx とZi のR+jX を、インピーダンスからSWRを計算できるエクセルファイルに代入すると、Zx もZi も、同じSWRになる事から理解できます。 (スミスチャートならもっと簡単に理解出来ます。)

Aaswr1

上の表は、145MHzで100Ωのダミー抵抗をアナライザーが測定した時のR=83.9とX=-30.8をSWR計算シートに代入したものですが、計算結果はVSWR=2.00となっています。 もともとのダミー抵抗のSWRは100/Zoで2.0ですから、同軸ケーブル越しに測定したSWRでもダミー抵抗、すなわちアンテナのSWRを正しく測定している事になります。

いくら同軸ケーブルを短くせよと言っても、高さ10mに張ったダイポールアンテナの給電点にアンテナアナライザーを持っていくのは至難の業です。 ここは現実的に10数m以上あるかも知れない同軸ケーブル越しに、シャック内でSWR最少周波数を確認しても、共振周波数を知るという条件だけなら全く問題無い訳です。

時々、同軸ケーブルの長さを変えると、SWRが変わるという話を聞きますが、それはSWR計のインピーダンスや同軸ケーブルやコネクターが50Ω でなかったり、SWR計とアンテナの途中にあるコネクタの接触不良や、大きなコモンモード電流が同軸ケーブルに流れて正確にSWR計が動作しない場合や、リアクタンスが含まれたとたん、まともにSWRを計測できないSWR計のせいです。 これらの解説はインターネット上に沢山存在します。 もし、同軸ケーブルの長さを変えたときSWRが大きく変わったら、アンテナを調整する前にこれらの対策が必要ですが、コモンモードチョークを追加する以外手の打ちようがありません。その時は、一番悪いSWR値がアンテナのSWRであると考えた方が気が楽になります。

また、同軸ケーブル越しに表示されたアナライザーのインピーダンスはRやXを含めて当てにしないことですね。 すでにお判りのように、同軸ケーブルの長さが1電気波長の1/100を超えると、ZやRに無視しにくい誤差が含まれますが、Xに至っては、1電気波長の1/1000を超えた当たりから無視しにくい誤差が含まれるようになります。

市販されているアンテナアナライザーに付いているRやXの表示は、コイルやコンデンサをMコネクターに直接接続し、せいぜい10MHz以下の周波数で利用したり、3.5MHz以下の周波数のアンテナの給電部に、短い同軸で直接接続して利用するくらいが、ベターと思われます。 また、例え10MHz以下の周波数でも抵抗とコイルを直列に接続した回路では、周波数を上げていくと、Xは当然上昇しますが、RもXの変化より小さいですが、上昇します。 これは、アナライザーがコイルの高周波抵抗(表皮効果による抵抗)を検出して、本来の抵抗と合計した値を表示している為です。

ブリッジ部分と校正用抵抗またはアンテナまでの距離と、その間の速度係数や特性インピーダンスは機種によってマチマチです。複数のアナライザを使い、同じダミー抵抗やアンテナを測定した場合、ダミー抵抗やアンテナが純抵抗の50Ω以外であった場合、表示されるインピーダンスやR、Xは全て異なってきます。 一致するのは、周波数とSWRだけでしょう。

あるメーカーが「アンテナアナライザー」ではなく、    「SWRアナライザー」とか、「スタンディングウェーブアナライザー」と呼んでいましたが、もしかしたら本質を突いた呼び名かもしれませんね。

補足です。

プロが使うVNA(ベクトル・ネットワーク・アナライザー)などの測定器の場合、同軸ケーブルの長さをキャンセルして被測定回路の正しいインピーダンスを表示できるような機能が付いたのが当たり前です。専門的には基準面の移動を行うと言うそうです。 アマチュア用のアンテナアナライザーでも、この接続ケーブルの影響をキャンセルできる機能が付いたモデルもあります。  ただし、このキャンセル機能を有効にする為に、タワーや屋根の上で、アナライザーの校正を行うというのは、かなり面倒です。 

プロ用、アマチュア用を問わず、同軸ケーブルの片方にアナライザーをつなぎ、アンテナに接続されている方の同軸コネクターを外した後、アンテナの代わりに、50Ωのダミー抵抗、0Ωのダミー抵抗を接続した状態、及びオープン状態で校正動作を行わせます。 校正動作は自動で行なわれますが、アンテナから同軸ケーブルを外して、ダミー抵抗を付けたり外したりは、自分でやらねばなりません。 もし、アンテナの給電部を手の届かないところまで上げてしまっていたら、アンテナを一度降ろすか、高所作業車を借りてくるか考えねばなりません。

この記事の中でダウンロードしたインピーダンス計算エクセルファイルの中に「校正原理」というシートがあります。 このシートには、アナライザーが検出したRiとXiからアンテナのRxとXxを逆算で求める計算式が埋め込まれています。 接続用の同軸ケーブルの長さをキャンセルさせる場合は、この計算で求めたRxやXxをベースに、同軸ケーブルのロスを加味した値をグラフ表示している訳です。  グラフで表示する理由は、Xiのリアクタンスの極性を判定するにはグラフデータが必要だからです。   

例題ではd=0.0565という短い距離が設定されていますが、実際は0.5m以上が必要な場合が一般的です。 また、そこそこの精度を得たいならSF106タイプの同軸ケーブルで長さは3波長くらいが限度です。 5mの長さの3D2Wで校正した場合、300MHzくらいから周波数に対してSWR値が波打ちどこがSWR最少周波数か判りにくくなります。

なお、キャンセル機能が無いモデルでも、この記事に取り上げた技術情報は取説の中で何回も説明されています。  もちろん、OM諸氏により翻訳された日本語バージョンでも説明されています。

理屈は難解ですが、使い始めると手放せないアンテナアナライザの自作はこちら

INDEXに戻る

2014年11月12日 (水)

アンテナアナライザーと外来電波(夜になるとSWRが上がる)

<カテゴリ:アンテナアナライザー>

アンテナアナライザーという便利な道具を常用していると、思わぬトラブルを経験します。 7MHzのダイポールを昼間、7050KHzでSWR1.1に調整しておき、夜、再度確認するとSWR1.8くらいまで悪化していました。しかも、かなり指針が揺れます。 暗いのでアンテナの再調整は翌朝行うこととし、翌朝、再度SWRを確認すると1.1になっており問題なしです。 アンテナの状態が晴れと雨では違っても、昼と夜で変化するという話は聞いた事は有りません。

原因は、またも「北京放送」でした。

アンテナアナライザーをアンテナに接続した状態は、回路的に見ると、同調回路のない鉱石ラジオそのものです。強力な電波がアンテナから侵入すると、アナライザーの発振出力と同じくらいかそれよりも大きな信号がインピーダンスやSWR検出用ダイオードに加わります。 この為、SWRやインピーダンスが大きく表示されてしまいます。 特に7MHz帯の北京放送はハムバンドに近いだけでなく、鉱石ラジオがガンガンなるほど強力です。 7MHzに同調したダイポールですから、其処らへんに張ったロングワイヤーなどに比べたら、はるかに大きな信号で受信できるのでしょう。

また、なにも7MHzの北京放送だけではなく、中波放送が1.8MHzのアンテナ調整に邪魔になるとか、FM放送局が144MHzのアンテナに混入し測定不能になるとか、すぐ近くで誰かが電波を送信したとか、アンテナアナライザーの使用を困難にしている現象が世界中で起きているようです。

この問題は、ブリッジ方式のアンテナアナライザーにとって宿命的であり、妨害を与える電波を止めるしか有りません。 しかし、放送局の電波は止められませんので、アナライザー内部の発振器の出力を上げ、検波回路の感度を悪くし、外来電波の影響を少しでも緩和する手段と、妨害電波用のトラップ回路をアナライザーとアンテナの間に入れるくらいの対策案しか有りません。

トラップの場合、FM放送がHFアンテナの調整時邪魔をする場合、効果が有っても、7MHzの北京放送や、1.8MHzの中波放送はトラップを入れただけで、測定不能なほどSWRは異なってしまいます。

一方、発振出力を上げる案は、電波法という法律が前に立ちはだかります。 アンテナアナライザーを送信機として申請し許可をとればいくらでも出力をアップできますが、使用可能な周波数範囲はハムバンドに限定されます。 アンテナアナライザーの最大の強みはハムバンド以外も測定できるという事ですから、発射される電波は許可を要しない著しく微弱な電波の範囲でなければなりません。

日本の電波法では、この許可を要しない電波の電界強度を以下のように定めています。

電波の発射点から3mの距離において

322MHz以下 500μV/m以下

322MHz - 10GHz 35μV/m以下

この限度値はサービスエリアが半径20~30mくらいの無線局を想定して設定されている模様で、例えば、半径1500mくらいの地点でも、明瞭に受信できるような送信設備の場合、あきらかに法令違反になる訳です。 ただしこの規定にかかわらず、測定器としての発振器に定義される装置には後述のごとく出力の規定が有りません。

Aapowertest

そこで、代表的なアンテナアナライザーの出力レベルを調べてみました。調べたのは私ではなくQSTの執筆者です。また、各アナライザーの取説には、その出力レベルを明記してありますが、発振器の出力レベルだったり、アンテナコネクター端子の解放電圧だったり、50Ωで終端した場合だったりしますので、左の等価回路に示すようにスペアナによる50Ω終端時のレベルとして測定されていました。

Aapowerlist

電波法施行規則の第6条で、免許を要しない無線局として、「標準電界発生器、ヘテロダイン周波数計その他の測定用小型発信器」と定義され、この小型発信器の出力についての制限は有りません。 無線局は送信機とアンテナで構成されますので、アンテナアナライザでアンテナの測定をする事自体は違法ではありませんが、すでに行われている無線業務に妨害を与えてはいけません。 空中に放射される電波は、アンテナの形態で大きく変わります。 QRPPを実践されている方なら10mWもあればかなり遠方と交信できる事は当たり前ですから、パワーの大きいアナライザーの場合、テストするアンテナや周波数は十分注意が必要でしょうね。

しかも、アナライザの出力を大きくしたとしても、CAA-500とFG-01の電界強度換算値は18dB程度しかありません。 短波帯のQSBの山谷の差、平均40dBなどに比べたら、ほとんど効果は期待できない状態です。

外来電波によりSWRを正確に測れない場合、許可を受けた送信機とSWR計で測定するのが一番のようです。周波数は許可を受けた範囲に限られますが、出力は北京放送や中波放送に絶対に負けないレベルまで上げる事ができます。

アナライザーの機種が変わったらSWR値が変わったとか、時間や季節でSWRが変わるなどの症状が確認されましたら、外来電波の影響を最初に疑ったほうが解決が速くなることでしょう。

INDEXに戻る

2014年10月28日 (火)

ATUの自作:LCD交換

 <カテゴリ:オートアンテナチューナー(ATU)の製作

ATUのエバレーションを実使用状態で継続していますが、デバッグに使っているLCDでトラブルが発生しました。

Atulcd4

このLCDはAQM0802Aという品番で、ベランダに設置したATUの基板に貼り付けてあったのですが、4週間くらいしたら、LCDが表示しなくなりました。I2Cの回路はまともに動いていますが表示が出ません。 DC/DCの出力をチェックすると、6V以上ある電圧が3Vしか有りません。 発振は停止はしていませんが、昇圧しきれないようです。

ベランダから部屋に持ち帰り、テストすると、ちゃんと表示します。電圧が違うのか?コンデンサの容量が違うのか? 色々検討しましたが、原因は判りません。 部屋のなかで正常動作している状態のままで、ベランダに出てみました。すると、数秒もしない内にLCDの表示が消えます。一度消えたLCDを部屋に戻しても表示は復帰しませんが、電源OFF/ONを行うと、表示は戻ります。  

この、部屋でOK、屋外でNGは何度も再現されますので、原因は光しか有りません。ちなみに、ATUを収納した緑色のコンテナBOXに蓋をして、蓋の隙間から暗くなったLCDを見ると、正常に表示しますが、蓋を取り去ると消えてしまいます。 もともと不安定なDC/DCでしたが、LCD表面に光が照射されると、内部状態が変わるのでしょう。

結局、このLCDは取り外し、別のLCDに交換する事になりました。

交換したLCDはI2CインターフェースのACM1602N1という秋月で取り扱っているLCDです。表示が8桁2行から16桁2行に増加しましたので、かねてより気にしていましたCM結合器のDC出力をADで読んだ値も表示させる事にしました。

Atulcdn1_2

左の3ケタ数字がVCの角度データ、上がVC1、下がVC2です。 次の「7」はタップ番号。真ん中の4ケタ数字がCM結合器のDC出力をADで読んだ値です。上がVfwd,下がVref。 右側の上4ケタがSWRを100倍した数値。 下が周波数で単位はKHzです。

  いままでは、出力を大きくするとSWRが悪化していました。 CM結合器のDC電圧をデジタルテスターで測り、これをベースに計算したSWRは1W出力より10W出力が悪くなりますが、10W出力時と40W出力時のSWR値は変わりません。 しかし、ADが変換した数値から計算したSWR値は0.2くらい悪化します。 

原因は、AD変換回路のサンプルホールド回路の初期充電時間かも知れません。 この充電時間を確保する為、ADのチャンネルを選択してから、10マイクロ秒間のウェイトをかけていましたが、試しに、このウェイトを50マイクロ秒に変えてみました。すると、10W出力時と40W出力時のSWRの差は0.07くらいに収まりました。  

また、大きなアナログ信号をAD変換した後、小さなアナログ信号を変換する場合、前回の計測時の電荷が残っている可能性もあります。  そこで、今まで、Vfwdを測定した後にVrefを測定していましたが、Vrefを先に測定し、Vfwdを後に測定するように変更したところ、10Wと40WのSWR値の差はゼロになりました。

1W時と10W時のSWR差は検波に使っている1N60の非直線性によるもので、気にする必要は有りません。

当面は、不具合が発見されるたびに、LCDの表示を変更しながらエバレーションが続きそうです。

このマイコンのソフト開発はマイクロチップが無償で提供しているMPLAB IDEという開発環境と、PICkit3と呼ばれる書き込みアダプターを使い行っていますが、今回使用しているマイコン「16F1939」の場合、最初のイニシャライズ時、マイコンIDの検出を失敗し、かなりの頻度でエラーになります。 

原因が判らないまま、PCを立ち上げ直したり、アプリの立ち上げタイミングとUSB認識のタイミングなどを取って、かろうじて開発環境を維持していました。 最近、このエラー頻度が高くなり困っていましたら、インターネット上で同じような問題で困っていた記事を見つけました。 記事によると、PICkit3から供給する電圧を5Vではなく、少し下げてやればエラーになる確率が減るという情報です。  さっそく、5Vの電圧を4.6Vまで下げてみました。  すると、全くエラーが発生しなくなりました。

その後のATU動作改善はこちらへ続きます。

INDEXに戻る