class PWM —— 脈衝寬度調變¶
PWM 類別在 Pin 上輸出脈衝寬度調變訊號。它是現代且跨 port 的 PWM API;在 STM32 OpenMV 相機上,它包裝了底層的 pyb.Timer 通道機制,因此每個 PWM 實例會佔用一個計時器通道。
使用範例:
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一次至多只能傳入其中一個。設定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。