0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

エレキ素人が何か考える(その8):DAコンパーター

Posted at

DAコンパーターMCP4911を使う

秋月電子で入手したDAコンパーターMCP4911をArduino Unoで使ってみる。ちなみに、このArduinoには、DAコンバーターが存在しない。

データシート

データシートは、ここにある。ピン配置を抜粋すると下記のとおり。
ピン配置.png
SPI対応しており、ArduinoのPin10をCS、Pin11をSDI、Pin13をSCKに接続する。また、VddおよびVrefを5V、VssおよびLDACをGNDに接続する(データシートを読み解くとLDACはGND接続でOK)。Voutが出力されるアナログ電圧となる。

ここでは、Voutの電圧を測定するとともに、VoutをArduinoのPin A0に接続し、DAコンバーターの結果をADコンバーターへFeedbackする。回路図的には下記のとおり。
MCP4911_回路図.png

ソースコード

本家にあるライブラリを利用し、サンプルコードであるMCP4911_testを改良したソースコードが下記である。

#include "MCP_DAC.h"  // MCP4911ライブラリ
#define CS 10         // ArduinoのCSピン
#define CH 0          // MCP4911チャネル

MCP4911 MCP;  // Hardware SPI
int res;      // 分解能

void setup() {
  Serial.begin(115200);
  Serial.println("DA conveter test");

  MCP.begin(CS); // chip select
  res = MCP.maxValue();
  Serial.print("MAXVALUE:\t");
  Serial.println(res);  // MCP4911では1023
  delay(100);  
}

void measure(int val) {
  MCP.analogWrite(val, CH);        // MCP4911へのwrite
  delay(100);
  Serial.print("Write Value: ");
  Serial.print(val);
  Serial.print("\t");
  Serial.print("Read Value: ");
  Serial.println(analogRead(A0));  // Arduino ADコンバーターからのread
}

void loop() {
  for (int value = 0; value <= res; value += 128) {  // 0から128おきにテスト
    measure(value);
    delay(200);
  }
  measure(res);  // 最大値1023のテスト
  delay(200);
}

実験

配線と電圧値の測定状況。
IMG_6025.JPG
電圧値の変化、0Vからおよそ5Vまでの変化が見られる。
2022_03_12_17.05.45.jpg

Arduinoのシリアルコンソールの状況。WriteとReadとの値に若干の差があるがまずまずか、、、。

DA conveter test
MAXVALUE:	1023
Write Value: 0	Read Value: 0
Write Value: 128	Read Value: 125
Write Value: 256	Read Value: 253
Write Value: 384	Read Value: 382
Write Value: 512	Read Value: 510
Write Value: 640	Read Value: 639
Write Value: 768	Read Value: 767
Write Value: 896	Read Value: 896
Write Value: 1023	Read Value: 1023
Write Value: 0	Read Value: 0
Write Value: 128	Read Value: 124
Write Value: 256	Read Value: 253
Write Value: 384	Read Value: 381
Write Value: 512	Read Value: 512
Write Value: 640	Read Value: 640
Write Value: 768	Read Value: 767
Write Value: 896	Read Value: 896
Write Value: 1023	Read Value: 1021
Write Value: 0	Read Value: 0
Write Value: 128	Read Value: 124
Write Value: 256	Read Value: 253
Write Value: 384	Read Value: 382
Write Value: 512	Read Value: 511
Write Value: 640	Read Value: 639
Write Value: 768	Read Value: 768
Write Value: 896	Read Value: 896
Write Value: 1023	Read Value: 1021
Write Value: 0	Read Value: 0
Write Value: 128	Read Value: 125
Write Value: 256	Read Value: 253
Write Value: 384	Read Value: 382
Write Value: 512	Read Value: 511
Write Value: 640	Read Value: 639
Write Value: 768	Read Value: 767
Write Value: 896	Read Value: 896
Write Value: 1023	Read Value: 1021
Write Value: 0	Read Value: 0
Write Value: 128	Read Value: 124
Write Value: 256	Read Value: 253
Write Value: 384	Read Value: 381
Write Value: 512	Read Value: 510
Write Value: 640	Read Value: 640
Write Value: 768	Read Value: 767
Write Value: 896	Read Value: 895
Write Value: 1023	Read Value: 1020

EOF

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?