今から始める電子工作 ⑨ アナログ出力 その1 PWM

 Arduino UNO 3には、いわゆるアナログ出力はありませんでしたが、ディジタル出力の記号のところに~(チルダ)がついているポートはPWM出力に対応していて、疑似的にアナログ出力ができました。

 チルダのついている端子は、D3、D5、D6、D9、D10、D11です。

 Arduino UNO 4は、そのPWM出力に加えて、D-Aコンバータによるアナログ出力を一つもっています。

PWM出力をアナログ値とみなす

 PWMは、0と5VをON/OFFする信号で、周波数とデューティ比がそのパラメタになります。D3にアナログ出力をした波形を下記に示します。

 波形の周波数などはまったく同じです。いずれのピンの周波数は、489.7Hzです。下記の資料には490Hzと書かれています。

  公式のドキュメント https://docs.arduino.cc/language-reference/en/functions/analog-io/analogWrite/

 UNO 3では、D3、D9、D10、D11が490Hz、D5、D6は 980 Hzでした。

Pin3(上)、Pin5(下)

Pin3(上)、Pin6(下)

 Pin6の波形はじわじわと移動しています。

Pin3(上)、Pin9(下)

 Pin9の波形はじわじわと移動しています。

Pin3(上)、Pin10(下)

 Pin10の波形はじわじわと移動しています。

Pin3(上)、Pin11(下)

 Pin11の波形はじわじわと移動しています。

いずれもデューティ50%

 上記の波形を出しているスケッチです。 アナログ出力は analogWrite(ピン番号, デューティ比) で、デューティ比を0~255で指定します。128はちょうど真ん中の値です。これをテスタの電圧レンジで測ると、電源電圧の半分の電圧になります。

void setup() {
  Serial.begin(9600);
  while (!Serial) delay(10);
}

void loop() {
 analogWrite(D3, 128); 
 analogWrite(D5, 128);
}

 実際に測ります。テスタは測定頻度が少ないので、PWM出力の平均値を測っていることになります。

  •  5Vピン 4.49V
  •  D3ピン 2.246V

 ディジタル・マルチメータで測っても同じく2.246Vでした。

アナログ電圧値で出力するスケッチ

 電源電圧5V端子を測ると4.5Vでした。1.05Vを出力しようとしています。

const float Vref = 4.5;

void setup() {
  Serial.begin(9600);
  while (!Serial) delay(10);
}

void loop() {
float val = 1.05;
int out_voltage = (val / Vref ) * 255; 
Serial.println(out_voltage);
analogWrite(D3, out_voltage);
analogWrite(D5, out_voltage);
}

 実行結果です。テスタの表示値は1.036Vでした。

 波形です。

前へ

今から始める電子工作 ⑧ アナログ入力 その2 analogReference(AR_EXTERNAL)

次へ

今から始める電子工作 ⑩ アナログ出力 その2 D-Aコンバータ