このアナライザの原理は、DDSでアンテナに発振し、その周波数の進行波と反射波をArduinoで計算してシリアルポートに出力するというものです。原理的にはどのアナライザもおなじようなものみたいですが、いままで高い周波数が発振できるDDSが高価だったり、制御が難しくて、アンテナアナライザは結構高価でした。そしてK6BEZがこの安価な中華製DDSモジュールを使って安いアナライザを開発しました。この特徴は、部品点数が少なく、またArduinoで開発されているので、改造や移植も簡単で、特にグラフ化してPCで見られるようになり、アンテナ調整時には、連続Sweepにより、簡単に最低共振点を見つけられるようになりました。今では他にはスタンドアロンで使えるように1602タイプの液晶やDG7GAOの開発したグラフィック液晶をつけられるようにしたものがあります。
AD9850と9851ですが、チップ単体はピン互換です。チップ単体で使うよりフィルター類や水晶が実装されたモジュールで使うほうがはるかに使いやすいです。
そのモジュールですが、下記の写真のように中華製では、2種類のタイプが存在します。ピン互換のため、どちらもモジュールの乗っているチップがどちらかになっているようです。
モジュールの左のタイプの詳細はここにあります。右のタイプの詳細はここにあります。
右のタイプは古いタイプらしく、左のほうがシリアルのピンが一方に集められています。また右のタイプの回路図が間違っていてJ7のGNDと出力のD7に位置が上下逆になっています。
AD9850はクリスタルが125MHZになっていて9851は6逓倍モードがあるため30MHZになっています。
ピンをどちらかのモジュールで統一すると簡単に9850と9851が入れ替えできて便利ですね。
このモジュールは
W_CLK クロック この立ち上がりのタイミングで下記のデータを更新
FQ_UD 周波数更新
SDAT(D7) シリアル通信用での周波数データ入力
RESET DDSリセット
IOUT 出力ピン
の5つを使います。
AD9850はSine Frequency range: 0-40 MHz AD9851は Sine Frequency range: 0-70 MHz になっていて値段も1000円くらい高くなっています。
AD9851をArduinoで使う場合のスケッチの例はここにあります。
なおK6BEZのスケッチではサブルーチンのSetDDSFreq(double Freq_Hz)でDDSの周波数を制御しているんですが、この部分のint32_t f = Freq_Hz * 4294967295/125000000;をDDSの制御部分を単に周波数をAD9851用に180000000に書き換えただけではうまく動作しませんでした。
それで上記の例を参考にして
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(SDAT, data & 00000001);
pulseHigh(SCLK);
}
}
void SetDDSFreq(double freq_Hz) {
int32_t freq = freq_Hz * 4294967296.0 / 180.0e6;
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x001);
pulseHigh(FQ_UD);
}
に変更したらうまく動いているようです。
DG7EAOのVNAも50Mhzに対応するようにコンパイルしました。大したことはしていないですが、、、
なおバンド選択でSweepした場合 Zoom inかZoom outを一回しないと表示されないようです。
ここにあります。
コメント