klass PWM – pulsbreddsmodulering¶
Klassen PWM matar ut en pulsbreddsmodulerad signal på ett Pin. Det är det moderna, portöverskridande API:et för PWM; på STM32 OpenMV-kameror omsluter det den underliggande pyb.Timer-kanalmekanismen, så varje PWM-instans binder upp en timerkanal.
Exempel på användning:
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()
Konstruktorer¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Konstruera ett
PWM-objekt som driverdest(ettPinpå OpenMV-kameror). Nyckelordsargumenten är likvärdiga med att anropainit()omedelbart efter konstruktion:freq– PWM-frekvens i Hz.duty_u16– arbetscykel som ett förhållandeduty_u16 / 65535.duty_ns– pulsbredd i nanosekunder.invert– omTrue, invertera utsignalens polaritet.
Högst en av
duty_u16/duty_nsfår skickas åt gången. Att angefreqkan påverka andraPWM-instanser som delar samma underliggande timer (gäller på STM32 – varje kanal i en given TIM körs vid samma frekvens).Metoder¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Konfigurera om PWM-utsignalen. Endast de argument som anges uppdateras; de övriga behåller sina tidigare värden. Se konstruktorn för betydelsen av varje argument.
- freq() int¶
- freq(value: int, /) None
Hämta eller ange PWM-frekvensen.
Utan argument returneras den nuvarande frekvensen i Hz.
Med ett enda
value-argument sätts frekvensen till det värdet i Hz. Kan ge upphov tillValueErrorom frekvensen ligger utanför det område som den underliggande timern kan uppnå.
- duty_u16() int¶
- duty_u16(value: int, /) None
Hämta eller ange arbetscykeln som ett osignerat 16-bitars värde i intervallet
0–65535.Utan argument returneras den nuvarande arbetscykeln.
Med ett enda
value-argument sätts arbetscykeln tillvalue / 65535av perioden.0är alltid låg,65535är alltid hög.
- duty_ns() int¶
- duty_ns(value: int, /) None
Hämta eller ange pulsbredden direkt i nanosekunder.
Utan argument returneras den nuvarande pulsbredden.
Med ett enda
value-argument sätts hög-tiden för varje cykel tillvaluenanosekunder. Användbart för servoliknande utsignaler där pulsbredden är den meningsfulla storheten snarare än arbetscykelförhållandet.
Begränsningar¶
PWM-frekvens och arbetscykelupplösning är inbördes beroende på varje hårdvarutimer: vid höga frekvenser ryms färre räknarsteg i en period och därför är färre låga bitar av
duty_u16meningsfulla.Den uppnåeliga PWM-frekvensen beror på timerns klockkälla och förskalare. STM32 TIM2 / TIM5 är 32-bitars på de flesta delar (och TIM3 / TIM4 likaså på STM32N6), vilket ger bredare frekvens- och arbetscykelintervall; de återstående timerna är 16-bitars. Se den relevanta MCU-referensmanualen för de exakta intervallen.
På STM32 delar flera
PWM-kanaler på samma TIM en frekvens. Att angefreq()på en instans ändrar utsignalen för varje annan kanal som är ansluten till den TIM:en.