H8/3664F ネットワークアナライザ
概要
ハードウェア
ソフトウェア (H8/3664F side - C)
ソフトウェア (PC side - VB5 )
ソフトウェアダウンロード
参考文献
変更履歴
2001年11月10日修正 ---- 一部修正、写真変更
2001年11月 3日修正 ---- 一部修正、写真変更
2001年10月31日修正 ---- 一部修正、写真変更
2001年10月28日修正 ---- ソフトウェア部分追加
2001年10月23日修正 ---- 新規プロジェクト設定
Network Analyzer ----- 概要
何が出来るのか?
能動回路であれ、受動素子回路であれ、その回路の周波数特性を測定する事が出来ます。
例えば、4MHzの手持ちのクリスタル(周波数のばらつきを選抜せずに)3個のラダー型フィルターを作成して、その周波数特性を測定すると下記のような特性図が書けます。コンデンサ等を調整すれば、自分のほしい特性を得る手助けになります。
ネットワークアナライザ目標仕様
1.信号発生部
可変周波数範囲:
100KHz 〜 60MHz
出力範囲:
0.1Vp-p to 4Vp-p max.
キーデバイス:
AD9851BRS DDS(Direct Digital Synthsizer)
EL2075CN OP-Amp (2GHz Gain-Bandwidth)
出力:
正弦波
2.信号検出部
キーデバイス:
AD8307 DC-500MHz,92dB Logarithmic Amplifier
3.制御部
MPU:
H8/3664F
Memory:
(External EEPROM 24LC64)
EIA-232 interface for PC communication
PC側制御
下記の制御コマンドだけでも、汎用ターミナルソフトでアナライザの動作を制御する事が出来ますが、上記PCソフトがアナライザ制御を便利にします。
制御コマンド
コマンド コマンド形式 機能 例
H [H] ヘルプ Network Analizer by Kenji Arai / JH1PJL Oct..,2001
F [F-0to9&AtoF(8chr)-*] 周波数設定 F00120345* = 120.345KHz, F50123000* = 50.124MHz
D [D] データ読み出し Send "D" then receive "R123T321*" (R=12.3dB, T=32.1dB)
A [A-0to3(1char)-*] DDS出力 A1* = +10dBm (0=Max,1=+10dBm,2=0dBm,3=-10dBm)
S [S] 現在の全てのデータ表示 Send "S" then receive "SFF50123000#R123T321#A123*"
T [T] 時間表示 Send "T" then receive "T01234567*" Unit = mSec
P [P-0to9&AtoF(8chr)-*] ステップ周波数設定 F00120345* = 120.345KHz, F50123000* = 50.124MHz
+ [+] アップ New Freq = Current Freq. + Step Freq.
- [-] ダウン New Freq = Current Freq. - Step Freq.
Network Analyzer ----- ハードウェア
回路構成
回路は、2チャンネルの同じ回路構成ログアンプ部、DDSをメインとする周波数発振部、H8による制御部、更に電源部から構成されます。
構成は、ここをご覧ください。各部の主要回路はそれぞれの部分をクリックしてください。
ログアンプ回路
ここ
DDS回路
ここ
H8/3664Fピン配置
ここ
デバイス
DDS(AD9851BRS)を除いたキーデバイスは、秋月で入手出来ると思います。
Network Analyzer ----- ソフトウェア (H8/3664F - C program)
ネットワーク本体側のプログラム構成は、非常に簡単な構成です。ソースコードの一部に、コメントを掲載しますので参考にしてください。
測定精度向上の為に、Wavetek製シグナルジェネレータ(Model3004)を用いて補正を実施しています。データは、H8内のコードエリアに置いていますが、EEPROM内に移しPC側との連携を取って自動校正出来る機能を検討しています。
補正時に使用したデータは、このExcelファイルで確認ください。
/****************************************************************************
Network Analyzer.c
Programmed by Kenji Arai/JH1PJL
E-mail: kenjia@sannet.ne.jp jh1pjl@arrl.net
URL: http://www.page.sannet.ne.jp/kenjia/
August 16,2001 Start new proj. using H8/3664,AD9851 & AD8307
October 8,2001 1st Version
October 28,2001 Homepage version
Copyright (C) 2001 Kenji Arai/JH1PJL
All rights reserved. Permission is granted to use, modify,or redistribute
this software so long as it is not sold or exploited for profit.
THIS SOFTWARE IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED.
****************************************************************************/
/* Original article was on the QST magagines (Jan.& Feb.,1998) */
/* ================================================================== */
/* ===== Network Analyzer PIC Interface Program ===== */
/* ===== By: Steve Hageman 12Jan97 ===== */
/* ================================================================== */
/* Hardware */
/* AKI-3664 Tiny Micom (H8/3664F 42Pin SDIP) */
/* ----- Include Files ---------------------------------------------- */
#include "3664f.h"
#include "sci.h"
#include "ad9851.h"
省略
/* -----< Data Table >------------------------------------------------ */
dB表示の為の補完データ(シグナルジェネレータ使用の実測補正値)
const unsigned long TbL_Freq[TBLNOFREQ] = {
100000, 500000, 1000000, 5000000, 10000000, 20000000,
30000000, 40000000, 50000000, 60000000, 70000000 周波数テーブル
};
const int Tbl_dB[TBLNODB] = {
100, 0, -100, -200, -300, -400, -500 実際値は1/10
};
周波数と各dB値(上記テーブル)毎のAD変換生データ
const long Tbl_ch0[TBLNODB][TBLNOFREQ] = { 1チャンネル目の実測データ
{1460,1508,1560,1584,1650,1750,1807,1831,1826,1864,1864},
{1189,1246,1303,1332,1398,1489,1546,1569,1569,1607,1603},
{ 937, 989,1051,1075,1137,1232,1289,1322,1317,1360,1355},
{ 666, 732, 794, 823, 880, 980,1037,1065,1070,1108,1103},
{ 328, 471, 523, 552, 614, 713, 780, 851, 808, 842, 837},
{ 228, 271, 300, 319, 347, 461, 518, 547, 552, 590, 580},
{ 224, 228, 228, 233, 238, 271, 304, 319, 319, 347, 347}
};
const long Tbl_ch1[TBLNODB][TBLNOFREQ] = { 2チャンネル目の実測データ
{1465,1508,1560,1584,1650,1750,1807,1836,1855,1826,1845},
{1194,1251,1303,1332,1398,1493,1541,1569,1598,1579,1584},
{ 951, 994,1051,1075,1137,1227,1284,1322,1346,1327,1336},
{ 675, 747, 799, 818, 885, 980,1037,1070,1099,1080,1089},
{ 333, 476, 533, 556, 614, 713, 780, 813, 842, 823, 828},
{ 238, 276, 304, 323, 361, 466, 518, 552, 580, 556, 571},
{ 224, 228, 233, 233, 243, 276, 309, 323, 342, 328, 338}
};
/* -----<< Main >>---------------------------------------------------- */
void main()
{
initialize(); イニシャライズ
opning_msg(); PCへのオープニングメッセージ表示
/* Main loop */
while(!DOOMSDAY) 無限ループ
{
/* Wait for EIA232 char -> parse to command */
LED_COMM = OFF;
Buf = SciGetC(0); PCからに1文字入力待機
LED_COMM = ON;
switch(Buf){ 入力された1文字の分析
/* Send Help massage */
case '?': {
goto job_H;
}
case 'H': {
goto job_H;
}
case 'h': {
job_H:
SciPutC('/');
help_msg(); ヘルプ要求に対して受け付け可能なコマンド情報を送出
SciPutC('*');
break;
}
/* Frequency set Parser */
case 'F': {
goto job_F;
}
case 'f': {
job_F:
LED_FCHG = ON;
SciPutC('/');
set_dds_freq_direct(); DDS発振周波数の設定コマンド受付と周波数設定
LED_FCHG = OFF;
break;
}
/* Frequency step set Parser */
case 'P': {
goto job_P;
}
case 'p': {
job_P:
LED_FCHG = ON;
SciPutC('/');
set_dds_freq_step(); ステップ周波数のコマンド受付と設定値のメモリへの格納
LED_FCHG = OFF;
break;
}
/* Data transfer Parser */
case 'D': {
goto job_D;
}
case'd': {
job_D:
SciPutC('/');
data_send(); dB換算後の2チャンネルAD変換値の表示
SciPutC('*');
break;
}
/* Set Amplitude of DDS */
case 'A': {
goto job_A;
}
case 'a': {
job_A:
SciPutC('/');
set_dds_amp(); DDS出力設定のコマンド受付と出力設定
break;
}
/* Show current data */
case 'S': {
goto job_S;
}
case 's': {
job_S:
SciPutC('/');
set_all_data(); 現在の全ての設定データの表示
SciPutC('*');
break;
}
/* Show timer data */
case 'T': {
goto job_T;
}
case 't': {
job_T:
SciPutC('/');
show_timer(); 電源ON後からの経過データ表示
SciPutC('*');
break;
}
/* Frequency UP */
case '+': {
goto job_UP;
}
case ';': {
job_UP:
SciPutC('/');
freq_updwn(0); 現在の周波数+ステップ周波数=新しい周波数
SciPutC('*');
break;
}
/* Frequency DWON */
case '-': {
goto job_DWN;
}
case '=': {
job_DWN:
SciPutC('/');
freq_updwn(1); 現在の周波数−ステップ周波数=新しい周波数
SciPutC('*');
break;
}
/* Check Conection */
case ' ': {
SciPutC('/');
break;
}
/* Not in command list */
default: {
/* Error */
SciPutC('!'); 文字が登録されていない場合の処理
}
LED_RUN = ON;
} /* End of switch */
} /* End of while */
} /* ----- End of main ----- */
/* -----<< Subroutines >>--------------------------------------------- */
void initialize()
{
全てのイニシャライズ処理
}
void opning_msg()
{
電源ON時のオープニングメッセージ表示
}
void help_msg()
{
受け入れ可能なコマンド一覧の表示
}
void set_dds_freq_direct()
{
PCからの発振周波数データをDDSへセット
}
void set_dds_freq_step()
{
PCからのステップ周波数データをメモリへ格納
}
void data_send()
{
PCへ2チャンネル分のAD変換値(dB換算後)の送出
}
void set_dds_amp()
{
PCからのDDS出力設定コマンドにもとずく設定
}
void set_all_data()
{
現在のデータ設定
1.DDS設定周波数
2.2チャンネル分dB値
3.電源ON後の時間経過
4.DDS出力値
}
void show_timer()
{
電源ON後の時間経過送出
}
void freq_updwn(unsigned char i)
{
現在の発振周波数に対してステップ周波数分の増減操作
}
void IdleFunc()
{
;
}
void PutCRLF()
{
シリアルラインへのキャリッジリターンとラインフェード出力
}
unsigned long n_ascii2long( int n )
{
N個の文字を数字に変換
}
int ascii2hex( char c )
{
1個の文字を数字に変換
}
unsigned long set_dds_data()
{
PCからのデータの正当性を判断し、DDS発振周波数としてメモリーに格納
}
void cnvrt_dds( unsigned long freq )
{
DDS発振周波数データをDDSチップへ送出(データ変換後)
}
void ad_out_db( int dt )
{
データをASCII変換して送出
}
void adc_dB( unsigned char ch )
{
AD変換データを周波数別に構成した補完データで修正してPCへ送出
}
unsigned char get_freq_range()
{
補完の為の周波数レンジを確定
}
int get_dB_data(unsigned char ch, unsigned char f_no, unsigned int dt)
{
補完作業
}
void ad_reset()
{
AD変換処理のイニシャライズ
}
void amp_reset()
{
DDS出力設定のイニシャライズ
}
void show_amp()
{
現在のDDS出力設定値の送出
}
void show_data( unsigned long dt )
{
データの10進化
}
/* -----<< Interrupt >>----------------------------------------------- */
/* TIMERV Initialize routine */
void reset_timerV()
{
タイマーイニシャライズ
}
/* TIMERV Interrupt Handler */
void timerV_irq()
{
1mS毎のタイマー処理
}
Network Analyzer ---- ソフトウェア (PC side - VB5 program)
VB5側のソフトウェアは、下記のフォーム構成で成り立っています。
FormNtWrk_Anlyzr(anlyzr_H8.frm)
メインとなるフォームで、ネットワークアナライザーとの通信をベースとし下記機能を持ちます。
PCとの通信機能
DDS周波数設定機能
周波数掃引設定機能と掃引
アナライザデータ表示機能
(1)"Sweep Mode” スイープモードがスタートします。ファイルへの記録を必要とするか否かの問い合わせが事前に行われます。
----> このイベントによりfrmTip(frmTip.frm)のフォームを開き、ファイルへの記録の必要有無確認が行われ、ファイルへの書き込みが必要であれば、更にFromFileControl(FromFileControl.frm)のフォームへ移行します。ファイル名称はデフォルト値として日時から自動作成されますが、必要なら変更可能です。
(2)”Show File"でセーブされているファイルを検索し、必要があればグラフ表示します。
----> このイベントによりfrmFileFind(frmFileFind.frm)のフォームに移行し、すでにセーブされているファイルの検索を行います。検索してファイルが選択されるとfrmFreqChart(frmFreqChart.frm)へのグラフ描画に移行します。
(3)"About”でバージョン等の表示を行います。
フォームfrmAbout(anlyzr_H8_about.frm)へ移行します。
frmAbout(anlyzr_H8_about.frm)
バーション表示の為のフォームです。
frmFileFind(frmFileFind.frm)
過去のネットワークアナライザーで測定したデータが、ファイルとして保存されていればそれを表示します。ファイル名だけでなく測定日時や、測定時のメモ(書き込んでいれば)が表示されますので、検索が容易です。
frmFreqChart(frmFreqChart.frm)
ファイルに保存した記録を基に、周波数特性を表示します。グラフは縦軸が、dB表示のRF信号の検出値で、横軸が周波数を表します。周波数表示は、スイープ条件の開始・終了周波数から最適の表示幅が選択されますが選択幅が狭い場合や一部拡大したい場合はこのフォーム内で、自由に設定出来る様になっています。
frmTip(frmTip.frm)
測定データをファイル保存するか否かを選択するためのフォームです。
FromFileControl(FromFileControl.frm)
ファイルのセーブ場所を選択する機能とファイルにメモを書くための機能を有します。尚、ファイルはCSV形式をデフォルトとしています。
Network Analyzer ----- ソフトウェアダウンロード
H8/3664F制御ソフトウェア
-------- Anlyzr_H8_Software
VB5 PC側ソフトウェア
-------- Anlyzr_VB_Software
H8Network Analyzer ----- 参考
私が、ネットワークアナライザの記事を最初に読んだのは、QSTの1998年1月号と2月号に掲載された、下記のものが最初でした。
Build Your Own Network Analyzer by Steve Hageman
下記サイトでPICのプログラムがダウンロード出来ます。PC側のプログラムは公開されていないようです。
(Feb 1998 Build Your Own Network Analyzer?Part 2, by Steve Hageman,
p 35. Windows 3.1/95 operating program and the source code) ---- hageman.zip
http://www.arrl.org/files/qst-binaries/
早速その年には、彼の回路にもとずき1号機を製作しました。その時はH8/3048Fで本体を構成し、VB4でPC側のソフトを作成しました。
この時の回路のキーデバイスは、H8/3048F + HSP45102 +AD602 でした。
今回の構成は、先の経験と後閑さんのホームページを参考にさせてもらいました。後閑さんのものは、いつもながらの洗練された製作例になっているのですが、私のものは全くの手作り1回限りの製作です。更に、後閑さんのグラフ作成プログラム(PC側VB)の考え方を参考にさせてもらいました。ありがとうございました。
http://www.picfun.com/appframe.html
部品情報は、下記を参考にしてください。
H8/3664F(HD64F3664BP)のマニュアルは、下記から入手出来ます。
リンク先が、そのままファイルを示していますので、注意してください。http://www.hitachisemiconductor.com/sic/resource/japan/jpn/pdf/mpumcu/j602071_h8300hpm.pdfhttp://www.hitachisemiconductor.com/sic/resource/japan/jpn/pdf/mpumcu/j602223_h83664.pdf
http://www.renesas.com/jpn/products/mpumcu/16bit/tiny/3664/index.html
H8/3664Fのヘッダーファイルは、下記を使用させてもらいました。
http://www7.airnet.ne.jp/~showa/tiny.html
DDSチップとログアンプのマニュアルは、下記から入手出来ます。
http://products.analog.com/products/info.asp?product=AD9851
http://products.analog.com/products/info.asp?product=AD8307
EL2075は下記から、入手してください。
http://www.elantec.com/