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

戻り値

なし

公式リファレンス

PWM · MaixPy 文档