DAコンバータの使い方 [Arduino]
任意の電圧を出力する事ができるDAコンバータです。
今回は12bitのDAコンバータ(MCP4726)ですので「0から4095の値」をI2C接続でレジスタに書き込む事で、VOUTから指定した電圧を出力します。

※電圧は指定可能ですが、出力電流は実測値で約13mAとなります。
※DAコンバータ(D/A変換)は「デジタルからアナログへ変換」の意味です。
使用部品・材料
総額で約650円です。(Arduino本体の値段を除く)
部品/材料 | 値段 | 備考 |
---|---|---|
サンハヤト SAD-101 ニューブレッドボード | ¥500 | Amazon.com |
MCP4726搭載12ビットD/A変換モジュール | ¥150 | 秋月電子の通販コード(K-07995) |
カーボン抵抗器 | 数円 | 10kΩ(2個)を使用。 |
必要に応じてVDDに「0.1μFのセラミックコンデンサ」「10μFの電解コンデンサ」を設置してください。(無くても動作はします)
配線図
I2C接続用のプルアップは10kΩを使用しています。

次は公式データシートより(MCP4726.pdf)


ピン配置は「非常にわかりにくい」ですが、虫眼鏡でVOUTの左上にある「白い棒線と白丸」で判別します。
DAC REGISTER BITSはレジスタビットの配置表です。MCP4726なので「D0からD11」で12bit(10進数で4096)あります。
スケッチ(プログラム)
I2C接続で「2048」をレジスタに書き込み、出力電圧を約2.5Vにします。
#include <Wire.h> // デバイスアドレス(スレーブ) uint8_t DEVICE_ADDRESS = 0x60; // 2進 1100000 void setup() { Serial.begin(9600); // マスタとしてI2Cバスに接続する Wire.begin(); } void loop() { // VOUTに2.5Vを出力する uint16_t value = 4096 / 2; // (0-4095) Wire.beginTransmission(DEVICE_ADDRESS); Wire.write((value >> 8) & 0x0F); Wire.write(value); Wire.endTransmission(); delay(1000); // VOUTに出力された電圧を取得する int vout = analogRead(A0); Serial.print("電圧 : "); Serial.print(vout / 1024.0 * 5.0); Serial.print("V ("); Serial.print(vout); Serial.println(")"); }
出力電圧は「val / 4096 * 5V」で算出できます。( 0 <= val <= 4095 )
15行目から19行目のスケッチ(プログラム)がよくわからない方はMCP4726のソースの書き方についてをご覧ください。
実行例

掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。