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 kohdettadest(PinOpenMV-kameroissa). Avainsana-argumentit vastaavat metodininit()kutsumista heti muodostamisen jälkeen:freq– PWM-taajuus hertseinä.duty_u16– pulssisuhde suhteenaduty_u16 / 65535.duty_ns– pulssin leveys nanosekunteina.invert– josTrue, käännä ulostulon polariteetti.
Kerrallaan voidaan antaa enintään yksi arvoista
duty_u16/duty_ns.freq-arvon asettaminen voi vaikuttaa muihinPWM-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.
- 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 nostaaValueError-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ä
0–65535.Ilman argumenttia palauttaa nykyisen pulssisuhteen.
Yhdellä
value-argumentilla asettaa pulssisuhteeksivalue / 65535jaksosta.0on aina matala,65535on 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 kestoksivaluenanosekuntia. 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. Metodinfreq()asettaminen yhdessä instanssissa muuttaa jokaisen muun samaan TIM:iin liitetyn kanavan ulostuloa.