2016年1月9日土曜日

Arduino DUE DAC精度(4)

Arduino DUE DAC出力電圧について、
Arduino DUE DAC精度
Arduino DUE DAC精度(2)
Arduino DUE DAC精度(3)
と書いてきましたが、少なくとも0Vは出力できないことがわかりました。

やっぱりまずはデータシートでしょ!ということで、DUEに載っているチップの仕様書を参照しました。
Arduinoの製品サイトには、MCUは”AT91SAM3X8E”と記載されています。ボード上のチップの銘も、”ATSAM3X8E”となっています。
ということで、下記のデータシートを参照。
SAM3X Datasheet

2016/01/09時点でのドキュメントで1142ページ目に、”Voltage Range”についての記述があります。
sam3x8e dac analogoutputs
これによると、Vor.minは(1/6)×Vadvrefとのこと。
また、Vadvrefは
sam3x8e vadvref
となり、最小2.0Vまでしか下げられません。

ということで、このチップはDAC出力を0Vまで下げることはできません。
まぁ、想像はしていましたが。

なので、これまでフルスケール誤差といっていたものは誤差ではなく、そういう仕様だった、ということですね。

Arduino DUE DAC精度(3)

はじめに

Arduino DUE DAC精度(2)で書きました、DAC0/1両端子の精度が芳しくない件について、続きです。

DAC出力を、同じ装置(Arduino DUE)のADで観測しているわけですが、本当にDAC設定値=0時に0.5Vになってしまっているのか、マルチメータに接続して再度観測してみました。

2016年1月7日木曜日

Arduino DUE DAC精度(2)

はじめに

Arduino DUE DAC精度で書いた通り、 DUEのDAC精度が芳しく無く見える件の続きです。

DAC1端子も見てみました。

環境

  • Arduino DUE ボード
今度はDAC1端子とA0端子の直結です。


コード

前回と同様で、出力端子をDAC1端子に変更したのみです。

int setval;
void setup() {
  Serial.begin(9600);
  setval = 0;
  analogWriteResolution(10);
}

int val;
void loop() {
  Serial.print("setval / readval = ");

  analogWrite(DAC1, setval);
  delay(500);
  val = analogRead(A0);
  Serial.print(setval);
  Serial.print(" / ");
  Serial.println(val);

  setval = (setval + 32) % 1024;
}

結果

DAC1もDAC0と同様、オフセット付き、フルスケール誤差大、といった感じでした。
本当にそうなのでしょうか?
setval / readval = 0 / 164 setval / readval = 32 / 185 setval / readval = 64 / 207 setval / readval = 96 / 228 setval / readval = 128 / 250 setval / readval = 160 / 271 setval / readval = 192 / 293 setval / readval = 224 / 314 setval / readval = 256 / 336 setval / readval = 288 / 357 setval / readval = 320 / 378 setval / readval = 352 / 400 setval / readval = 384 / 421 setval / readval = 416 / 443 setval / readval = 448 / 464 setval / readval = 480 / 485 setval / readval = 512 / 507 setval / readval = 544 / 528 setval / readval = 576 / 550 setval / readval = 608 / 571 setval / readval = 640 / 593 setval / readval = 672 / 614 setval / readval = 704 / 636 setval / readval = 736 / 657 setval / readval = 768 / 678 setval / readval = 800 / 700 setval / readval = 832 / 721 setval / readval = 864 / 743 setval / readval = 896 / 764 setval / readval = 928 / 785 setval / readval = 960 / 807 setval / readval = 992 / 829 setval / readval = 1023 / 849  
DAC0とDAC1を併記してみました。

2016年1月3日日曜日

Arduino DUE DAC精度

はじめに

モータードライバを電圧制御するため、DACを搭載しているArduino DUEを使用しています。
電圧制御するにあたり、このDUEのDAC、精度がどの程度あるのかを調べてみました。
(というよりも、DACに0設定しても0V出力となっていなさそうだったので・・・)

環境

  • Arduino DUE ボード

接続はDAC0端子とA0端子の直結です。
ArduinoDue

コード

10bit精度で0~992まで32dec刻みでanalogWriteしてみます。
analogWrite→500ms待機→analogRead→Serial.printの繰り返しです。
『DAC0書き込み値 / A0読み出し値』を10進数で表示しています。

int setval;
void setup() {
  Serial.begin(9600);
  setval = 0;
  analogWriteResolution(10);
}

int val;
void loop() {
  Serial.print("setval / readval = ");

  analogWrite(DAC0, setval);
  delay(500);
  val = analogRead(A0);
  Serial.print(setval);
  Serial.print(" / ");
  Serial.println(val);

  setval = (setval + 32) % 1024;
}

結果

analogWriteで0を書き込んでもDA結果は0V付近ではないですね。。
DUEは3.3V駆動なので、
オフセット誤差は165dac = 0.53V付近
フルスケール(じゃないけど)誤差は(992-829)dec = 0.52V付近
でしょうか。

setval / readval = 0 / 165
setval / readval = 32 / 186
setval / readval = 64 / 208
setval / readval = 96 / 229
setval / readval = 128 / 251
setval / readval = 160 / 272
setval / readval = 192 / 293
setval / readval = 224 / 315
setval / readval = 256 / 337
setval / readval = 288 / 358
setval / readval = 320 / 380
setval / readval = 352 / 401
setval / readval = 384 / 422
setval / readval = 416 / 444
setval / readval = 448 / 465
setval / readval = 480 / 487
setval / readval = 512 / 508
setval / readval = 544 / 530
setval / readval = 576 / 550
setval / readval = 608 / 572
setval / readval = 640 / 594
setval / readval = 672 / 615
setval / readval = 704 / 637
setval / readval = 736 / 658
setval / readval = 768 / 679
setval / readval = 800 / 701
setval / readval = 832 / 723
setval / readval = 864 / 743
setval / readval = 896 / 765
setval / readval = 928 / 787
setval / readval = 960 / 808
setval / readval = 992 / 829

グラフにするとこんな感じ