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 PWM objektumot, amely a dest lábat (egy Pin az OpenMV kamerákon) hajtja meg. A kulcsszó argumentumok egyenértékűek az init() 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 / 65535 aránya formájában.

  • duty_ns – impulzusszélesség nanoszekundumban.

  • invert – ha True, megfordítja a kimenet polaritását.

Egyszerre legfeljebb a duty_u16 / duty_ns egyike adható át. A freq beállítása hatással lehet más PWM pé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.

deinit() None

A PWM kimenet letiltása és az általa elfoglalt időzítő-csatorna felszabadítása.

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 value argumentummal a frekvenciát az adott Hz értékre állítja. ValueError kivé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 065535 tartományban.

Argumentum nélkül visszaadja az aktuális kitöltési tényezőt.

Egyetlen value argumentummal a kitöltési tényezőt a periódus value / 65535 részére állítja. A 0 mindig alacsony, a 65535 mindig 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 value argumentummal az egyes ciklusok magas-idejét value nanoszekundumra á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_u16 kevesebb 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 PWM csatorna megoszt egy frekvenciát. Az egyik példányon a freq() beállítása megváltoztatja az adott TIM-hez csatlakoztatott minden más csatorna kimenetét is.