1年ほど前に購入したSpartan-3Aキット。これで三相信号発生器を作ってあったのだが、ボードむき出しのままだったので、取り扱いが面倒だった。
せっかく豊富なゲートを構成できるにもかかわらず、使い勝手の面倒さのために、あまり使われることなく放置。そして、AlteraのMAXⅡばかりに気をとられていては駄目だと思い、ケースに収め利用率を向上させることにした。
もともと、開発用に購入したボードだったので、きちんとしたケースに入れようという気持ちがあまり起こらなかったせいもあって、結局安いケースにすることにした。
ダイソーに行き、150円のA4書類ケースがちょっと大きめだったけど、とりあえずこれにしてみた。
プラスチック製なので加工は簡単。とは言うものの、それなりに時間がかかってしまった。
しかし、ケースに収めるとなかなかすっきりとしてしまって、使い勝手も良くなりそうだ。もっと早くやっておけばよかったと反省。
今回、このプラケースに入れるにあたって、FPGAのロジックもいくつか手を加えることにした。
その第一が、外付けだったD/Aコンバータをなくすことだった。
ネットを調べていたら、Neo-Tech-LabさんのサイトでPDM(Pulse Density Modulation)によるD/Aコンバータが紹介されていた。
ちなみに、このサイトを知るきっかけになったのは、MAXⅡを使った自作記事を探しているときだった。
このPDMを使ったDACだが、とてもシンプル、加算器だけでつくれるということで、CPLDやFPGAの中に入れることができるというとても素晴らしいものだった。
原理的に周波数をそれほど高く設定できないという欠点はあるが、外付けDAC回路がなくなるというメリットが魅力的だった。ただし、LPFが必要となるのだけれど、簡単なRC型のフィルターが使えるのでそれほどではない。というわけで、これを試してみることにした。
第二は、三相をより精密に作ること。
以前のヴァージョンは、Sin波テーブルは1/4波形分だけ格納する形にして、データ量を少なくするようにしたのだが、ごくわずかだが位相誤差がどうして出てしまい、正確に同期の取れた三相にはならなかった。
そのため、思い切ってSin波形を3つ用意することにした。あわせて、出力Bit数も6から12にあげてみることにした。
以上の点を踏まえて、VHDLの修正を行った。
PDMの回路は入手できたが、VHDLソースはなかったのでうまく組めるだろうか?という多少の不安がある。
念のためModelSimで動作チェックを行ってみようとしたが、シミュレーションが途中で止まってしまう。どうやら、無料バージョンでは実行できるコード量に制限があり、今回の修正でSin波形をたくさん入れたため動かなくなってしまったようだ。
仕方なく、1相だけにして挑戦してみることに。。。
偶然通りかかりました。
返信削除×乗算器 ⇒ ◎加算器
PDM D/Aは8bit~12bit程度の加算器で十分でしょう。
ただ、DDSのDFL部は24bit程度の加算器を使って、上位9~12ビットをウェーブメモリに使います。3相の位相差を求めるのは24bitを使い、小数点以下のオフセットを指定すればそこそこ精度良く出せるはずです。
☆Tomoaki Ueda☆ さん、コメントどうもありがとうございます。気がつくのが今になってしまって大変申し訳ありません。このBlogは誰も見ていないものだと思っていましたので。
返信削除しかし、PDMの先生に見ていただけるなんて、驚きとともに、とても光栄です。
> ×乗算器 ⇒ ◎加算器
「加算器」ご指摘ありがとうございます。間違い修正しました。
今回作ったものは、PDM D/Aを12bit加算器、DFLが32bit加算器で上位12bitをSinテーブルに渡しています。3相は120度づつずらしたSinテーブルを3つ用意し、位相差は固定としました。全体的にかなり無駄の多い構成かと思います。
FPGAボードのCLOCKが50MHz、C-R型のLPFを1MHzで試したのですが、あまり良い結果が得られませんでした。
PDMのD/Aは、元CLOCKの1/100以下で作るものかなと今は考えていまして、100kHz程度のLPFで近いうちに試してみようと思います。
しかし、D/Aがこんなに簡単で性能の良いものが出来るなんてすごいですね。これからのご活躍期待しています。
では、今後ともよろしくお願いいたします。