Maixpyのmachine.PWMクラスの解説です。
デモとしてPWM調光でBreathing LED(ゆらぐLED)を試します。
目次
動作環境
この記事ではM5StickVを使った例を紹介します。
LEDが接続されているピン設定を変更すれば他のMaixシリーズでも動作します。
MaixpyのPWMとTimerはK210 SoCに依存した機能です。
PWM制御とは
PWMとはPulse Width Modulation(パルス幅変調)の略です。
周期的にパルスのオンとオフを繰り返し、オンの幅を変化させる制御です。
GPIOのデジタル制御で擬似的なアナログ出力が得られ、LED調光やモーター駆動など幅広い用途に使えます。
Breathing LEDを試す
PWMのデューティを変えることでLED調光します。
デューティーとは一定周期でのオン時間の割合です。
1Hz(1秒周期)のとき、オン時間が0.5秒ならデューティ50%です。
Maixpyのスクリプトがこちらです。
PWM調光によりスムースに点灯・消灯します。
from machine import Timer,PWM
import time
from fpioa_manager import *
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=500000, duty=0, pin=board_info.LED_W)
duty=0
dir = True
while True:
if dir:
duty += 1
else:
duty -= 1
if duty>100:
duty = 100
dir = False
elif duty<0:
duty = 0
dir = True
time.sleep(0.01)
ch.duty(duty)
machine.PWMクラス
MaixpyではmachineライブラリのPWMクラスを使います。
K210 SoCはハードウェアでPWM機能を提供しています。
任意のピン(0-47ピン)で利用できます。
PWMはTimer機能に依存しています。
PWM機能に割り当てたTimerは通常のタイマーとしては使えなくなります。
K210には3個のTimerがあり、各Timerは4系統の出力を持ちます。
つまり最大12chのPWMを同時に出力することができます。
コンストラクタ
class machine.PWM(tim, freq, duty, pin, enable=True)
パラメータ
tim: PWMはTimerに依存するため、Timerオブジェクトの指定が必須です。TimerオブジェクトはTimer IDとチャンネル番号の指定が必要です。
- freq: PWMの周波数
- duty: デューティ比。0-100で指定。
- [pin]: PWMを出力するピン。ピン番号を指定するかわりにfmモジュールでマッピングしたピンを指定することもできます。
- enable: 即座に波形出力するかどうか。デフォルトはTrue。
メソッド
init
コンストラクタと同様です。
PWM.init(tim, freq, duty, pin, enable=True)
戻り値
なし
freq
周波数を設定します。
PWM.freq(freq)
戻り値
設定した周波数を返します。引数がないときは現在の設定値を返します。
duty
デューティ比を設定します。
PWM.duty(duty)
戻り値
設定したデューティ比を返します。引数がないときは現在の設定値を返します。
enable
PWM出力をオンにします。
PWM.enable()
戻り値
なし
disable
PWM出力をオフにします。
PWM.disable()
戻り値
なし
deinit / _del_
PWMのリソースを開放し、クロックをオフにします。
PWM.deinit()
もしくはdel pwm
戻り値
なし