PWM osztály – impulzusszélesség-moduláció¶
A PWM osztály impulzusszélesség-modulált jelet ad ki egy Pin lábon. Ez a modern, porton átívelő API a PWM-hez; az STM32 OpenMV kamerákon az alatta lévő pyb.Timer csatorna-mechanizmust burkolja, így minden egyes PWM példány lefoglal egy időzítő-csatornát.
Példa a használatra:
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()
Konstruktorok¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Hozz létre egy
PWMobjektumot, amely adestlábat (egyPinaz OpenMV kamerákon) hajtja meg. A kulcsszó argumentumok egyenértékűek azinit()közvetlenül a létrehozás utáni meghívásával:freq– PWM frekvencia Hz-ben.duty_u16– kitöltési tényeződuty_u16 / 65535aránya formájában.duty_ns– impulzusszélesség nanoszekundumban.invert– haTrue, megfordítja a kimenet polaritását.
Egyszerre legfeljebb a
duty_u16/duty_nsegyike adható át. Afreqbeállítása hatással lehet másPWMpéldányokra, amelyek ugyanazt az alapul szolgáló időzítőt használják (igaz az STM32-n – egy adott TIM minden csatornája azonos frekvencián fut).Metódusok¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
A PWM kimenet újrakonfigurálása. Csak a megadott argumentumok frissülnek; a többi megtartja a korábbi értékét. Az egyes argumentumok jelentését lásd a konstruktornál.
- freq() int¶
- freq(value: int, /) None
A PWM frekvencia lekérdezése vagy beállítása.
Argumentum nélkül visszaadja az aktuális frekvenciát Hz-ben.
Egyetlen
valueargumentummal a frekvenciát az adott Hz értékre állítja.ValueErrorkivételt válthat ki, ha a frekvencia az alapul szolgáló időzítő által elérhető tartományon kívül esik.
- duty_u16() int¶
- duty_u16(value: int, /) None
A kitöltési tényező lekérdezése vagy beállítása előjel nélküli 16 bites értékként a
0–65535tartományban.Argumentum nélkül visszaadja az aktuális kitöltési tényezőt.
Egyetlen
valueargumentummal a kitöltési tényezőt a periódusvalue / 65535részére állítja. A0mindig alacsony, a65535mindig magas.
- duty_ns() int¶
- duty_ns(value: int, /) None
Az impulzusszélesség lekérdezése vagy beállítása közvetlenül nanoszekundumban.
Argumentum nélkül visszaadja az aktuális impulzusszélességet.
Egyetlen
valueargumentummal az egyes ciklusok magas-idejétvaluenanoszekundumra állítja. Hasznos a szervó stílusú kimeneteknél, ahol az impulzusszélesség a jelentőséggel bíró mennyiség, nem pedig a kitöltési arány.
Korlátozások¶
A PWM frekvencia és a kitöltési felbontás minden hardver-időzítőn összefügg: magas frekvenciákon kevesebb számlálólépés fér el egy periódusban, így a
duty_u16kevesebb alacsony bitje bír jelentéssel.Az elérhető PWM frekvencia az időzítő órajelforrásától és előosztójától függ. Az STM32 TIM2 / TIM5 a legtöbb alkatrészen 32 bites (valamint a TIM3 / TIM4 is az STM32N6-on), ami szélesebb frekvencia- és kitöltési tartományt biztosít; a többi időzítő 16 bites. A pontos tartományokat lásd a vonatkozó MCU referencia-kézikönyvében.
Az STM32-n az ugyanazon a TIM-en lévő több
PWMcsatorna megoszt egy frekvenciát. Az egyik példányon afreq()beállítása megváltoztatja az adott TIM-hez csatlakoztatott minden más csatorna kimenetét is.