アフィリエイト広告
アフィリエイト広告

D/A コンバータを使って Arduino から正弦波を出力する (1)

4-20mA電流信号を出力する回路を作ったので、何かの信号を伝送しようと思いました。
で、信号といえば正弦波かなぁ、と。正弦波といえばウィーン・ブリッジ発振回路ですかねぇ。

そんなことを考えながらジャンク箱をかき回していましたら、何やら IC が。62352A? なんだろ?
これ「8BIT 12CH D-A CONVERTER WITH BUFFER AMPLIFIERS」っていう D/A コンバータだそーで、パーツ品番は「M62352AGP」です。

D/A コンバータを使ってみよう

D/A コンバータというと、最近は DAC とかいってオーディオ機器の一種のことらしいですが、こいつはそれとは違うようです。

図 1 BLOCK DIAGRAM FOR EXPLANATION OF TERMINALS

図 1 は DatasheetCatalog.com にあったデータシート (三菱電機) に載っていたブロックダイヤグラムです。

入力は 12 ビットのシリアルデータをシフトレジスタで受けます。シリアルデータの一部はデコーダに渡され、出力するアナログチャンネルを指定します。

ん?これって「シフトレジスタでデジタルピン数を減らす」でやったこととおんなじ仕組みじゃん 。

えーと、こいつに Arduino からデータを送れば、アナログ出力が得られる、と。アナログ出力ってことは、UNO のような PWM じゃなくて Due みたいに本当のアナログ出力ができるってこと。
だから、4-20mA 電流信号回路に放り込めるぞ、っと (^_^;)

とゆーことで、Arduino で (疑似じゃない) アナログの正弦波を出力してみよう!

D/A コンバータのデータフォーマット

Arduino から D/A コンバータへ渡すシリアルデータのフォーマットを、データシートで調べてみました。が、なんだかなぁ、難しくはないんだけどこんがらがってしまいました。

以下、データフォーマットについて、備忘録的説明。

Digital data format

入力データのフォーマットは図 2 のようになっています。

データは全体で 12 ビット。MSB ファーストで送り込み、最初の 4 ビットが出力するアナログチャンネルの選択、あとの 8 ビットが出力する値です。

図 2 DIGITAL DATA FORMAT

DAC select data

D8D9D10D11DAC selection
0000Don’t care
0001A1 select
0010A2 select
0011A3 select
0100A4 select
0101A5 select
0110A6 select
0111A7 select
1000A8 select
1001A9 select
1010A10 select
1011A11 select
1100A12 select
1101Don’t care
1110Don’t care
1111Don’t care
表 1 DAC SELECT DATA

表 1 は、出力するアナログチャンネルの選択データです。

この表を見ると何も疑問はないわけですが、よーく考えるとですねぇ、変なんです (^_^;)

MSB ファーストですよねぇ。
MSB とは Most singnificant bit 、つまり最も大きな値のビットのことです。で、D11 ビットが MSB でしょ?

つまり、A1 チャンネルを選択するときのビット列は 1000 、16 進数でいうと 0x8 です。A2 チャンネルは 0x4 、A3 は 0xC 、A12 は 0x3 でしょ。です。

実際どうするかは別ですけど、もし出力チャンネルの数字とビット列を合わせようと思ったら、ビット列を反転させる必要があります。
ここんところ、要注意です。

DAC data

D0D1D2D3D4D5D6D7D-A output
00000000Vref / 256 x 1
10000000Vref / 256 x 2
01000000Vref / 256 x 3
11000000Vref / 256 x 4
:::::::::
01111111Vref / 256 x 255
11111111Vref / 256 x 256
表 2 DAC DATA

表 2 は出力するアナログ電圧のデータです。

ここもちょっと気を付けていないといけない。ビットの並びが、表の左側が LSB です。
でも、0x00 が最小値で基準電圧の 1/256 、0x01 が基準電圧の 2/256 と、わかりやすいですね。最大値は 0xFF で、Vref が出力されます。

なお、表では簡略化してしまっていますが、基準電圧 Vref は VDD – VSS で、最低電圧が VSS となります。VSS は、GND 電圧が推奨のようです。

次回へ

さて、シフトレジスタへ渡すデータのフォーマットがわかりましたので、あとは簡単です。以前やった、シフトレジスタとラインデコーダを使った 7 セグメント LED の制御「シフトレジスタでデジタルピン数を減らす」と基本は同じですから。

次回は、実際の回路と、Arduino のスケッチを作ることにしましょう。

タイトルとURLをコピーしました