« 2015年5月 | メイン | 2015年7月 »

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に戻る