třída PWM – pulzně šířková modulace¶
Třída PWM vysílá pulzně šířkově modulovaný signál na Pin. Jedná se o moderní, napříč porty fungující API pro PWM; na STM32 OpenMV kamerách obaluje podkladovou mechaniku kanálů pyb.Timer, takže každá instance PWM zabírá jeden kanál časovače.
Příklad použití:
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()
Konstruktory¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Vytvoří objekt
PWMřídícídest(Pinna OpenMV kamerách). Argumenty klíčových slov jsou ekvivalentní voláníinit()ihned po vytvoření:freq– frekvence PWM v Hz.duty_u16– střída jako poměrduty_u16 / 65535.duty_ns– šířka pulzu v nanosekundách.invert– pokud jeTrue, invertuje polaritu výstupu.
Najednou lze předat nejvýše jeden z
duty_u16/duty_ns. Nastavenífreqmůže ovlivnit ostatní instancePWM, které sdílejí stejný podkladový časovač (platí na STM32 – každý kanál daného TIM běží na stejné frekvenci).Metody¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Překonfiguruje výstup PWM. Aktualizují se pouze dodané argumenty; ostatní si zachovají své předchozí hodnoty. Význam jednotlivých argumentů viz konstruktor.
- freq() int¶
- freq(value: int, /) None
Získá nebo nastaví frekvenci PWM.
Bez argumentu vrátí aktuální frekvenci v Hz.
S jedním argumentem
valuenastaví frekvenci na tuto hodnotu v Hz. Může vyvolatValueError, pokud je frekvence mimo rozsah dosažitelný podkladovým časovačem.
- duty_u16() int¶
- duty_u16(value: int, /) None
Získá nebo nastaví střídu jako bezznaménkovou 16bitovou hodnotu v rozsahu
0–65535.Bez argumentu vrátí aktuální střídu.
S jedním argumentem
valuenastaví střídu navalue / 65535periody.0je vždy nízká úroveň,65535je vždy vysoká úroveň.
- duty_ns() int¶
- duty_ns(value: int, /) None
Získá nebo nastaví šířku pulzu přímo v nanosekundách.
Bez argumentu vrátí aktuální šířku pulzu.
S jedním argumentem
valuenastaví dobu vysoké úrovně každého cyklu navaluenanosekund. Užitečné pro výstupy typu servo, kde je smysluplnou veličinou šířka pulzu spíše než poměr střídy.
Omezení¶
Frekvence PWM a rozlišení střídy jsou na každém hardwarovém časovači vzájemně závislé: při vysokých frekvencích se do periody vejde méně kroků čítače, a tak je smysluplných méně nízkých bitů
duty_u16.Dosažitelná frekvence PWM závisí na zdroji hodin časovače a předděličce. STM32 TIM2 / TIM5 jsou na většině součástek 32bitové (a TIM3 / TIM4 také na STM32N6), což poskytuje širší rozsahy frekvence a střídy; zbývající časovače jsou 16bitové. Přesné rozsahy viz příslušný referenční manuál MCU.
Na STM32 sdílí frekvenci více kanálů
PWMna stejném TIM. Nastavenífreq()na jedné instanci změní výstup každého dalšího kanálu připojeného k tomuto TIM.