目次>7章 各種情報>(11)ラダー抵抗回路によるD/A変換の仕組み

ラダー抵抗回路によるD/A変換の仕組み

更新日2007.12.15

ここでは、ラダー抵抗回路によるD/A変換の原理について説明します。

D/A変換とは、デジタルデータアナログ信号(通常は電圧)に変換することです。
PICの出力ポートの0,1の組み合わせ(デジタルデータ)で該当する電圧(アナログ信号)を出力します。

ラダー抵抗回路は、2種類の抵抗だけで作ることができるD/A変換回路です。

(1)D/A変換について
例えば、メモリに記録された音声データでスピーカを鳴らす場合を考えて見ます。

メモリもPICも基本的にデジタルデータしか扱えませんので、スピーカに出力するためにはアナログ信号に変える必要があります。
下の図はそのイメージを表しています。

D/A変換とは、デジタルデータ(0と1のビットの組み合わせ)をアナログ信号(通常は電圧)に変換する事です。

では、入力が3ビットのD/A変換を考えて見ます。
3ビットで表せる数は、下の表のように0〜7です。

ビット2ビット1ビット010進数
従って、3ビットのD/A変換回路では、最大電圧を8等分した任意の電圧が出力できます。
下のグラフは、最大電圧を5Vとした時の様子を表しています。
3ビットの場合、可変できる最小電圧は、0.625Vです。

従って

出力電圧 = 0.625V × デジタルデータ値

8ビットであれば、0〜255まで表現できますので、最大電圧を256等分した電圧が最小の刻みになります。
下のグラフは、最大電圧を5Vとし、横軸は0〜255までのデジタルデータとしたものです。


8ビットの場合、可変できる最小電圧は、約0.0195Vで3ビットよりもきめ細かに制御できる事が分かります。
D/A変換の精度は、デジタルデータのビット数で決まります。

(2)ラダー抵抗回路によるD/A変換
それでは、本題のラダー抵抗回路によるD/A変換の説明に入ります。

ここでは、3ビットの例で説明します。
8ビットでも10ビットでも考え方は同じです。

回路
以下のラダー抵抗回路を例に説明します。

抵抗は、1KΩと2KΩを使っていますが、抵抗値が1:2の関係であれば何でもOKです。
ただし、1KΩ以下だと無駄な電流が増えますし、1MΩ以上だとノイズが乗りやすくなります。
ここで、以下の点を覚えておいて下さい。
・ラダー回路をつなぐPORTは出力モードにする
・PICの出力ポートは、1をセットするとVddに接続される(実際は、Vdd−0.5V程度)
・逆に、0をセットするとGNDに接続される(ほぼ0V)

デジタルデータと出力電圧
この回路のデジタルデータと出力電圧の関係は以下のようになります。
RB2RB1RB010進数Output
(V)
00000
00110.625
01021.250
01131.875
10042.500
10153.125
11063.750
11174.375
前提として、PICのポートに1をセットした時の出力電圧を5V,0をセットした時の出力電圧を0Vとしています。

また、Outputには電流を流さない事も前提です。

この表のいくつかを例に、どうしてそうなるのか説明します。

RB2〜0 : 000の場合 0V

まず初めは、全てのポートに0をセットした場合です。

PICの出力ポートは、0をセットするとGNDに接続されます。
従って、上の回路は下のように書き直せます。

この回路は、GNDにしか接続されていませんので、Outputは0Vになります。

RB2〜0 : 100の場合 2.5V

次に、RB2のみ1をセットした場合です。

PICの出力ポートは、0をセットするとGNDに、1をセットするとVddに接続されます。
従って、上の回路は下のように書き直せます。

上と全く同じですが、抵抗の向きを変えて書き直しました。
そして、Outputより下の抵抗の合成抵抗を求め、書き直すとこちらになります。

5Vが2KΩの抵抗2本で分圧されていますので、Outputは半分の2.5Vになります。

RB2〜0 : 001の場合 0.625V

次に、RB0のみ1をセットした場合です。

PICの出力ポートは、0をセットするとGNDに、1をセットするとVddに接続されますので、上の回路は下のように書き直せます。

上と全く同じですが、+5Vが一番上になるように書き直しました。

最終的に求めたいのはcの電圧ですが、すぐには計算できませんので、aの電圧→bの電圧→cの電圧の順に算出します。

a点の電圧を求めるには、a点より下の合成抵抗を算出して1本の抵抗に出来れば求められます。

合成抵抗を求めて書き直したのが左の回路図です。

a点の電圧 = (5V/(2+1.0476))×1.0476
 = 1.7188V

続いて、b点の電圧ですが、同様にb点より下の合成抵抗を算出して1本の抵抗で書き直します。

a点の電圧は、1.7188Vですので

b点の電圧 = (1.7188V/(1+1.2))×1.2
 = 0.9375V

b点の電圧が求まりましたので、先の回路図のc点(Output)の電圧が計算できます。

Output電圧 = (0.9375V/(1+2))×2
 = 0.625V

(3)まとめ

3つの例で説明しましたが、他も同様に計算すると以下の表のようになります。

RB2RB1RB010進数Output
(V)
00000
00110.625
01021.250
01131.875
10042.500
10153.125
11063.750
11174.375
デジタルデータが3ビットでポートの出力電圧が5Vの場合、デジタルデータ値とD/A変換結果の電圧は以下の式で求められます。

電圧 = (5V/8)×デジタルデータ値

デジタルデータ値は、左の表の10進数欄の値です。

よく使われる8ビットの場合は、以下の式で求められます。
電圧 = (5V/256)×デジタルデータ値
(デジタルデータ値:0〜255)

こちらで、8ビットのD/A変換により正弦波を出力する実験をしています。

<その他>
このラダー抵抗回路は電流を取り出せませんので、オペアンプなどでインピーダンス変換する必要があります。
オペアンプをボルテージフォロワで使うと、簡単にインピーダンス変換ができます。