nビット分解能のDACは、参照電圧Vrefを2のn乗-1で分割した電圧を1ステップ(刻み)として、出力電圧を設定できます。例えば、10ビット分解能で、Vrefが1.0Vの場合、出力電圧の1ステップは、1.0V÷1023(2の10乗-1)=0.0009775Vになります。この時出力電圧を決めるレジスタは10ビットになります。出力値レジスタの値がmの時、DACの出力電圧はm×0.0009775Vになります。例えば、出力値レジスタが2進数の[0000000000]なら0×0.0009775V =0V、[1000000000]なら512×0.0009775V=0.5005V、[1111111111]なら、1023×0.0009775V=1.0V(最大値)のような値が出力されます。
DACの方式にはいろいろありますが、マイコンに搭載されているDACは抵抗を直列につないでVrefを分圧するラダー抵抗方式が多く使われています。最も簡単な方式は図2に示すように抵抗を単純に直列に接続して分圧する方式です。ここでは直列抵抗方式と呼びます。電圧選択型と呼ばれる場合もあります。
10ビット分解能で1023個、12ビット分解能で4095個、16ビットになると65535個の抵抗が必要になります(図2は4ビット分解能の場合)。これほど多くの抵抗をシリコン上に、それも各抵抗値がばらつかないように製造することはほぼ不可能で、現実的ではありません。実際に直列抵抗方式が使われるのは10ビット分解能までなので、それ以上の分解能の場合は、R-2R方式やバイナリ抵抗方式が用いられる場合が多いようです。
本記事は、マイコンの機能の説明が目的なので、最も構造が簡単で理解しやすい直列抵抗方式で説明を進めます。他の方式については、EDN Japanの記事「D-Aコンバータのアーキテクチャ」を参考にしてみてください。
出力値レジスタの各ビットが各スイッチ群に対応しています。SW1群は0ビット目(LSB)、SW2群は1ビット目、SW3群は2ビット目、SW4は3ビット目(MSB)です。各ビットの値が「1」の時は各群の全てのスイッチはVref側につながり、「0」の時はGND側につながります。
図2は、出力値レジスタの値が2進数[1100]の時です。SW4とSW3群がVref側、SW2群とSW1群がGND側につながります。この場合に出力端子Voutの出力はVrefの15分の12の値になります。レジスタの値がそのまま分子になりますので、非常に簡単な回路で出力電圧を設定できます。
抵抗から出力された回路が直接マイコンの端子につながっていて、DACの出力端子になることもありますが、その場合出力電圧によって抵抗の組み合わせが変り、出力インピーダンスの変化や、抵抗を介する出力による駆動能力の低下が発生する場合があります。そのため、出力端子に駆動能力を上げるための増幅アンプをつなげる場合があります。
図2の例ですとオペアンプを使ったボルテージフォロァー回路を使用しています。しかし、出力段にオペアンプのようなアナログ回路を使用するとアナログ回路のゲイン(フルスケール)誤差やオフセット誤差が発生し、0VやVrefの値を正しく出力することができなくなる欠点があります。
通常のマイコンでは、抵抗から直接出力するか、増幅アンプを介して出力するかは、ユーザーが選択できるようになっています。
また、DACから出力される波形は、どんなに分解能が細かくても段階状で出力されます。そこで、理想のアナログ波形に近い滑らかな波形を得るために、出力端に平滑化回路を設けます。バンドパスフィルター回路を付けるのが理想的ですが、コンデンサ1個をGND間に接続するだけでも効果は期待できます。
Copyright © ITmedia, Inc. All Rights Reserved.