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

更新日:2016年7月17日


FPGA(MAX10)でオーディオ関連機器を作ろう(その2)
オーディオクラフト工房は約1ヵ月のご無沙汰でした。製作に夢中で困難と攻防を繰り返しておりました。つい先日無事に完成いたしましたので、発表させて頂く運びとなりました。機能が多いので分割して順に公開させて頂きます。
基本的にはトランジスタ技術 2016年4月号増刊のMAX10・FPGAのボードを使用したオーディオ関連機器製作です。MAX10を使っていますが、その能力は10%も使っておりません。通のFPGAマニアには全く物足らない内容かもしれませんが、FPGAをデジタル回路の集積するために使っているということで、FPGAの基本に徹したものとなっております。
まずは完成した姿を見て頂きましょう。
(FPGA・MAX10を使用したオーディオ関連機器)
さてその製作の内容はこのようになっております。
波形信号発生、周波数カウンタ、信号レベル測定をこの1台で行うことが可能です。波形信号発生については今まで製作したことのある正弦波発振器をベースに、三角波、ノコギリ波、さらにデューティが変えられる方形波の発生が可能なようにしました。周波数カウンタについては今までの製作と同じものを組み込んでいます。更にオーディオの測定器として便利に使用出来るように、信号レベル測定の機能を組み込んでいます。今回は波形信号発生機能について詳しく説明いたします。
信号発生の原理などについては過去の製作を参照して頂けると幸いです。
http://nonchansoft.my.coocan.jp/audio/sinwave2015.htm
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/osc1.htm
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/oscnew1.htm
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/sin1.htm
基本原理を理解して頂いたという前提で以下に説明を続けます。
まずは全体の回路図をを見て下さい。(クリックすれ大きな回路図が開きます)
(波形信号発生・周波数カウンタ・信号レベル測定器の回路図)
MAX10・FPGAを中心にPICマイコンを2個使用しています。PICはひとつがメインマイコンでもうひとつが7セグメントLEDの表示を専門に行うサブマイコンです。FPGAのピンがもっと多く使用出来るのであればサブマイコンをFPGAに組み込むことも可能と思いますが、今回のMAX10ではそれが出来ませんのでこのような複雑な回路になりました。まあ個々は基本的な内容ですので、難しい部分は全くありません。
簡単な回路構成図を示します。
(今回製作回路の構成図)
前回CPLDで正弦波発振器を製作しましたが、今回はFPGAということでロジックが潤沢にありますので、正弦波以外に三角波、ノコギリ波、方形波を組み込みことが出来ました。正弦波は10bitデータを使用しているので、とても綺麗な波形を出力します。三角波、ノコギリ波についてはこのデータテーブルを置き換えたものに切り換えて使用することで、波形出力を可能にしています。出力される10bitデータはラダー型D/Aコンバータにてアナログ信号に変換されます。その後OPアンプとローパスフィルターを通って出力されます。ローパスフィルターを通るのは正弦波のみで三角波、ノコギリ波、方形波はフィルターを通らずに出力されます。OPアンプは±電源で駆動しています。マイナス電源については他機器の回路をまねて作っています。その部分の回路図は掲載出来ませんのでご理解下さい。このマイナス電源はPICマイコンよりPWM駆動制御で適正電圧を生成しております。
方形波については、D/Aコンバータを経由して出力される経路以外にデジタルのまま取り出すようにもしています。アナログ経由の方形波は振幅を可変出来ますが、デジタル出力の方形波は3.3Vの固定です。どちらもいろんな実験に活用出来ると思います。
波形信号発生に関するFPGA内部構成を示します。
(波形信号発生のFPGA内部構成)
今回は原発振周波数が48MHzなので、クロック発生モジュールでは最大24MHzの信号を発生することが可能になります。
(クロック発生モジュールの計算)
この信号をベースに正弦波テーブルより10bitデータを読み出して出力します。1周期256ステップのデータを割り付けていますので、24MHzでは単純計算で93kHz程度までしか出力出来ません。これではオーディオ機器では満足出来ませんのでそれ以上の周波数についてはテーブルデータを間引いて使用することで高い周波数まで出力することを可能にしています。
(周波数の間引き)
今回はなんと748kHzまで出力出来るようにしました。後で出力波形を見て頂きますが充分実用可能と思います。
(前面パネルの操作ボタンなどの配置)
左側より、7セグメント6桁の表示が2段あり、下段が波形信号発生の周波数です。信号は真中の下段より出力します。RCAとピンジャックがありますが、どちらからも同じ信号が出力されます。振幅は左側のボリュームで操作します。周波数設定は右側のボリュームで操作します。ボタン操作については下図に示します。
(ボタン操作の一覧)
通常操作としてはボリュームで大まかに周波数を設定して細かくはアップダウンボタンで設定します。基本的には1Hzごとの周波数設定が可能ですが、オーディオ関連機器としての製作ですので、そこまで細かくしていないこともご理解下さい。
(周波数の設定について)
ボリュームは絶対位置で設定しますので、上図のように6種類のモードを用意しています。最大周波数が低いほど細かい周波数設定が可能です。まあこのあたりは好みもあると思います。最終的には全てのソースを開示いたしますので、各自の好みに改造して下さい。
(操作の遷移図)
前面パネルの「MODE」ボタンがボリューム範囲設定スイッチ(SW3)です。最大周波数を切換ます。ボリュームでは最大680kHzですのでそれ以上はアップボタンで設定して下さい。「WAVE」ボタンが波形設定スイッチ(SW5)です。波形の種類を切換ます。「SIGNAL」ボタンが出力ON/OFFスイッチ(SW4)です。長押しすることで正弦波スイープになりますが、この説明は信号レベル測定を説明するページで後日行います。波形設定スイッチを長押しすることで方形波のデューティを設定出来るようになります。まあ細かいところはPICのソースを後日参照下さい。アップダウンボタンを押すことでスイッチ操作モードになります。再びボリューム操作に戻るにはボリューム操作設定スイッチを押して下さい。
これらの操作はメインのPICが行います。設定した周波数を7セグメント表示するのはサブのPICマイコンになります。メインとサブはUARTでシリアル接続されており、メインからサブに表示データを送り込むことで、後はサブが勝手に表示を継続しますので、メインの負担は軽減されます。先にPICマイコンのポート割り付けを記します。
(メインマイコンのポート割り付け)
(サブマイコンのポート割り付け)
(メインマイコンからサブマイコンへのデータ)
4バイトのデータで表示データを送り込みます。発振周波数以外に文字表示も行いますので、データを工夫して両方の表示を可能にしています。
波形信号発生に関しての説明は以上です。今回の製作にあたり出力される信号波形をオシロスコープで確認したかったので、UBS接続のPC表示のオシロスコープをネットで購入しました。
(USB接続オシロスコープ:VDS1022I)
(とてもコンパクトに出来ています)
(プローブも本格的です)
それでは測定した波形を見て下さい。
(正弦波1kHz)
(正弦波300kHz)
(三角波300kHz)
(ノコギリ波50kHz)
(方形波20kHz)
(方形波600kHz:デジタル出力)
(方形波600kHz デューティ可変:デジタル出力)
(正弦波20kHz:振幅小)
如何でしょうか、ここまで出来れば満点合格ではないでしょうか。とてもよく仕上がったと思います。他の機能については後日別ページで行います。今回の最後に中身と背面を見ておいて下さい。
(機能ごとにまとめられた内部配置)
(背面には方形波のデジタル出力があり)
久々の大作でしたので、かなりの時間が掛かってしまいましたが、まだまだオーディオクラフト工房は続きます。今後にご期待下さい。

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