いっぺーちゃんの いろいろやってみよ~

micropython on ESP32 でPWM

今更だけど備忘録として。

ESP32でパルスを出力するのにPWM(Pulse Width Modulation)を使用できます。

出力端子は出力可能な任意のpinを指定可能ですが、設定できる端子は最大8本です。
周波数はすべてのチャンネルで共通です。
周波数を変更すると、パルス幅も変わります(デューティ比で指定されているので)
初期化方法は以下の通りです。
freq で周波数(単位Hz)、dutyで出力パルス幅(単位(100/1024)%)を指定します。
デフォルトはfreq=5000(他の端子で設定済みの場合はその値を引き継ぐ)、duty=512

import machine
pin19=machine.Pin(19,machine.Pin.OUT)
pwm0=machine.PWM(pin19, freq=2000, duty=100)

 

出力パルス幅(High期間)を変更するには以下のように実行します。
単位は(100/1024)%
設定値に0を指定したとき全期間でLow出力、1023を指定したとき全期間の1023/1024のパルスを出力します。全期間でHigh出力することはできません。
1024以上を設定した場合は、設定値は0x3ffでマスクした値が使用されます。
つまり、1025を指定すると、1を指定したことになります。

pwm0.duty(100)

 

周波数の変更を変更するには以下のように実行します。
周波数はすべてのチャンネルで共通なので、1本だけ周波数を変更することはできません。
設定値の単位はHz。

pwm0.freq(1000)

 

設定値を確認するには以下のように実行します。

print(pwm0)
    ==> PWM(19, freq=2000, duty=100)