luokka PWM – pulssinleveysmodulaatio

PWM -luokka tuottaa pulssinleveysmoduloidun signaalin Pin -nastaan. Se on moderni, porttien välinen PWM-API; STM32-pohjaisissa OpenMV-kameroissa se kääriytyy taustalla olevan pyb.Timer -kanavakoneiston ympärille, joten jokainen PWM -instanssi varaa yhden ajastinkanavan.

Esimerkki käytöstä:

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()

Konstruktorit

class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)

Muodosta PWM -olio, joka ohjaa kohdetta dest (Pin OpenMV-kameroissa). Avainsana-argumentit vastaavat metodin init() kutsumista heti muodostamisen jälkeen:

  • freq – PWM-taajuus hertseinä.

  • duty_u16 – pulssisuhde suhteena duty_u16 / 65535.

  • duty_ns – pulssin leveys nanosekunteina.

  • invert – jos True, käännä ulostulon polariteetti.

Kerrallaan voidaan antaa enintään yksi arvoista duty_u16 / duty_ns. freq -arvon asettaminen voi vaikuttaa muihin PWM -instansseihin, jotka jakavat saman taustalla olevan ajastimen (pätee STM32:ssa – tietyn TIM:n jokainen kanava toimii samalla taajuudella).

Metodit

init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None

Konfiguroi PWM-ulostulo uudelleen. Vain annetut argumentit päivitetään; muut säilyttävät aiemmat arvonsa. Katso kunkin argumentin merkitys konstruktorista.

deinit() None

Poista PWM-ulostulo käytöstä ja vapauta sen varaama ajastinkanava.

freq() int
freq(value: int, /) None

Hae tai aseta PWM-taajuus.

Ilman argumenttia palauttaa nykyisen taajuuden hertseinä.

Yhdellä value -argumentilla asettaa taajuuden kyseiseen arvoon hertseinä. Voi nostaa ValueError -poikkeuksen, jos taajuus on taustalla olevan ajastimen saavutettavan alueen ulkopuolella.

duty_u16() int
duty_u16(value: int, /) None

Hae tai aseta pulssisuhde etumerkittömänä 16-bittisenä arvona välillä 065535.

Ilman argumenttia palauttaa nykyisen pulssisuhteen.

Yhdellä value -argumentilla asettaa pulssisuhteeksi value / 65535 jaksosta. 0 on aina matala, 65535 on aina korkea.

duty_ns() int
duty_ns(value: int, /) None

Hae tai aseta pulssin leveys suoraan nanosekunteina.

Ilman argumenttia palauttaa nykyisen pulssin leveyden.

Yhdellä value -argumentilla asettaa kunkin jakson korkean tilan kestoksi value nanosekuntia. Hyödyllinen servotyylisissä ulostuloissa, joissa pulssin leveys on merkityksellinen suure pulssisuhteen sijaan.

Rajoitukset

  • PWM-taajuus ja pulssisuhteen tarkkuus ovat toisistaan riippuvaisia jokaisessa laitteistoajastimessa: korkeilla taajuuksilla jaksoon mahtuu vähemmän laskuriaskelia, jolloin harvemmat duty_u16 -arvon alimmat bitit ovat merkityksellisiä.

  • Saavutettava PWM-taajuus riippuu ajastimen kellolähteestä ja esijakajasta. STM32:n TIM2 / TIM5 ovat useimmissa osissa 32-bittisiä (kuten myös TIM3 / TIM4 STM32N6:ssa), mikä antaa laajemmat taajuus- ja pulssisuhdealueet; loput ajastimet ovat 16-bittisiä. Katso tarkat alueet kyseisen MCU:n referenssimanuaalista.

  • STM32:ssa useat saman TIM:n PWM -kanavat jakavat taajuuden. Metodin freq() asettaminen yhdessä instanssissa muuttaa jokaisen muun samaan TIM:iin liitetyn kanavan ulostuloa.