Pulse Width Modulation

パルス波のデューティ比を変化させて変調する手法でPWMと略されます。
最近また電子工作をやるようになり、まとめてみました。

テストはM5Stackですが、ESP32系のArduinoなので下記ドキュメントを参考にしました。

https://garretlab.web.fc2.com/arduino/esp32/reference/cores/led_pwm/ledcSetup.html
https://garretlab.web.fc2.com/arduino/esp32/reference/cores/led_pwm/ledcAttachPin.html
https://garretlab.web.fc2.com/arduino/esp32/reference/cores/led_pwm/ledcAttachPin.html

double ledcSetup(uint8_t chan, double freq, uint8_t bit_num);
引数:
chan 利用するチャネル。0~15。
freq 基本となるPWMの周波数。
bit_num デューティ比を表すビット数。
戻り値:
実際に設定された基本となるPWMの周波数。(おそらく)
実際の周波数はfreqとbit_num、タイマ用のクロック(80MHz)とから求められるようです

void ledcAttachPin(uint8_t pin, uint8_t chan);
引数:
pin 利用するピン。
chan 利用するチャネル。
LED PWMで利用するピンとチャネルを結びつける。

void ledcAttachPin(uint8_t pin, uint8_t chan);
引数:
pin 利用するピン。
chan 利用するチャネル。

標準的なArduinoはアナログアウトがないため、デジタルアウトでLEDやモータなどにアナログ的なふるまいをさせるためにPWMが使われます。
M5Stackはアナログアウトを持っていてるのですが、ここではデジタルをテストします。

デジタルピン1に0から255までの値を与えることによりデューティー比を変化させます。これにより0vから3.3vまで電圧が変化することを確認しました。

以下、127で1.6v, 255で3.3vの確認(3.3vの方が明るい)

次は、0から255の1/4(25%)ごとの値、63, 127, 191 のときのパルス幅をオシロスコープで確認

パルス幅を確認するきっかけとなったのは、モジュラーシンセの変調用にPWMを入れたからどうなるかを試したことです。
デジタルアウトにつないだLEDが明るくなったり暗くなったり見える、またデジタルアウトにつないだスピーカから音楽が聴こえたりするのに、
なぜデジタルアウトにつないだモジュラーシンセの入力変調がなめらかに(アナログ的に)なってくれないのが直感的にわからなかったからです。
結局、人間がアナログだからという当たり前のことに気づかされました。
PWMって、なんか深い。

About

Categories: 未分類 タグ: