概要
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:
| マイコン | 分解能 | チャンネル数 | 特徴 |
|---|---|---|---|
| STM32F4xx | 12bit | 2ch | 三角波・ノイズ波形生成対応 |
| STM32H7xx | 12bit | 2ch | DMA・バッファアンプ対応 |
| ESP32 | 8bit | 2ch | 精度は低い(参考値) |
| SAMD21 | 10bit | 1ch | Arduinoベース機器 |
外付けDAC IC(SPI/I2C接続):
| IC | 方式 | 分解能 | チャンネル | インターフェース |
|---|---|---|---|---|
| MCP4725 | R-2R | 12bit | 1ch | I2C |
| MCP4922 | R-2R | 12bit | 2ch | SPI |
| DAC8563 | R-2R | 16bit | 2ch | SPI |
| PCM5102 | ΔΣ | 32bit | 2ch(立体音響) | I2S |
| AD5791 | R-2R | 20bit | 1ch | SPI |
動作原理
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積分フィルタを通すことでアナログ電圧に近い出力が得られます。ただしリップルが残り、出力インピーダンスも高くなります:
| 項目 | DAC | PWM + RCフィルタ |
|---|---|---|
| 出力品質 | クリーンなアナログ | リップルあり |
| 応答速度 | 高い | フィルタの遅延あり |
| コスト | DACハードウェアが必要 | 抵抗・コンデンサのみ |
| 精度 | DACのビット精度 | タイマー精度依存 |
音声・高精度制御にはDAC、LED調光・モーター制御にはPWMが適切な使い分けです。
内蔵DAC vs 外付けDAC
内蔵DACはコスト・配線不要の利点がありますが、デジタルノイズの影響を受けやすく精度に限界があります。高精度・低ノイズが必要な計測・オーディオ用途では外付けの専用DAC ICを選びます。