オーディオクラフト工房(211)

更新日:2016年8月14日


FPGA(MAX10)でオーディオ関連機器を作ろう(その4)
今回は信号レベル測定について説明いたします。波形信号発生機能と周波数カウンタ機能に加えることで使い勝手が飛躍的に向上しました。
前回までの記事はこちらを参照下さい。
http://nonchansoft.my.coocan.jp/audio/max10step3.htm
その完成した姿はこのようになっています。
(FPGA・MAX10を使用したオーディオ関連機器)
さてそれらの機能については次のようになっています。
波形信号発生と周波数カウンタの各機能については前回までの記事で説明させて頂きました。今回は信号レベル測定について説明いたします。正弦波の波形信号発生と組み合わせることで、オーディオ回路の周波数特性を測ることが出来ます。
(機器全体の構成図)
過去の記事にも記載しましたが、まずは全体の構成図を見て下さい。信号レベル測定についてはまずLOGアンプ回路経由してPICメインマイコンに入力されます。LOGアンプ回路の出力電圧をA/Dコンバートしてその測定数値を表示を行うためにシリアルデータに変換してFPGAに送り込みます。LOGアンプ回路については諸先輩方の回路を流用させて頂いております。波形信号発生機能で正弦波スイープを使用すると、出力回路から測定データとスイープの周波数をセットにして出力します。
(LOGアンプ回路入出力)
LOGアンプ回路にはアナログデバイセズ社製のAD8307を使用します。回路は下記WEBを参考にさせて頂きました。よって回路をそのまま載せることが出来ません。ご理解下さい。
電子工作の実験室:http://www.picfun.com/
この場をお借りして作者の方に感謝いたします。
(前面パネルの操作ボタンなどの配置)
測定信号は真ん中上のRCAジャックから入力します。右側のレベル・カウンタ切換はレベル側にして下さい。正弦波をオーディオ回路に入力してその回路の出力レベルを周波数ごとに測定することで、そのオーディオ回路の周波数特性を知ることが出来ます。今回製作の機器から正弦波を使うことで、信号レベル測定値は-40dB〜+16dB程度まで測定することが出来ます。表示は上側の7セグメントに行います。出力周波数と信号レベルが同時に見れて便利です。信号レベル測定は小数点1桁まで表示します。但し表示精度は0.1dBではないことをご理解下さい。
(LOGアンプ用IC:AD8307のデータシートより)
(LOGアンプ回路の計算)
参考にさせて頂いたWEBにも記載がありますが、今回私の使用状況に合せて計算を行いました。このLOGアンプのdB数値はインピーダンスが50Ωの場合です。今回オーディオ回路で使用しますので、そのdB値は少し異なることになります。あくまで測定値は周波数が変化することで、ゲインが上がるか下がるかの目安として使用して下さい。よろしくお願いいたします。
測定データはFPGAの7セグメント表示を使用します。FPGA内の周波数カウンタの表示回路に割り込む回路を入れています。このあたりは前回の記事を参照下さい。測定データをシリアルデータに変換してFPGAに送り込みます。FPGAへのシリアルデータ設定は複数ありますが、クロック信号とデータ信号のラインは共通化し、ラッチのみ個別に配線しています。下図がFPGAに送り込むシリアルデータの割付です。
(測定データのシリアルデータ割付)
24bitのデータにしています。7セグメント表示が6桁ありますので、一桁ごとの表示に分解して送っています。測定データは計算上0.01の位までありますが、変動が大きいので今回表示は使用しませんでした。
信号レベル測定についてこのままでは面白くありませんので、波形信号発生機能で正弦波スイープを使うと連動することが出来ます。この機能があることで、信号レベル測定が活かされる結果となりました。
波形信号発生機能の「SIGNAL」ボタンが出力ON/OFFスイッチ(SW4)です。このスイッチを長押しすることで正弦波スイープになります。20Hzから740kHzまでポイント的に1秒弱の正弦波を出力し自動のタイミングで信号レベルの測定を行います。この辺りのプログラム詳細は次回公開のソースを参照下さい。このデータをクロック信号とデータ信号でこの機器の外部に出力します。正弦波の出力レベルは振幅設定のボリュームで行います。測定する回路の特性に合せてボリュームを設定して下さい。
(正弦波スイープで測定したデータの出力フォーマット)
周波数と測定レベルデータを外部に出力する理由はPCで特性グラフを描くことにあります。この機器から直接PCに接続することも可能ですが、測定機器とPCをつなぐことでお互いのGNDが接続されることになります。その場合、PCからのノイズが測定機器に回り込む状態となり、測定数値に影響が出る可能性があります。これを防ぐためには出力データのラインをアイソレートします。
(データ出力回路のアイソレート)
正弦波スイープで測定したデータはクロック信号とデータ信号で出力します。これを一旦光信号に変えてPC側と分離します。過去の製作でもこの方法を使ったことがあります。上図回路を構成することでステレオ音声ケーブルで接続することが可能になります。
接続ケーブルに関する過去の記事:
http://nonchansoft.my.coocan.jp/audio/sleeptimer1.htm
(PCへの接続インターフェイス)
アイソレータされた光信号を上図の回路でクロック信号とデータ信号に戻します。PICマイコンで受けてUART-USB変換を経てPCへ送り込みます。上図回路はPCからのバスパワーで動作するようにしています。PCへ送り込むデータはテキストデータとします。PC側での処理が簡単になります。
(接続インターフェイスの内部)
UART-USB変換には秋月電子の超小型USBシリアル変換モジュール「AE-FT234X」を使用しました。形状も小さく使い易いと思います。この基板の5VをPICの回路に接続することでPCからのバスパワーとなります。
(PCへ送り込むデータフォーマット)
周波数を10進6桁、TABの後、測定レベルを10進4桁で送ってCR,LFでひとつの測定データとします。測定レベルは測定機器のA/Dコンバータが受けた生データですので、後のPC側で処理します。さてこのデータをPCでどのようにして受けるかが問題になります。古いPCで動くソフトを作っても最新のWin10では動かない可能性があります。特にシリアルデータの受信に課題があります。受信するテキストデータはVBのアプリで受けるようにします。そのままVBのアプリで測定データを表示するようにしても良いのですが、細かいところまで気が回りません。そこでデータ表示はエクセルのグラフに任せることにします。VBのアプリで受けたテキストデータをそのままクリップボードにコピーしてエクセル上でペーストすることでデータを受け渡します。この方法が今の私には精一杯です。
(インターフェイスからのデータを受けるVBアプリ)
データを受信するとテキストボックスに順次周波数と測定データが表示されます。受信ごとにクリップボードにデータをコピーするので、このソフトを起動中は他のアプリでペーストなどを行うことは控えて下さい。データのコピーは「データコピー」ボタンをクリックすることでマニュアルで行うことも出来ます。
(エクセルで作成したデータグラフ化ソフト)
グラフは4種類色を変えて表示することが可能です。それぞれの読み込みボタンを押すことで、その色のグラフを表示します。このソフトではマクロを使用するので、起動時に必ずマクロオプションを使用する設定として下さい。グラフ表示をエクセルとしたことで皆さんのお好みに改造が可能となります。
(20Hzから740kHzまでの測定データのグラフ)
波形信号発生機能から出力される正弦波を振幅Maxでそのまま信号レベルで測定した結果です。さすがに740kHzまで同じレベルで出力することは出来ませんでしたが、約300kHz程度までは振幅の一定した正弦波を出力することが可能になっています。
(振幅設定のボリュームを一番絞った時)
-40dB程度からの表示が可能です。先にも記しましたが、あくまでも相対値として測定結果を捉えて下さい。
(振幅設定のボリュームを一番大きくした時)
(出力可能な最大周波数では出力の振幅が少し小さくなります)
(380kHzまでは振幅は一定です)
この機器の製作に関する全てのプログラムソース、VBアプリ、エクセルのファイルなどは次回の記事で公開させて頂きます。もう少し使いこなしの事例なども紹介出来ればと考えています。FPGAに関するポートの割り当てを今まで載せることが出来ませんでしたので以下に記載いたします。
(FPGAでのポート割付)
(MAX10のボード上でのポート割付)
今回の記事は如何でしたでしょうか。MAX10の機能はほんの少ししか使っていませんが、FPGAワールドを充分楽しんで頂けたのではないでしょうか。まだまだオーディオの製作は続きます。暑い夏もオーディオで乗り切りましょう。

オーディオクラフト工房へ戻る