class PWM -- パルス幅変調¶
PWM クラスは、Pin 上にパルス幅変調された信号を出力します。これは PWM 用の現代的でポート横断的な API です。STM32 の OpenMV カムでは、内部の pyb.Timer チャンネル機構をラップしているため、各 PWM インスタンスは 1 つのタイマーチャンネルを占有します。
使用例:
from machine import PWM, Pin
# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)
pwm.duty_u16(32768) # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000) # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000) # 3 us pulse
pwm.deinit()
コンストラクタ¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
dest(OpenMV カムではPin) を駆動するPWMオブジェクトを構築します。キーワード引数は、構築の直後にinit()を呼び出すのと同等です:freq-- PWM 周波数 (Hz)。duty_u16--duty_u16 / 65535の比率としてのデューティサイクル。duty_ns-- ナノ秒単位のパルス幅。invert--Trueの場合、出力極性を反転します。
duty_u16/duty_nsのうち、一度に渡せるのは最大 1 つです。freqを設定すると、同じ基盤タイマーを共有する他のPWMインスタンスに影響する場合があります (STM32 では該当します -- 特定の TIM の各チャンネルはすべて同じ周波数で動作します)。メソッド¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
PWM 出力を再設定します。指定された引数のみが更新され、その他は以前の値を保持します。各引数の意味についてはコンストラクタを参照してください。
- freq() int¶
- freq(value: int, /) None
PWM 周波数を取得または設定します。
引数なしの場合、現在の周波数を Hz で返します。
単一の
value引数を指定すると、周波数をその値 (Hz) に設定します。周波数が基盤タイマーで実現可能な範囲外の場合、ValueErrorが発生することがあります。
制限事項¶
PWM 周波数とデューティ分解能は、すべてのハードウェアタイマーで相互に依存します。高い周波数では、1 周期に収まるカウンタステップが少なくなるため、
duty_u16の意味を持つ下位ビットも少なくなります。実現可能な PWM 周波数は、タイマーのクロックソースとプリスケーラに依存します。STM32 の TIM2 / TIM5 はほとんどの部品で 32 ビット (STM32N6 では TIM3 / TIM4 も同様) であり、より広い周波数およびデューティ範囲を提供します。残りのタイマーは 16 ビットです。正確な範囲については、該当する MCU のリファレンスマニュアルを参照してください。
STM32 では、同じ TIM 上の複数の
PWMチャンネルは周波数を共有します。1 つのインスタンスでfreq()を設定すると、その TIM に接続された他のすべてのチャンネルの出力が変わります。