インターフェース・バス(有線)

DAC(D/A変換)

デジタル信号をアナログに変換。

概要

DAC(Digital-to-Analog Converter:D/A変換器)は、マイコンやコンピュータが処理するデジタル値(2進数)を、連続的なアナログ電圧または電流に変換するハードウェアです。「D/A変換」「DA変換」とも呼ばれます。

ADC(A/D変換)がセンサーのアナログ出力をデジタルに取り込む役割を担うのに対し、DACはデジタル値をアクチュエータや出力信号として使えるアナログ電圧に変換します。音声データの再生(スピーカー出力)、アナログ制御信号の生成(モーターや電源の基準電圧)、波形発生器(任意波形ジェネレーター)など、幅広い用途があります。

分解能(ビット数)は8〜24ビットと幅広く、用途に応じて選択します。マイコン(MCU)にも8〜12ビットのDACを内蔵する製品が増えていますが、高精度・高速が必要な場合は外付けDAC ICを使います。

歴史・背景

DACの基本回路はR-2Rラダー型として1950年代から設計されていました。1960〜70年代にはオーディオ機器のデジタル化に伴い、高品質なDACが求められるようになりました。

1982年にCDが登場し、16ビット・44.1kHzサンプリングのDACが音楽再生の標準となりました。その後オーディオDACは24ビット・192kHz以上に進化しました。一方、産業用途ではΔΣ型やSAR型DACが計測・制御機器に採用されました。

マイコン内蔵DACは2000年代から増え始め、STM32シリーズは12ビット2チャンネルのDACを多くのラインナップで内蔵しています。ESP32もアナログ出力として8ビットDACを2チャンネル持ちます(精度は低い)。

技術仕様

DACの種類

方式原理分解能速度用途
R-2Rラダー型抵抗ラダー8〜16bit中〜高速汎用
電流加算型(I型)電流源の合算8〜16bit高速高速信号生成
ΔΣ(デルタシグマ)ノイズシェービング16〜24bit低速高精度・オーディオ
PWM + フィルタタイマー流用タイマー精度依存低速低コスト代用

主要スペック

項目説明
分解能ビット数。12ビットなら0〜4095値(4096段階)
フルスケール出力電圧通常0〜VREF(例:0〜3.3V)
セトリングタイム出力が安定するまでの時間
スリューレート出力電圧の変化速度(V/μs)
出力インピーダンス負荷への出力能力(低いほど良い)
INL/DNL理想値からの誤差(±LSB単位)
SFDRスプリアスフリーダイナミックレンジ(信号品質)

主なDAC製品

マイコン内蔵DAC:

マイコン分解能チャンネル数特徴
STM32F4xx12bit2ch三角波・ノイズ波形生成対応
STM32H7xx12bit2chDMA・バッファアンプ対応
ESP328bit2ch精度は低い(参考値)
SAMD2110bit1chArduinoベース機器

外付けDAC IC(SPI/I2C接続):

IC方式分解能チャンネルインターフェース
MCP4725R-2R12bit1chI2C
MCP4922R-2R12bit2chSPI
DAC8563R-2R16bit2chSPI
PCM5102ΔΣ32bit2ch(立体音響)I2S
AD5791R-2R20bit1chSPI

動作原理

R-2Rラダー型DACの原理

R-2Rラダー回路は抵抗値がRと2Rのみの梯子状回路です。各ビットのスイッチを切り替えることで、そのビットの重み付けに応じた電流を出力ノードに加算します:

MSB              LSB
Vref ─[R]─ A ─[R]─ B ─[R]─ C ─[R]─ D ─ GND
            |        |        |        |
           [2R]     [2R]     [2R]     [2R]
            |        |        |        |
           SW3      SW2      SW1      SW0 (ビットスイッチ)
            ↓        ↓        ↓        ↓
           Vout合算ノード → 演算増幅器でバッファリング

Nビットの入力D(0〜2^N-1)に対し、出力電圧:

Vout = VREF × D / 2^N
例:12ビットDAC、VREF=3.3V、D=2048
Vout = 3.3 × 2048 / 4096 = 1.65V(ちょうど中間電圧)

STM32内蔵DACの使用例

// STM32 HALを使ったDAC出力

// 固定電圧出力(1.65V = フルスケールの50%)
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);  // 12ビット右詰め

// 電圧計算してセット
float target_v = 1.5f;  // 1.5Vを出力
uint32_t dac_val = (uint32_t)(target_v / 3.3f * 4095.0f);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_val);

// DMAを使ったサイン波生成
#include <math.h>
#define SINE_SAMPLES 256
uint16_t sine_table[SINE_SAMPLES];

// サイン波テーブル生成(0〜4095の12ビット値)
void gen_sine_table(void) {
    for (int i = 0; i < SINE_SAMPLES; i++) {
        float angle = 2.0f * M_PI * i / SINE_SAMPLES;
        sine_table[i] = (uint16_t)((sinf(angle) + 1.0f) * 2047.5f);  // 0〜4095
    }
}

// DMAでサイン波を連続出力(タイマートリガー使用)
gen_sine_table();
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1,
                  (uint32_t*)sine_table, SINE_SAMPLES,
                  DAC_ALIGN_12B_R);
// タイマー周波数でサイン波周波数が決まる
// 例:タイマー100kHz、256サンプル → 390Hz の正弦波

任意波形生成(AWG)

DACとDMAとタイマーを組み合わせると任意波形ジェネレーター(AWG)が実現できます:

// 三角波テーブル
uint16_t triangle_table[256];
void gen_triangle_table(void) {
    for (int i = 0; i < 128; i++) triangle_table[i] = i * 32;
    for (int i = 128; i < 256; i++) triangle_table[i] = (255 - i) * 32;
}

// のこぎり波テーブル
uint16_t sawtooth_table[256];
void gen_sawtooth_table(void) {
    for (int i = 0; i < 256; i++) sawtooth_table[i] = i * 16;
}

用途・ユースケース

DACが使われる組み込みアプリケーション:

  • 音声出力: マイコンで音声データ(PCM)を再生するためのアナログ出力(スピーカー・ブザー)。タイマートリガーDACで44.1kHzサンプリングの音声再生が可能
  • アナログ制御信号(0〜5V / 4〜20mA): 産業用センサー・バルブ・インバーターへの制御信号として、デジタル値をアナログ電圧/電流に変換
  • 基準電圧(VREF)生成: ADCや計装アンプの基準電圧をDACで動的に設定
  • 波形発生器: 評価・テスト用のサイン波・方形波・三角波・ノコギリ波を生成
  • モーター速度指令: アナログ入力を持つインバーターへの速度指令(0〜10V等)をDACで出力
  • 照明制御: アナログ調光入力を持つLEDドライバーへの制御電圧

実装・開発のポイント

出力バッファアンプ(オペアンプ)

多くのマイコン内蔵DACは出力インピーダンスが高く、直接負荷を駆動できません。オペアンプのボルテージフォロワ(バッファアンプ)を出力に接続することで、低インピーダンスで安定した出力が得られます:

DAC出力 ─── (+)オペアンプ ─── 出力(アクチュエータ・計測器等)
              ↑(-) ─────────┘(フィードバック)

使用可能なオペアンプ例:
- LM358(5V単電源、安価)
- MCP6002(3.3V単電源、Rail-to-Rail)
- OPA2137(高精度・低ノイズ)

出力リップルとフィルタリング

DACの出力にはグリッチ(値変化時の瞬間的なノイズ)が発生します。低域通過フィルタ(RC or Sallen-Key)でグリッチと高調波を除去します。特に音声出力では再生帯域外のノイズ除去が重要です。

電源ノイズの影響

DACの出力精度はVREFの安定性に直結します。デジタル回路のスイッチングノイズがVDDAを通じてDACに混入するため、DACの電源ピンには専用のフェライトビードとデカップリングコンデンサを配置します。

4〜20mAカレントループ出力

産業機器ではアナログ電圧(0〜10V)よりも電流ループ(4〜20mA)が多く使われます。DACの電圧出力を電圧/電流変換回路(V/I変換)で電流に変換します:

DAC(0〜3.3V) → オペアンプV/I変換回路 → 4〜20mA出力 → 産業機器
(例:R=165Ω使用: 0〜3.3V → 0〜20mA / 抵抗・トランジスタで実装)

他技術との比較

DAC vs PWM(疑似アナログ)

PWM(パルス幅変調)でもRC積分フィルタを通すことでアナログ電圧に近い出力が得られます。ただしリップルが残り、出力インピーダンスも高くなります:

項目DACPWM + RCフィルタ
出力品質クリーンなアナログリップルあり
応答速度高いフィルタの遅延あり
コストDACハードウェアが必要抵抗・コンデンサのみ
精度DACのビット精度タイマー精度依存

音声・高精度制御にはDAC、LED調光・モーター制御にはPWMが適切な使い分けです。

内蔵DAC vs 外付けDAC

内蔵DACはコスト・配線不要の利点がありますが、デジタルノイズの影響を受けやすく精度に限界があります。高精度・低ノイズが必要な計測・オーディオ用途では外付けの専用DAC ICを選びます。

関連用語

参考リンク