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

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

0 件のコメント:

コメントを投稿