この記事でわかること
・R-2Rラダー回路の仕組み
・電流出力型DACの動作原理
・定番IC DAC0800の使い方
DAコンバータIC(以下、DACと記す)には、
電流出力型と呼ばれるタイプがあります。
これはデジタル入力値に応じて出力電流が変化するのですが、
電圧に変換する際は、外付けのオペアンプ等が必要になります。
しかしながら、高速・高精度が要求される用途では、
この電流出力型が適していることから、
本記事では、電流出力型DACの定番ICである
テキサス・インスツルメンツ製DAC0800の使い方を解説します。
また、その動作原理を理解するため、
各種R-2Rラダー回路についても説明します。
<注意点>
本記事は2023年時点でのデータシートを基に作成しています。
使用の際は、最新のデータシートを必ず確認して下さい。
R-2Rラダー回路の動作原理
R-2Rラダー回路には様々な種類があり、
今回、解説するDAC0800のR-2Rラダー回路は
定電流源を使うタイプですが、回路が複雑なので、
簡単なタイプから順に説明していきます。
電圧出力タイプ
出力電圧Voutは以下となります。
Vout=Dn/2n × Vref ・・・(1)
Dn:デジタル入力値(nビット)
Vref:基準電圧
オペアンプを使用したボルテージフォロワ
(ゲイン1倍の非反転増幅回路)により、
出力バッファとして動作することで、出力電流を大きくできます。
3ビットのDA変換回路を例に説明します。
最上位ビット(MSB)だけをONした時、
Vout=Vref/2
2番目のビットだけをONした時、
Vout=Vref/4
最下位ビット(LSB)だけをONした時、
Vout=Vref/8
となります。
従って、nビットの回路の場合、
n番目のビットだけをONした時は
Vout=Vref/2n
になります。
次に、複数ビットをONした場合ですが、
重ね合わせの理(※)により、
各ビットが単体でONした時の電圧の合計になります。
※重ね合わせの理
複数の電源がある回路で、任意の点の電圧は
各電源が単独で存在した場合の値の和に等しくなります。
単独で存在した場合とは、電圧源を1つだけ残し、
他の電圧源は短絡した状態です。
今回のケースではスイッチを一つだけONすることが、
この状態に該当します。
今回の3ビットの例で言うと、全てのスイッチがONの場合
Vout = Vref/2+Vref/4+Vref/8
= 7/8 × Vref
デジタル入力値で表現すると、D8=(111)=7なので、
(1)式に当てはめると、
Vout = Dn/2n × Vref
= 7/23 × Vref
= 7/8 × Vref
となり、上の式と一致します。
この3ビット回路に使用される抵抗は6個で、スイッチは3個です。
4ビットだと、抵抗8個、スイッチ4個が必要です。
従って、nビットで必要な数は抵抗2n個、スイッチn個になります。
DAC回路の別方式である抵抗ストリング方式では、
必要な抵抗とスイッチの数が2n個であり、
ビット数が増えると膨大な数になるのに対し、
R-2Rラダー方式は数を少なくできます。
また、抵抗の数が少ないと、INLを小さくできます。
INL:積分直線性誤差(Integral Non-Linerarity)
※抵抗ストリング方式とINLについては下記記事で解説してます。
この電圧出力タイプですが、
基準電圧Vrefから見た抵抗値がスイッチの状態で変化するため、
各抵抗に流れる電流はデジタル入力値によって異なります。
電流値が変化すると抵抗の発熱も変わるため、
温度によって抵抗値が変動し、出力電圧に誤差が生じます。
その問題を解決するのが、次に紹介する電流出力タイプになります。
電流出力タイプ
出力電流Ioutは以下となります。
Iout = Dn/2n × Vref/R ・・・(2)
Dn:デジタル入力値(nビット)
Vref:基準電圧
電圧に変換する際は、一般的にはオペアンプを用います。
オペアンプの出力をー入力に戻す負帰還回路を構成している場合、
+端子とー端子は同じ電圧になるようにオペアンプは動作します。
(この特徴をイマジナリーショート(仮想短絡)と呼びます)
※オペアンプについては下記記事で解説しています。
この回路の場合、+端子がGNDに接続されているので、
-端子の電圧もGNDになります。
この時、ラダー回路からの出力電流Ioutですが、
オペアンプの入力インピーダンスは非常に大きいため、
ー端子には電流が入力されず、Rfb側に流れます。
従ってオペアンプの出力電圧Voutは、
Vout = -Iout × Rfb
となり、Ioutに比例したVoutを出力することで、電流を電圧に変換しています。
但し、負電圧になるため、正電圧にする場合は、
もう一段オペアンプを接続し、反転増幅回路を構成することで正電圧にします。
次にラダー回路の電流出力動作について、3ビットのDA変換回路を例に説明します。
先程のイマジナリー・ショートの説明より、
電流出力はGNDに接続されていると考えることができます。
これにより、スイッチがON/OFFどちらでもGNDに接続されるため、
基準電圧源Vrefから見た抵抗値はスイッチの状態に関係なく一定です。
この抵抗値ですが、上図のように
①の部分の合成抵抗は2Rになり、
①を含めた②の部分の合成抵抗も2Rになります。
つまり、何ビットあったとしても、
最上位ビット(MSB)を除いた部分の合成抵抗は2Rです。
従って、Vrefから見た抵抗値は、
MSBの抵抗2Rとの並列抵抗になるので、Rになります。
Vrefから流れる電流Irefは
Iref = Vref/R
となり、
MSBの抵抗2Rに流れる電流は、
②の部分の合成抵抗2Rと二分されるので、Iref/2です。
2番目のビットの抵抗2Rに流れる電流も
①の部分の合成抵抗2Rと二分されるので、Iref/4になり、
同様の手順により、
最下位ビットの抵抗2Rに流れる電流はIref/8となります。
以上から、n番目のビットに流れる電流はIref/2nと表現できます。
これらの電流はスイッチONするとIout+側、OFFするとIout-側に流れます。
今回の例では、Iout-+Iout- = 7/8 × Irefで一定になります。
(右端のIref/8だけ、どのスイッチにも流れないため、合計がIrefにならない)
全てのスイッチがONの場合
Iout=Iref/2+Iref/4+Iref/8
=7/8 ×Iref
=7/8×Vref/R
デジタル入力値で表現すると、D8=(111)=7なので、
(2)式に当てはめると、
Iout = Dn/2n × Vref/R
= 7/23 × Vref/R
= 7/4 × Vref/R
となり、上の式と一致します。
この電流出力タイプは、
電圧源Vrefから見た抵抗値がスイッチの状態で変化しないので、
各抵抗に流れる電流はデジタル入力値に関係なく一定です。
従って、抵抗の発熱も変わらず、温度による抵抗値の変動がないため、
電圧出力タイプよりも誤差を小さくできます。
また、電圧源Vrefから流れる電流Irefは一定であり、
スイッチで電流の流れる方向(Iout又は/Iout)を切り替えるだけなので、
出力電流の応答時間(セトリングタイム)を短くでき、高速化できます。
欠点は、電圧変換をオペアンプで行うと、負電圧が出力されるため、
オペアンプは両電源タイプが必要になります。
そして、正電圧にしたい場合は、
更にオペアンプを接続して、反転増幅回路を構成しなくてはなりません。
電圧変換を抵抗で行えば、正電圧を出力でき、高速動作にできますが、
外部に電流が流れる分、Rfbに流れる電流が減るため、Voutが低下してしまいます。
このような欠点がありますが、
電圧出力タイプに比べ、誤差を小さくでき、高速動作が可能であることから、
DACの多くが電流出力タイプに電圧変換のオペアンプを内蔵した形となっています。
定電流源型 電流出力タイプ
先程の電流出力タイプにおいて、電流値を決めるのは抵抗R、2Rですが、
実際には、スイッチのON抵抗も加える必要があるため、
ON抵抗のばらつきによって、各スイッチに流れる電流が変化してしまい、
誤差の要因となります。
そこで、定電流源を使用することで、
各スイッチに流れる電流を一定にします。
出力電流Ioutは以下となります。
Iout = Dn/2n × Vref/Rref ・・・(3)
電流出力タイプの(2)式と同じに見えますが、
R-2R回路の抵抗値Rではなく、
定電流源回路に使用する基準抵抗Rrefになります。
まず、オペアンプOP1とトランジスタQ1は、定電流源回路です。
OP1の出力がQ1のベースに接続されていますが、
イマジナリー・ショートにより、OP1の-端子が+端子と同じ電圧(0V)になるように
Q1に流れるコレクタ電流ICを制御します。
この時、Rrefに流れる電流Irefは、
Iref = Vref/Rref
これが、そのままコレクタ電流Icになるので、
IC = Iref
になります。
エミッタは抵抗Rを介して負電源‐VEEに接続されており、
エミッタ電流IEは
IE = IC+IB
この時のベース電流IBは、Q1の電流増幅率をhfeとすると、
IB = IC/hfe
となり、hfeは十分大きい(一般的には100以上)ので、
IE = IC+IC/100
=101/100 × IC ≒ IC
となるので、Rに流れる電流はIrefになります。
IE ≒ IC = Iref
このIrefが定電流源となり、
各スイッチに流れる電流の基準電流となります。
次にトランジスタQ1 ~Q5のベースは同電位となっており、
ベース・エミッタ間電圧VBEが全て等しいとした場合、
Q1に接続された抵抗Rに印可される電圧(Iref × R)と、
Q2に接続された抵抗2Rに印可される電圧は同じなので、
Q2に流れる電流IH1は
IH1=(Iref × R)/2R=Iref/2となります。
次に回路の下側にある抵抗Rに流れる電流IL1ですが、
先程、R-2Rラダー回路の説明で述べたように、
このRを含めた右側のラダー部分の合成抵抗は2Rになります。
この合成抵抗2Rに印加される電圧は、
Q2に接続された抵抗2Rに印可される電圧と同じなので、
流れる電流IL1はIH1と同じIref/2となります。
IL1=IH1=Iref/2
このIL1はQ3に接続された抵抗2Rに流れるIH2と、
その右側の抵抗Rから流れてくるIL2の合計になりますが、
先程同様、IH2とIL2は同じ値になる(つまりIL1が2等分)ため、
IH2=IL2=IL1/2=Iref/4
同様の手順で、
Q4に接続された抵抗2Rに流れる電流IH3はIref/8となります。
まとめると
1ビット目がIH1=Iref/2
2ビット目がIH2=Iref/4
3ビット目がIH3=Iref/8
となることから、
nビット目に流れる電流はIref/2nになります。
3ビット全てのスイッチがONの場合
Iout = Iref/2+Iref/4+Iref/8
= 7/8 × Iref
= 7/8 × Vref/Rref
となります。
これをデジタル入力値で表現すると、D8=(111)=7なので、
(3)式に当てはめると、
Iout = Dn/2n × Vref/Rref
= 7/23 × Vref/Rref
= 7/8 × Vref/Rref
となり、上の式と一致します。
Ioutの最大値は7/8 × Irefとなり、Irefより1/8Iref少ない理由ですが、
IrefはQ1~Q5に流れる電流の合計なのに対し、
Ioutはスイッチを経由しないQ5の電流分(1/8Iref)が含まれないからです。
(nビットの場合、Ioutの最大値はIrefより1/2n × Iref分少なくなります)
また、先程の説明で、各トランジスタのVBEが全て等しいとしましたが、
実際にはエミッタに流れる電流によってVBEが変化するため、
マルチエミッタ トランジスタを使用しています。
これは、一つのトランジスタに複数のエミッタを持つもので、
流れる電流に応じて、エミッタの数を増やし、
エミッタ1個あたりに流れる電流を同じにすることで
VBEを同じ電圧にできます。
この定電流源タイプは、スイッチのON抵抗の影響を受けないため、
誤差を小さくできます。
また、出力電流がシンク電流(DAC内に流れ込む方向)なので、
オペアンプOP2で電圧変換すると正電圧が出力できるため、
正電圧変換のために更にオペアンプを接続する必要がありません。
Vout = Rfb × Iout
(3)式と組み合わせると、
Vout = Dn/2n × Vref/Rref × Rfb ・・・(4)
となり、
Rref = Rfbにすれば、
Vout = Dn/2n × Vref
になります。
DAC0800の特徴
テキサス・インスツルメンツ製DAC0800は
発売から20年以上経過しているロングセラーのDACです。
DIPパッケージがあり、価格も数百円程度と使いやすいです。
Amazonを見ると、コピー品と思われる製品が沢山出てきます。
DAC0800と同一仕様の製品でアナログデバイス製のDAC08があるのですが、
現在は新規設計非推奨となっています。
DAC0800の特徴は以下の通りです。
・分解能: 8ビット
デジタル入力はパラレル方式となっており、入力ピンが8つあります。
現在の主流であるSPIやI2Cなどの通信を用いたシリアル入力方式と違い、
入力ピン数が多くなりますが、マイコンの汎用入出力(GPIO)を
そのまま接続すれば良いので、データの入力は簡単です。
・電源電圧:±4.5V~±18V
±電源が必要ですが、±5V~±15Vのアナログ出力が可能です。
・セトリング時間:100 ns
入力データが変化してから所定の出力になるまでの時間です。
数us程度の電圧出力型と比べ、高速と言えます。
ただし、これは出力電流のセトリング時間であり、
オペアンプで電圧変換を行う分も加える必要があります。
※セトリング時間については、先程紹介した記事で解説してます。
・ フルスケール誤差: ±1 LSB
1LSBということは最下位ビット分の誤差があるという事です。
例えば基準電流Iref=2mAに設定した場合、
出力電流の誤差が1ビット分の1/256なので、
2mA/256 ≒ 7.8uA
なので、±7.8uAの変動があることになります。
これについても、電圧変換を行うオペアンプの誤差が加わります。
以上より、外付けオペアンプを高速高精度タイプにしないと、
DACの性能を十分に発揮できません。
DAC0800の使い方
出力電圧の設定
R-2Rラダー回路は、先ほど解説した定電流源型 電流出力タイプなので、
出力電圧は(4)式で求められます。
Vout = D/28 × Vref/Rref × Rfb
= D/256 × Vref/Rref × Rfb
Rref = Rfbにすれば、
Vout = D/256 × Vref
になります。
Vref:基準電圧
VREF(+)ピンから入力される基準電圧です。
Rref:基準抵抗
基準電流Irefを決定する抵抗です。
Iref = Vref/Rref
D:デジタル入力値(8bit)
B1~B8ピンから入力される8bitの2進数です。
Dの最大値は2進数で1が8個の(1111 1111) = 255です。
出力電流Ioutは以下で決まります。
Iout = D/256 × Iref
Rfb:フィードバック抵抗
電圧変換オペアンプに接続される抵抗です。
出力電圧Voutは以下で決まります。
Vout = Rfb × Iout
入出力ピン
V+、Vー:±電源入力(±4.5~±18V)
電源電圧(負電圧)が高いほど、最大出力電流Iout(max)を大きくできます。
(V- = -5V時は2mA、V- = -15V時は4mA)
各電源ピンには0.1uFのバイパスコンデンサを接続します。
B1~B8:デジタル入力
MSBがB1、LSBがB8になります。
VLC:しきい値制御入力
デジタル入力のH/Lレベルのしきい値VTHを調整する時に使用します。
VTH = 1.4V+VLC
デジタル入力信号を出力するICの論理レベルに合わせます。
通常の使用(TTLレベル※)ならば、VLCをGNDに接続することで、
VTH = 1.4Vになります。
(※TTLレベル VIH:2.0V以上、VIL:0.8V以下)
VREF(+):定電流源回路用オペアンプ+入力
基準抵抗Rrefを介して、基準電源Vrefに接続します。
VREF(-):定電流源回路用オペアンプー入力
Rrefと同じ抵抗値を持つR15を介して、GNDに接続します。
R15を挿入している理由ですが、
オペアンプの入力バイアス電流の影響を除去するためです。
理想的なオペアンプは入力インピーダンスが無限大なので、
入力端子から出入りする電流はゼロですが、実際には微量な電流が流れます。
例えば、バイアス電流が1uA流れたとすると、
Rrefが5kΩ(※1)の場合、5mVの電圧降下が発生してしまい、
Rref端子間の電圧が変化することで、Irefに誤差が生じます。
(※1:実際の抵抗に5kΩの抵抗値はありませんが、ここでは便宜上使用しています)
このため、+端子側にも同じ抵抗値を挿入し、
+端子の電圧も同じ分だけ電圧降下させることで、
バイアス電流による影響を除去できます。
COMP:位相補償入力
定電流源用オペアンプの位相補償(発振防止)のため、
コンデンサを介して負電源(Vー)に接続します。
データシートを見ると、
コンデンサ容量はRrefに比例して設定するとしており、
一般的な例としてRref = 5kΩ時、0.01uFを示しています。
Iout、/Iout:電流出力 (本記事では負論理を「/」で示す)
デジタル入力値に比例してIoutは増加し、/Ioutは減少します。
Ioutと/Ioutの合計が255/256 ×Irefになります。
Iout+ /Iout = 255/256 × Iref
電圧に変換する際は、
電流出力タイプのR-2Rラダー回路で説明したように
抵抗又はオペアンプを接続します。
DAC0800を用いた±出力回路
<注意>
抵抗値等の回路定数については、データーシート等から引用したものであり、
オペアンプの選定も含め、動作を保証するものでは無いため、参考程度として下さい。
基本回路ではGNDに直結していた/Iout出力について、
抵抗を挿入してからGND接続することで、バイポーラ(±電圧)出力にできます。
出力電圧Voutは以下の式となります。
Vout = ( 2D8/256ー255/256 ) × Vref ・・・(5)
D8は8ビットの入力デジタル値なので、
D8=128なら、Vout = +1/256 × Vref
D8=127なら、Vout = ー1/256 × Vref
となり、
128以上は正電圧(最大+255/256 × Vref)
127以下は負電圧(最小ー255/256 × Vref)
を出力できます。
<(5)式になる理由>
/Ioutの出力電流はDAC内に流れる方向なので、
/Rrefによる電圧降下によって、
+端子の電圧はー/Rref × /Ioutの負電圧となります。
イマジナリーショートにより、ー端子の電圧も同じになるので、
このー/Rref × /Ioutを基準にして、
IoutがRrefに流れることによる電圧降下分を加えたものが、
出力電圧Voutとなります。
Vout = (Iout × Rref)ー(/Rref × /Iout)
Rref = /Rrefとすると、
Vout = ( Ioutー/Iout )×Rref
ここで、/Ioutは、
Iout+ /Iout = 255/256 × Irefより、
/Iout = 255/256 × Irefー Iout
となるので、
Vout = ( Iout ー ( 255/256 × IrefーIout ) ) × Rref
= ( 2Ioutー ( 255/256 × Iref ) × Rref
デジタル入力値がD8の場合
Iout = D8/256 × Iref
なので、
Vout = ( 2D8/256ー255/256 ) × Iref × Rref
Iref = Vref/Rfbを代入すると、
Vout = ( 2D8/256ー255/256 ) × Vref/Rfb × Rref
Rfb = Rrefにした場合、
Vout = ( 2D8/256ー255/256 ) × Vref
となり、(5)式になります。
★オペアンプにつける並列コンデンサの意味について解説してます。
★トランジスタやFETの設計方法についてのまとめ記事です。
★半田付けのコツや部品の外し方を解説しています。