ADALM2000による実習:D/Aコンバータを試す

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のリファレンスとして使用することができます。

図1. CMOS構成の出力ドライバ
図1. CMOS構成の出力ドライバ

R-2R抵抗ラダー回路を、電圧モードと呼ばれる方法で使用するケースを考えます。その場合、R-2R抵抗ラダーのレグは、デジタル・コード(D0~D7)に応じて、2つのリファレンス電圧のうちいずれかで駆動されます(図2)。デジタルの0はVREF-に相当し、デジタルの1はVREF+で表現されます。入力されるデジタル・コードに応じ、図2のV_LADDERの電圧は、2つのリファレンス・レベルの差の何割かに相当する値になります。多くの場合、2つのリファレンス電圧のうち負のリファレンス電圧であるVREF-としては、グラウンドVSSの値が使用されます。また、正のリファレンス電圧VREF+の値としては、CMOSドライバの正の電源VDDの値が使用されます。

準備するもの

  • アクティブ・ラーニング・モジュール「ADALM2000
  • ソルダーレス・ブレッドボード
  • ジャンパ線
  • 抵抗:20kΩ(9 個)、10kΩ(9 個)
  • オペアンプ:「OP27」(1 個)

説明

図2に示した回路は、より詳しく言えば8ビットのR-2R抵抗ラダー回路です。これを、ソルダーレス・ブレッドボード上に実装します。ただ、アナログ・パーツ・キット「ADALP2000」には、8ビットのR-2R抵抗ラダー回路を構成するために十分な数の抵抗は含まれていません。したがって、別途必要な数の抵抗を用意する必要があります。その場合、許容誤差が1%の抵抗を選択するようにしてください。

抵抗ラダー回路には、図2に示したように、8つのデジタル出力、オシロスコープのチャンネル、任意波形ジェネレータ(AWG1)を接続します。また、オペアンプの電源ピンには、必ず電源を接続してください。

図2. R-2R抵抗ラダー回路
図2. R-2R抵抗ラダー回路

ハードウェアの設定

図2の回路を図3に示すようにブレッドボード上に実装します。

図3. 図2の回路を実装したブレッドボード
図3. 図2の回路を実装したブレッドボード

手順

抵抗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」ボタンをクリックしてください。

図4. パターン・ジェネレータの画面
図4. パターン・ジェネレータの画面

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

図5. オシロスコープの画面
図5. オシロスコープの画面

ここで、デジタル・パターンを変更してみます。「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ピンは、電源を投入した際、またはユーザが希望する際に出力をゼロ・スケールに設定するために使用します。

図6. AD5626の機能ブロック図
図6. AD5626の機能ブロック図

AD5626は、1ビットのDACレジスタとは別にシリアル入力に対応するためのレジスタを備えています。このシリアル・レジスタには、DACの現在の出力電圧に影響を及ぼすことなく、新たなデータをプリロードすることができます。プリロードされた値は、LDACピンによるストローブを利用してDACレジスタに転送されます。

AD5626のユニポーラ出力動作

AD5626は、基本的にはユニポーラ出力で動作します。表1に示したユニポーラ・コードに従うことで、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の各ピンを接続します。

図7. AD5626をユニポーラ動作させるための接続
図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)に似たものになるはずです。

図8. 図7の回路を実装したブレッドボード
図8. 図7の回路を実装したブレッドボード
図9. AD5626のSPIのタイミング・チャート
図9. AD5626のSPIのタイミング・チャート

次に、LDACCLRの信号を設定します。データシートを見ると、シフト・レジスタの内容は、CLRの信号がハイである期間にLDACの信号の立上がりエッジで更新されることがわかります。CLR(DIO4)のパターンを「Number」に設定し、その値として1を入力します。LDACの信号(DIO3)は、その立上がりエッジがCSの信号の立下がりエッジより前にあり、各ビットがシリアルで転送されている間はハイになっていなければなりません。必要な条件を満たすためには、DIO3の信号の周波数を13kHz、位相を160°に設定するとよいでしょう。AD5626によるD/A変換に必要な入力信号は図10のようになります。

図10. パターン・ジェネレータで設定した信号の波形
図10. パターン・ジェネレータで設定した信号の波形

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

図11. 7FFを入力した場合のAD5626の出力電圧
図11. 7FFを入力した場合のAD5626の出力電圧

バイポーラ出力を得る方法

先述したように、AD5626は単電源で動作するように設計されています。ただ、図12に示すような回路を構成すれば、バイポーラ出力を得ることも可能です。

図12. バイポーラ出力を得るための回路。データシートに記載されている調整用の回路は使用していません。
図12. バイポーラ出力を得るための回路。データシートに記載されている調整用の回路は使用していません。

図12の回路は、高い精度を必要としないアプリケーションで使用することができます。この回路の出力電圧VOは、デジタル・コード(オフセット・バイナリ)を使用することで以下のように算出することができます。

数式 1

図12に示した表の値を使用し、出力範囲を±5Vとした場合、この回路の伝達関数は次式のようになります。

数式 2

準備するものの

  • アクティブ・ラーニング・モジュール ADALM2000
  • ソルダーレス・ブレッドボード
  • ジャンパ線
  • 12 ビットの nano DAC:AD5626(1 個)
  • オペアンプ:「OP484」(1 個)
  • コンデンサ:0.1µF(1 個)
  • 抵抗:1kΩ(1 個)、20kΩ(1 個)、10kΩ(2 個)、47kΩ(1 個)、470kΩ(1 個)
図13. 図12の回路を実装したブレッドボード
図13. 図12の回路を実装したブレッドボード

ハードウェアの設定

図12に示した回路をソルダーレス・ブレッドボード上に実装してください(図13)。

手順

図7に示した回路は、ユニポーラ出力動作に対応していました。ここでは、電圧リファレンスとして、「Signal Generator」のチャンネル1から2.5V(固定値)が出力されるように設定して使用することにします。また、オシロスコープの2つ目のチャンネルを使用し、オペアンプの出力電圧を表示します。ユニポーラ動作とバイポーラ動作の両方の出力電圧を同時にオシロスコープに表示することができます(図14~図16)。

図14. 000を入力した場合のユニポーラ/バイポーラの出力電圧
図14. 000を入力した場合のユニポーラ/バイポーラの出力電圧
図15. 800を入力した場合のユニポーラ/バイポーラの出力電圧
図15. 800を入力した場合のユニポーラ/バイポーラの出力電圧
図16. FFFを入力した場合のユニポーラ/バイポーラの出力電圧
図16. FFFを入力した場合のユニポーラ/バイポーラの出力電圧

問題

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

答えはStudentZoneで確認できます。

著者

Andreea Pop

Andreea Pop

Andreea Popは、アナログ・デバイセズのシステム設計/アーキテクチャ・エンジニアです。2019年より現職。クルジュナポカ工科大学で電子工学と通信工学の学士号を取得しています。また、同校でIC/システムに関する修士課程を修了しました。

Antoniu Miclaus

Antoniu Miclaus

Antoniu Miclausは、アナログ・デバイセズのシニア・ソフトウェア・エンジニアです。Linuxやno-OSドライバを対象とした組み込みソフトウェアを担当。それ以外に、アナログ・デバイセズのアカデミック・プログラムやQAオートメーション、プロセス・マネージメントにも携わっています。2017年2月から、ルーマニアのクルジュナポカで勤務。クルジュナポカ技術大学で電子工学と通信工学の学士号、バベシュボヨイ大学でソフトウェア・エンジニアリングの修士号を取得しています。

Doug Mercer

Doug Mercer

Doug Mercerは、1977年にレンセラー工科大学で電気電子工学の学士号を取得しました。同年にアナログ・デバイセズに入社して以来、直接または間接的に30種以上のデータ・コンバータ製品の開発に携わりました。また、13件の特許を保有しています。1995年にはアナログ・デバイセズのフェローに任命されました。2009年にフルタイム勤務からは退きましたが、名誉フェローとして仕事を続けており、Active Learning Programにもかかわっています。2016年に、レンセラー工科大学 電気/コンピュータ/システム・エンジニアリング学部のEngineer in Residenceに指名されました。