-
Notifications
You must be signed in to change notification settings - Fork 3
Samples_PWM
Ko-ichiro Sugiyama edited this page Mar 6, 2023
·
16 revisions
PWM クラスのメソッドについては,Class_PWM を参照されたい.
電圧の HIGH と LOW を繰り返すことで, 実効的な電圧を変化させることができる.デューティー比が実効的な電圧比に対応する.
デューティー比は比率 (%) で与えるのではなく, 下図でいうところの「閾値」として与えるのが一般的である.本ライブラリでは max は 1024 (10 bit) であるので,デューティー比を 50% とする場合には 512 を与えれば良い.
なお, ESP32 のクロックは 80 MHz = 12.5 μs で動作するため, 分解能をそれよりも小さくすることはできない. 本ライブラリの場合に扱える最大波長は 1 / (12.5e-6 * 1024) = 78.124 Hz である (タイマの解像度を 10 bit としているため).
圧電ブザーを鳴らすプログラムの例.
1 pwm0 = PWM.new( 15 ) 2 3 pwm0.freq(440) 4 pwm0.duty(512) 5 sleep 5 6 7 pwm0.deinit
-
1 行目: インスタンスの作成. スピーカの接続されているピン (GPIO 15) を使う設定に.
-
クラスの定義は mrblib/models/pwm.rb
-
-
3 行目: 周波数の設定.440Hz に.
-
4 行目: デューティー比の設定. 512 / 1024 = 50%
-
デフォルト 10 bit = 1024.
-
-
7 行目:音を止める
もし,うまく音が鳴らない場合は,1 行目の後に sleep を入れると解消される場合がある.
LED (GPIO 13) の明るさを 10 秒間隔で変化させる
1 # LED の明るさを 10 秒間隔で変化させる. 2 3 # 初期化 4 pwm = PWM.new(13) 5 pwm.frequency( 1000 ) 6 num = 10 7 8 while true 9 10 for i in 0..num do 11 12 duty = ( 1023 / num ) * i 13 14 pwm.duty( duty ) 15 16 sleep 10.0 / num 17 end 18 19 # 少し休む 20 sleep 0.2 21 end