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

更新日:2016年8月3日


FPGA(MAX10)でオーディオ関連機器を作ろう(その3)
今回は周波数カウンタ部分とFPGA内部の簡単な説明を行います。前回の記事にてトランジスタ技術 2016年4月号増刊のMAX10・FPGAのボードを使ったオーディオ関連機器の全貌を紹介させて頂きました。
http://nonchansoft.my.coocan.jp/audio/max10step2.htm
その完成した姿はこのようになっています。
(FPGA・MAX10を使用したオーディオ関連機器)
さてそれらの機能については次のようになっています。
波形信号発生については前回の記事で説明させて頂きましたので、今回は周波数カウンタの部分を説明いたします。この部分は私の過去の製作とほぼ同じに構成にしています。唯一違う部分は測定ゲート時間の切換えです。今回機能を豊富にしたので前面に配置する操作スイッチなどが増えてしまったので、このゲート時間切換えについては同一ボタンを押すごとに切り換わるようにしました。またクロックが速くなったので、分周比の調整もしています。
平行して過去の製作も参照して頂けると幸いです。
http://nonchansoft.my.coocan.jp/audio/freqcount10.htm
周波数カウンタについてはPICマイコンは全く関係していません。測定ゲート時間の切換えも含めてFPGAだけで完結しています。但し、周波数カウント表示の部分を次回説明する予定の信号レベル測定の結果表示も使っているので、いろいろと周りからいじられているというところはあります。
(周波数カウンタのFPGA内部構成)
今回は周波数表示にゼロサプレス機能を追加しました。上の桁が「ゼロ」の場合は表示しないという機能ですが、すみません、測定オーバーと全く連動出来ていませんでした。ということで測定周波数オーバーが出る場合にはその機能が完全ではないかもしれませんの、ご理解下さい。また今回の製作ではその測定オーバーの表示は行いませんでした。オーディオの周波数範囲内での使用を考えているたとご理解下さい。信号レベル測定表示のため、横槍でそのデータを割り込ませている部分もあります。
(前面パネルの操作ボタンなどの配置)
周波数カウンタの表示は上側の7セグメントで行います。前面パネル右端にあるレベル・カウンタ切換スイッチは「FREQ.」にします。測定ゲート時間の切換えは表示部すぐ右にある「SEL」ボタンで行います。周波数測定の入力は上側に配置している入力端子から行います。RCA入力は信号レベル測定用ですので、その両脇に配置しているピンジャックから入力します。もちろんこれらの操作は私の製作機での内容なので、この辺りは皆さんの自由にして下さい。
(計測ゲート時間:1secでの表示:19990Hz)
(計測ゲート時間:100msecの表示:318kHz)
(計測ゲート時間:10msecの表示:668kHz)
この装置で出力出来る周波数については完全に測定が可能です。但し、入力アンプの回路構成の影響と思いますが、正弦波については周波数が低いと正しい周波数を表示してくれません。また三角波、ノコギリ波の周波数表示も正しく無いときがあります。その場合は背面の方形波デジタル出力からの周波数を測定して今この装置から出ている周波数が表示通りであることを確認して下さい。まあ下段の7セグメントに表示される周波数は出力しているもので間違いはありません。気になる方は入力アンプの回路構成を独自に改良をお願いします。
ここからはFPGA内部の構成について簡単に説明します。まずは今回の製作のFPGA内部のモジュール接続図です。実際のソースは次回の記事に載せる予定です。クリックすると大きな図を見ることが出来ます。
(FPGAの内部モジュール全体図)
このままではよく見えませんので、上側部分より順に拡大図で示します。クリックすると大きな図を見ることが出来ます。
(FPGA内部・その1)
源発振(48MHz)を使用して周波数カウンタに必要な信号を生成します。測定ゲート時間切換用のスイッチにはチャタリング除去を入れています。ピリオドの生成とセグメント桁切換があります。周波数カウンタのベース記事は次を参照下さい。CPLDで構成しておりますが考え方は同じです。
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/smcnt1.htm
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/fcounter1.htm
(FPGA内部・その2)
6桁の10進カウンタを並べて測定ゲート時間内に入力されるカウントを数えています。ラッチした後ゼロサプレスを通して出力します。先にも書きましたが測定オーバーフロー時にはゼロサプレスがうまく働きませんのでご理解をお願いいたします。ゼロサプレスする桁は7セグメント表示がされないデータを出力しています。
(FPGA内部・その3)
ゼロサプレスを経由した6桁10進カウンタのデータは一旦24bitのセレクタに入ります。信号レベル測定はPICマイコンで行いますので、その表示データを一旦このFPGAに24bitのシフトレジスタで取り込んでラッチします。どちらを表示するかで先ほどのセレクタで切換えてダイナミック表示を行います。
(FPGA内部・その4)
ここからは波形信号発生に関する部分のFPGA内部モジュールです。PICマイコンで生成された周波数を決定するための分周設定データを24bitのシフトレジスタに入力しラッチします。このデータはクロックジェネレータに入力されて所定の周波数を出力します。後で説明する正弦波モジュールでは256クロックで1周期としていますので、このクロックジェネレータで出力される周波数は256倍になっています。この倍数は周波数が高くなるごとに小さくなっていきます。源発振周波数が異なりますがクロックジェネレータの原理は過去の記事を参照下さい。
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/osc1.htm
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/oscnew1.htm
(FPGA内部・その5)
正弦波、三角波、ノコギリ波のモジュールを切換えて使用します。それぞれ10bitのデータが出力されますのでセレクタで切換ます。方形波はデューティを変化させる機能を持っていますのでその処理をして出力します。アナログ系の出力端子を固定するために、方形波も他の波形と同じモジュールに入力して強引に10bitデータを作成して出力します。デジタルの方形波はそのまま出力しています。正弦波のみ最終的にローパスフィルタを通すのでその切換指示の出力も取り出しています。正弦波の出力については過去のこの記事を確認下さい。
http://www.max.hi-ho.ne.jp/nonchansoft/cpld/sin1.htm
以上簡単に説明しましたが、詳細は次回の記事に載せるソースで確認下さい。
今回はFPGAをデジタル回路の集積するためだけに使っているのでこれだけのモジュールを内蔵しても10%も使用しておりません。おそるべしFPGAですね。次回にもご期待下さい。

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