ホーム > カテゴリ > ロボット・電子工作・マイコン >

DAコンバータの使い方 [Arduino]

任意の電圧を出力する事ができるDAコンバータです。

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

※電圧は指定可能ですが、出力電流は実測値で約13mAとなります。
※DAコンバータ(D/A変換)は「デジタルからアナログへ変換」の意味です。

使用部品・材料

総額で約650円です。(Arduino本体の値段を除く)

部品/材料値段備考
サンハヤト SAD-101 ニューブレッドボード¥500Amazon.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・ラズパイ等)でユーザー同士で情報を共有して下さい。

関連記事



公開日:2017年08月23日 最終更新日:2021年03月01日
記事NO:02538