ワイアレス周波数特性アナライザ本体(PICマイコン側)


【アナライザ本体の概要】

完成した周波数特性アナライザ本体の外観は下図のようになります。
簡単に製作できるように基板だけで構成しました。
基板に直接RCAジャックやつまみ付きの可変抵抗を実装して基板だけで
使えるようにしました。
右側にあるのがBluetoothモジュールです。左側にあるのがオペアンプですが
フラットパッケージでしたので変換基板に実装しています。このオペアンプは
いろいろ取り替えて周波数特性を比べてみることができるようにしました。



【構成と仕様】
製作する周波数特性アナライザ本体のハードウェア構成は下図のようにしました。


Bluetoothモジュールが通信に関することはすべて実行してくれますので、
制御用のマイコンは簡単なもので済みますから、8ビットマイコンのPIC16F1829で
すべてを制御することにします。
これに、広範囲の正弦波を生成できるDDS(Direct Digital Synthesizer)というICと、
広範囲の周波数のレベルを計測できるログアンプICを組み合わせて構成します。

PICマイコンからDDS ICを制御して、指定した周波数の正弦波を出力します。
このDCレベルの出力を、コンデンサを通してAC信号にしてからオペアンプで増幅
しています。DDSには48MHzの発振器からクロックを供給していますので、
1MHzくらいまでの正弦波は十分の分解能で出力できますから、歪も少なくきれいな
正弦波となります。これ以上の周波数になるとやや正弦波がひずみます。

増幅後の出力を可変抵抗に接続して、出力レベル調整ができるようにします。
さらにこの調整後の出力を、オペアンプを通して一定インピーダンスの出力と
するようにしています。

このオペアンプには、DC/DCコンバータで5Vから−5Vを生成して加えることで
両極性電源とし、ゼロボルト中心の交流波形として出力するようにしています。

使用したオペアンプはアナログデバイス社製のAD8042というデバイスで、
GBWPも160MHzと非常に広帯域な周波数特性となっています。
出力はレールツーレールでほぼ電源電圧近くまでスイングしてくれますから、
今回の出力アンプとしては最適です。

被測定機を通過した出力をログアンプに入力し、デシベルに比例した直流電圧に
変換してからPICマイコンのアナログ入力としています。
この直流レベルをPICマイコンの10ビット分解能のA/Dコンバータで測定して
Bluetooth経由でタブレットに無線送信します。

アナライザ本体の仕様は下表のようになっています。
これらは大部分使用した機能ICの特性となっています。
 項目 機能・仕様   備考
電源 DC5VのACアダプタから供給
消費電流
最大80mA(Bluetooth非接続時)
 最大100mA(Bluetooth接続時)
 消費電流値は通信中は変動する
Bluetooth
モジュール
Bluetooth V2.1+EDR対応
プロファイルはSPPでスレーブ動作
UARTとは115.2kbpsで接続
マイクロチップ社製
RN-42SM (RN42XVPでも可)
DDS周波数出力 DDSによる正弦波出力
 10Hz〜10MHz 最小3Hzステップ
アナログデバイス製 AD5932
出力アンプ特性 10Hz〜10MHz  (−3dB範囲)
出力レベル:8dB〜−30dB調整可能
アナログデバイス製 AD8042
実際の被測定機への出力となる出力レベルは基板に実装した可変抵抗で調整可能
レベル入力 ログアンプで入力
 20dB〜−50dB 分解能 0.1dB
 周波数特性 DC〜100MHz
アナログデバイス社製 AD8310
PICマイコンの10ビットADCで入力

【DDS ICの使い方】

アナライザには任意周波数の正弦波出力用にアナログデバイスのDDS専用ICである
AD5932を使っています。
TSSOPパッケージで小さくてちょっとはんだ付けし難いのですが、16ピンとピン数が
少ないので何とかなるかと思います。

このICの特徴は、高速で高分解能なDDS機能を内蔵していて、最高50MHzまで動作し、
周波数分解能は24ビットとなっています。
また出力部には10ビット分解能のD/Aコンバータが使われていますので、十分きれいな
波形を出力してくれます。
AD5932のピン配置と各ピンの機能は下図のようになっています。



実は、このDDSは自動スキャンモードを内蔵していて、開始周波数と周波数インクリメント、
インクリメント回数を指定すると自動的に一定間隔で周波数をスイープスキャンします。
しかし、今回の使い方ではこの方法では使いにくいので、自動スキャン機能は使わず
PICマイコンから制御しています。

このためには、外部インクリメントモードという設定とすると、CTRLピンの立ち上りエッジで
周波数をインクリメントできますので、このモードで使うことにして、さらに周波数インクリメント、
インクリメント回数のいずれも0にして、周波数をインクリメントさせないで連続して
指定周波数だけを出力するようにして使います。これで設定した周波数を連続で出力できます。

マイコンとのインターフェースは3線式シリアルインターフェースとなっています。この3線式
シリアルインターフェースは、図(a)のようなタイムチャートで使います。
SCLKクロックは最大40MHzと十分の速度で動作しますからPICマイコンのフルスピードで
制御しても全く問題ありません。
FSYNCがLowになってからSCLKの立下りでデータをサンプリングしますので、立ち上りで
データを更新します。



送信するデータは16ビットで、その中身は上図(b)のようになっています。
図中の左側の表のように16ビットの内、上位4ビットがコマンドアドレスとなり、
続く12ビットのデータの種別を表しています。

コマンドアドレス0の場合は制御コマンドで、続く12ビットの各ビットは右側の表のような
意味を持っています。今回の使い方では設定周波数を連続出力としますので、
開始周波数だけ設定し、あとはすべて0とします。また制御ビットは、上位下位連動、
DACを有効とし、正弦波出力でCTRLピンによる手動モードとしています。

PICでこのシリアルインターフェースを使うには、16ビットのSPI通信で可能ですが、
8ビットのPICマイコンではできませんので、プログラムI/Oでシリアル通信を実現する
ことになります。

【ログアンプICの使い方】

レベル測定はデシベルになりますから、対数アンプが必要です。
これをデスクリートで作るのは至難の業ですので、ここは専用ICを使うことにします。
使ったのは、アナログデバイスのAD8310というログアンプです。

このICはDCから400MHzまで応答し、下図のような入出力特性です。
図のようにデフォルトでは、−91dBから+9dBまで計測して、結果を0.4Vから2.6Vの
直流電圧として出力します。
デシベル値に比例した直流電圧で出力されますので非常に扱いやすくなります。

ここでのAD8310の使い方は、デフォルトのままでは感度が高過ぎですので、
最高入力レベルを+20dB以上にするため、入力に直列抵抗を挿入して20dBだけ
感度を下げて使います。
入力抵抗が1kΩですので、5.1kΩをINLO、INHIピンにそれぞれ直列接続して
約1/10のレベルにしています。これで下図のように−70dBから+20dBの範囲が
測定できることになります。




このICの外観とピン配置は下図のようになっています。



 このICはオフセット調整が必要ですが、今回はプログラムで補正することにしましたので、特に調整回路は付加していません。
 測定対象をオーディオ帯域としましたので、できるだけ低い周波数まで安定に測定できるよう、OFLTピンに10μFのコンデンサを接続して、自動オフセットが有効になる周波数を10Hz以下にし、さらにBFINピンにも10μFのコンデンサを接続して出力のローパスフィルタをできるだけ低い周波数にするようにして使います。

【回路と組み立て】

全体構成に基づいて作成した回路が下図となります。



ICマイコンは8ビットのPIC16F1829を選択しましたので、全体を3.3V電源だけで
動作させることにしました。
DDSもログアンプも3.3Vで動作しますので問題ありません。ただし、出力アンプとなる
オペアンプは、出力がACレベルとなるように±の両電源とします。
このため、チャージポンプ式のDC/DCコンバータTC7662B(マイクロチップ社製)を
使って+3.3Vから−3.3Vを生成して供給しています。

Bluetoothモジュールは回路図はRN42XVPとなっています。RN42SMの場合は
ピン配置が異なりますので注意してください。
PICとの接続は単純なUART接続ですので、TXとRXピンをクロスで接続し、
モジュール側のCTSBとRTSBは直接折り返しとしています。
ここで注意が必要なことは、リセットピンの扱いで、PICマイコンのMCLRピンと
接続してしまうと、PICマイコンにプログラムを書き込む際、9V程度の高電圧が
短時間ですが加わってしまいますので、場合によるとBluetoothモジュールが
壊れることがあります。そこで、Bluetoothモジュールのリセットピンは、
PICマイコンの出力ピンに接続して、プログラムでリセットすることにします。

DDSには本来は50MHzまで動作可能なのですが、3.3V動作で入手しやすかったのが
48MHzの発振器(EPSON社製)でしたので、これを使っています。
この周波数の差異は、プログラムで修正できますので、比較的自由に選択できます。

DDSの正弦波出力を100uFという大きめのセラミックコンデンサで直流カットし、
AC信号に変えてからオペアンプで増幅しています。
このオペアンプの倍率を調整できるようにして、正弦波の出力波形がひずまない
レベルに調整します。さらにこのオペアンプの出力をツマミ付きの可変抵抗に接続し、
この可変抵抗でレベルを調整した後、再度オペアンプに入力してインピーダンスを
低くし、かつ十分な振幅としてから外部供給信号としています。

ここで使用するオペアンプの周波数特性がそのまま本装置の特性になりますので、
周波数特性のよいものを使う必要があります。今回使用したアナログデバイス社の
AD8042は非常に素直な特性で、GBWPが160MHzもありますから、数倍のゲインで
使っても10MHzまでフラットな出力が得られています。
出力振幅もほぼ電源電圧近くまで出せます。

ログアンプは、OFLTとBFINに10μFのコンデンサを付加し、さらにVOUTにも1μFの
コンデンサを追加してローパスフィルタとし、低い周波数の計測でも安定な出力となる
ようにしています。

プリント基板のパターン設計では、微小なアナログ信号を扱いますので、アナログ回路の
グランドとデジタル回路のグランドは完全に分離して1ヶ所だけで接続するようにします。

組み立てが完了したアナライザ本体の部品面とはんだ面が下記となります。
多くのICがはんだ面側に実装されています。





【プログラムの全体構成】

ハードウェアの製作が完了したら次はPICマイコンのプログラムの製作です。
Bluetoothの無線通信を使ってデータの送受信を行いますが、Bluetoothの複雑な
プロトコルスタックはすべてBluetoothモジュールに実装されてしまっていますから、
PICマイコン側はUARTでシリアル送受信をするだけとなっています。
これでプログラムは非常に簡単にできるようになります。ひとつ注意が必要なことは、
無線での送受信ですから半二重通信でかつ送受信エラーが起きることもあるということです。
つまり送信と受信は同時にはできないということです。

製作するPICマイコンのファームウェア全体を下図のような構成とすることにしました。
メインの処理と、USARTの受信割り込みを使った無線受信処理との二つ処理ルーチンで構成しました。



メイン処理では最初に初期設定を行います。入出力ピンの入出力モード、USART、
A/Dコンバータの初期設定を行います。その中で、Bluetoothモジュールの
リセットピンを200msecだけLowにしてBluetoothモジュールをリセットしています。
さらにDDSモジュールの初期化をコマンド送信で行い、初期状態として1kHzの
正弦波を出力するようにしています。

このあと、メインループに入ります。メインループに入ったら最初の1回だけ、
S1がオンであればBluetoothモジュールの名称設定などの設定をコマンドモード
で行い、動作完了を待つため1秒間の待ちを挿入してから受信待ちループに入ります。
S1が押されていなければ何もせず1秒待ちを挿入してから受信待ちループに入ります。

受信待ちループでは、USARTの割り込み処理で64バイトのデータの受信が完了すると
受信ありフラグがオンとされますので、それを待ちます。
受信ありフラグがオンになり、受信データがある状態になったら、受信処理関数の
Process()関数を実行します。
Process()関数では、受信コマンドをチェックし、Tコマンドの場合はOK応答を返すだけです。
Nコマンドの場合は、その後に続く周波数設定データを読み込み、周波数データに変換
してからDDS ICに設定出力を行います。

そして100msec待ってから、今度はレベルデータをA/Dコンバータを使って読み込み、
そのデータをBluetoothモジュールに出力し無線送信します。これが一巡の全体の流れとなります。
この他に、DDS ICの制御関数やBluetoothへの送信関数、タイマ2を使った遅延関数
などのサブ関数があります。

【DDS ICの制御関数】

DDS ICとPICマイコンとのインターフェースは3線式シリアルインターフェースとなっていて
16ビット単位で送信するようになっています。
PICでこのシリアルインターフェースを使うには、16ビットのSPI通信で可能ですが、
8ビットのPICマイコンではできませんので、プログラムI/Oでシリアル通信を実現することに
なります。
つまり汎用入出力ピンのHigh、Lowを制御してクロックとデータを生成することになります。
DDS ICの出力周波数は24ビットの設定値で決定しますが、その周波数Fは次式で決まります。
使用した発振器が48MHzですので、

 F = (設定値)×(48MHz÷0xFFFFFF) = (設定値)×48MHz÷16777215 ≒ (設定値)×2.861Hz

つまり、実際の周波数は約3Hzステップで設定することになります。
したがって最低周波数は3Hzで、最高周波数は24MHzということになります。

しかし正弦波という形状をできるだけ歪が少なくなるように最低50分解能とすると、
最高周波数は48MHz÷50 = 960kHz ということになり約1MHzまではきれいな正弦波に
できそうだということになります。
逆算で周波数から設定値を求めるときには次式となります。

   (設定値) = F ÷ 2.861 = F × 0.3495  (実際には0.3496の方が設定周波数に近くなる)

こうして作成したDDS ICの制御サブ関数の詳細が下記リストとなります。



【ダウンロード】

アナライザ本体のファームウェアは下記からダウンロードできます。
MPLAB X IDEのプロジェクトファイル1式となっています。


  ★★★ アナライザ本体のファームウェア ダウンロード ★★★



   目次ページへ