🚨

LEDでわかるデジタル出力とアナログ出力の違い

2022/12/21に公開約1,100字


0と1で制御するデジタル出力


256段階を扱えるアナログ出力

デジタル出力の例

void setup() {
  pinMode(9, OUTPUT);
}

int count = 0;

void loop() {
  digitalWrite(9, sin(2 * PI / (60 * 2) * count) > 0);
  delay(1000 / 60);
  count++;
}
  • 電圧があるかないかの二通りで制御する
  • digitalWrite の第二引数に 0 か 1 を渡せば 0V か 5V になる

アナログ出力の例

void setup() {
  pinMode(9, OUTPUT);
}

int count = 0;

void loop() {
  analogWrite(9, 128 + sin(2 * PI / (60 * 2) * count) * 127);
  delay(1000 / 60);
  count++;
}
  • デジタル版とのソースコード上での違いは(ほぼ) digitalWrite を analogWrite にしただけ
  • PWM (Pulse With Modulation) で0Vから5Vまでを256分割できる
  • 具体的には 0V と 5V にした時間をそれぞれ仮に 50% として短時間で繰り返すと繋がれた部品たちは平均値の 2.5V 来ていると勘違いするらしい

255は5Vではないのに5Vになる理由

こちらの記事が興味深い

http://igarage.cocolog-nifty.com/blog/2020/02/post-d4c821.html

  • 本来 analogWrite で255を書き込んでも5Vにはならない
  • 5V未満の5Vにもっとも近い電圧になる
  • にもかかわらず255で5Vになる理由は analogWrite が255を特別扱いしているから
    • 255なら digitalWrite(..., HIGH) を実行する
    • 同様に0も特別扱いで digitalWrite(..., LOW) を実行している

疑問

デジタル出力に比べてアナログ出力(PWM)を使うと消費電力が高くなる? (TODO: わかったら書く)

Discussion

ログインするとコメントできます