R-2R抵抗ラダー型のD/Aコンバータ
今回は、D/Aコンバータ(DAC)の基本的な動作を確認してみます。まずはR-2R抵抗ラダー型のDACを構成し、実際に動作させてみます。
目的
最初に、CMOSインバータ回路の話題を取り上げます。DACの機能を実現する抵抗ラダー回路のリファレンス・スイッチとして、CMOSインバータを使用し、DACの機能を実現するケースについて考えてみましょう。
背景
インバータは、最も基本的な論理ゲートの1つです。MOSトランジスタを相補的なスイッチのペアとして使用することで、単純なインバータ回路を構成することができます。アクティブ・ラーニング・モジュール「ADALM2000」のデジタル入出力(I/O)は、3.3Vの電源電圧を使用してプッシュプル・モードで動作する標準的なCMOSデバイダとして構成(コンフィギュレーション)することができます。最も単純なCMOS出力は、図1のように、1つのPMOSトランジスタ(M1)と1つのNMOSデバイス(M2)で構成されます。一般に、CMOSの製造プロセスでは、NMOSトランジスタとPMOSトランジスタの閾値電圧VTHの大きさがほぼ等しくなるようになっています。つまり、NMOSとPMOSが相補的に機能するように設計されています。そのことを前提とし、CMOSインバータ回路を設計する際には、NMOSとPMOSのゲート幅とゲート長の比であるW/Lの値を調整します。つまり、それぞれのトランスコンダクタンス、言い換えれば両トランジスタのオン抵抗RONの値が等しくなるように設計します。PMOS、NMOSの両トランジスタは、いずれもスイッチとして機能します。それらは同時にオンになることはなく、どちらか1つだけがオンになります。その結果、出力はVDDとVSSのうちいずれかに接続されます。これら2つの電圧は、DACのリファレンスとして使用することができます。
R-2R抵抗ラダー回路を、電圧モードと呼ばれる方法で使用するケースを考えます。その場合、R-2R抵抗ラダーのレグは、デジタル・コード(D0~D7)に応じて、2つのリファレンス電圧のうちいずれかで駆動されます(図2)。デジタルの0はVREF-に相当し、デジタルの1はVREF+で表現されます。入力されるデジタル・コードに応じ、図2のV_LADDERの電圧は、2つのリファレンス・レベルの差の何割かに相当する値になります。多くの場合、2つのリファレンス電圧のうち負のリファレンス電圧であるVREF-としては、グラウンドVSSの値が使用されます。また、正のリファレンス電圧VREF+の値としては、CMOSドライバの正の電源VDDの値が使用されます。
準備するもの
説明
図2に示した回路は、より詳しく言えば8ビットのR-2R抵抗ラダー回路です。これを、ソルダーレス・ブレッドボード上に実装します。ただ、アナログ・パーツ・キット「ADALP2000」には、8ビットのR-2R抵抗ラダー回路を構成するために十分な数の抵抗は含まれていません。したがって、別途必要な数の抵抗を用意する必要があります。その場合、許容誤差が1%の抵抗を選択するようにしてください。
抵抗ラダー回路には、図2に示したように、8つのデジタル出力、オシロスコープのチャンネル、任意波形ジェネレータ(AWG1)を接続します。また、オペアンプの電源ピンには、必ず電源を接続してください。
ハードウェアの設定
図2の回路を図3に示すようにブレッドボード上に実装します。
手順
抵抗R1、R2を接続した状態で、DACのVREF+に相当するDC電圧が出力されるようにAWG1の設定を行います。つまり、CMOSデジタル出力の電源電圧である3.3Vを出力するようにします。そうすると、-3.3Vから3.3Vまでスイングするバイポーラ出力電圧が生成されます。また、AWG1を切り離し、抵抗R1を取り外すと、0Vから3.3Vまでスイングするユニポーラ出力電圧が得られます。ここで、ソフトウェア・パッケージ「Scopy」を起動し、「Pattern Generator」(パターン・ジェネレータ機能)の画面を開きます。そして、DIO0~DIO7を選択し、それらをグループ化します。次に、パラメータを編集し、「Pattern」を「Binary Counter」に設定します。また、プッシュプル動作に対応するために出力は「PP」に設定し、周波数は256kHzに設定します。すると、図4に示すような画面が表示されるはずです。最後に、「Run」ボタンをクリックしてください。

次に、「Scope」(オシロスコープ機能)の画面を開きます。そして、チャンネル2をオンにし、時間軸を200マイクロ秒/divに設定します。ここで、必ず緑色の「Run」ボタンをクリックします。このチャンネルについては、垂直方向のレンジを調整する必要もあるかもしれません(最初は1V/divに設定するとよいでしょう)。図5に示すように、0Vから3.3Vまで上昇する電圧波形を確認できるでしょう。このランプ波形の周期は1ミリ秒になっているはずです。

ここで、デジタル・パターンを変更してみます。「Random」パターンを選択し、オシロスコープのFFTウィンドウを開きます。CSV(Comma Separated Value)ファイルを作成し、それをカスタムのパターンとしてロードすることもできます。カスタムのパターンとしては、(ここでは8ビット幅のバスを使用するので)0~255の数値の列を含むプレーン・テキストのファイルを作成します。実際にカスタムのパターンをロードし、どのような動作になるのか確認してみてください。
なお、こちらに、正弦波、三角波、ガウス型パルスなどを含む波形ファイル(waveforms_pg)を用意しています。ぜひこのファイルをダウンロードし、実際に試してみてください。
12ビットのnanoDACを試す
続いて、分解能が12ビットのDAC製品である「AD5626」を取り上げます。これは、アナログ・デバイセズのnanoDAC®ファミリの製品です。
背景
AD5626は、5Vの単電源で動作する電圧出力型のDACです。D/A変換用の回路、入力用のシフト・レジスタ/ラッチ、電圧リファレンス、レールtoレール出力のオペアンプを内蔵しています(図6)。このオペアンプの出力は、VDD~VSSの範囲でスイングすることができます。DACの出力を0V~4.095Vの範囲に設定すれば、1ビットあたり1mVの分解能を実現することが可能です。また、AD5626はシリアル・インターフェースを備えています。データ入力(SDIN)、クロック(SCLK)、負荷ストローブ(LDAC)から成る3線式の高速インターフェースであり、DSPデバイスに接続することができます。加えて、AD5626を複数個使用する場合に対応できるようCS(チップセレクト)ピンも備えています。CLRピンは、電源を投入した際、またはユーザが希望する際に出力をゼロ・スケールに設定するために使用します。
AD5626は、1ビットのDACレジスタとは別にシリアル入力に対応するためのレジスタを備えています。このシリアル・レジスタには、DACの現在の出力電圧に影響を及ぼすことなく、新たなデータをプリロードすることができます。プリロードされた値は、LDACピンによるストローブを利用してDACレジスタに転送されます。
AD5626のユニポーラ出力動作
AD5626は、基本的にはユニポーラ出力で動作します。表1に示したユニポーラ・コードに従うことで、AD5626の優れた機能を確認することができます。
DACレジスタの16進表示 | DACレジスタの10進表示 | アナログ出力電圧〔V〕 |
FFF | 4095 | 4.095 |
801 | 2049 | 2.049 |
800 | 2048 | 2.048 |
7FF | 2047 | 2.047 |
000 | 0 | 0 |
準備するもの
- アクティブ・ラーニング・モジュール ADALM2000
- ソルダーレス・ブレッドボード
- ジャンパ線
- 12 ビットの nano DAC:AD5626(1 個)
- 抵抗:2.2kΩ(1 個)
- コンデンサ:0.001µF(1 個)、0.1µF(1 個)、10µF(1 個)
ハードウェアの設定
図7に示すように、AD5626の各ピンを接続します。
手順
Scopyを 開 き、 正 の 電 源 を5Vに 設 定 し ま す。「Pattern Generator」を使用して、AD5626のデータシートに記載されたタイミング図に沿う形で入力信号を設定します。それには、まずSPI(シリアル・インターフェース)の設定から始めます。DIO0、DIO1、DIO2をグループ・チャンネルとして設定してください。図7のとおりに接続していれば、DIO1がSCLK、DIO2がSDIN、DIO0がCSに対応します。これらをSPIとしてグループ化したら、図10を参照し、デジタル・チャンネルが正しい順になっていることを確認してください。データシートを見ると、クロックの幅としては、ハイの状態とローの状態をそれぞれ30ナノ秒以上確保しなければならないことがわかります。この規定を基に、クロック周期や最高周波数を計算することができます。ここでは、クロック周波数を1MHzに設定します。「CLK Polarity」と「CLK Phase」には、それぞれ1を設定してください。
AD5626の分解能は12ビットなので、SPIを介して送信するデータのデータ長としては12ビット以上が必要です。フレームあたりのバイト数を2に設定すると、変換が開始されたときに16ビットのデータが送られることになります。DACに入力する値は、「Data」テキストボックスに入力することができます。SPIのグループ・チャンネルの信号は、AD5626のタイミング・チャート(図9)に似たものになるはずです。
次に、LDACとCLRの信号を設定します。データシートを見ると、シフト・レジスタの内容は、CLRの信号がハイである期間にLDACの信号の立上がりエッジで更新されることがわかります。CLR(DIO4)のパターンを「Number」に設定し、その値として1を入力します。LDACの信号(DIO3)は、その立上がりエッジがCSの信号の立下がりエッジより前にあり、各ビットがシリアルで転送されている間はハイになっていなければなりません。必要な条件を満たすためには、DIO3の信号の周波数を13kHz、位相を160°に設定するとよいでしょう。AD5626によるD/A変換に必要な入力信号は図10のようになります。

続いて、Scopyの「Oscilloscope」を開き、チャンネル1をAD5626の出力に接続します。チャンネル1の測定機能をイネーブルに設定し、SPIの「Data」エリアに値を入力してください。図11を見ると、SPIを介して7FFというデータを送信した場合の出力電圧を確認することができます。

バイポーラ出力を得る方法
先述したように、AD5626は単電源で動作するように設計されています。ただ、図12に示すような回路を構成すれば、バイポーラ出力を得ることも可能です。
図12の回路は、高い精度を必要としないアプリケーションで使用することができます。この回路の出力電圧VOは、デジタル・コード(オフセット・バイナリ)を使用することで以下のように算出することができます。
図12に示した表の値を使用し、出力範囲を±5Vとした場合、この回路の伝達関数は次式のようになります。
準備するものの
- アクティブ・ラーニング・モジュール ADALM2000
- ソルダーレス・ブレッドボード
- ジャンパ線
- 12 ビットの nano DAC:AD5626(1 個)
- オペアンプ:「OP484」(1 個)
- コンデンサ:0.1µF(1 個)
- 抵抗:1kΩ(1 個)、20kΩ(1 個)、10kΩ(2 個)、47kΩ(1 個)、470kΩ(1 個)
ハードウェアの設定
図12に示した回路をソルダーレス・ブレッドボード上に実装してください(図13)。
手順
図7に示した回路は、ユニポーラ出力動作に対応していました。ここでは、電圧リファレンスとして、「Signal Generator」のチャンネル1から2.5V(固定値)が出力されるように設定して使用することにします。また、オシロスコープの2つ目のチャンネルを使用し、オペアンプの出力電圧を表示します。ユニポーラ動作とバイポーラ動作の両方の出力電圧を同時にオシロスコープに表示することができます(図14~図16)。



問題
入力D7、D6を、それぞれグラウンドまたは3.3Vに接続するケースを考えます。それらの組み合わせ方に応じ、R-2R抵抗ラダー回路(DAC)の出力電圧はどのようになりますか。オームの法則と合成抵抗(並列に接続した複数の抵抗を1つにまとめる)の算出式を使用して計算してください。得られた結果を表にまとめて示してください。
答えはStudentZoneで確認できます。