klasa PWM – pulsno-širinska modulacija¶
Klasa PWM izlazi pulsno-širinski moduliran signal na Pin. Riječ je o modernom, međuportabilnom API-ju za PWM; na STM32 OpenMV kamerama omata temeljnu mehaniku kanala pyb.Timer, tako da svaka PWM instanca zauzima jedan kanal mjerača vremena.
Primjer korištenja:
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()
Konstruktori¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Konstruira
PWMobjekt koji upravlja sdest(Pinna OpenMV kamerama). Argumenti s ključnom riječi ekvivalentni su pozivuinit()neposredno nakon konstrukcije:freq– PWM frekvencija u Hz.duty_u16– radni ciklus kao omjerduty_u16 / 65535.duty_ns– širina pulsa u nanosekundama.invert– ako jeTrue, invertira polaritet izlaza.
Najviše jedan od
duty_u16/duty_nsmože se proslijediti odjednom. Postavljanjefreqmože utjecati na drugePWMinstance koje dijele isti temeljni mjerač vremena (vrijedi na STM32 – svaki kanal određenog TIM-a radi na istoj frekvenciji).Metode¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Ponovno konfigurira PWM izlaz. Ažuriraju se samo navedeni argumenti; ostali zadržavaju svoje prethodne vrijednosti. Značenje svakog argumenta potražite u konstruktoru.
- freq() int¶
- freq(value: int, /) None
Dohvaća ili postavlja PWM frekvenciju.
Bez argumenta vraća trenutnu frekvenciju u Hz.
S jednim argumentom
valuepostavlja frekvenciju na tu vrijednost u Hz. Može podićiValueErrorako je frekvencija izvan raspona ostvarivog temeljnim mjeračem vremena.
- duty_u16() int¶
- duty_u16(value: int, /) None
Dohvaća ili postavlja radni ciklus kao 16-bitnu vrijednost bez predznaka u rasponu
0–65535.Bez argumenta vraća trenutni radni ciklus.
S jednim argumentom
valuepostavlja radni ciklus navalue / 65535perioda.0je uvijek nisko,65535je uvijek visoko.
- duty_ns() int¶
- duty_ns(value: int, /) None
Dohvaća ili postavlja širinu pulsa izravno u nanosekundama.
Bez argumenta vraća trenutnu širinu pulsa.
S jednim argumentom
valuepostavlja vrijeme visokog stanja svakog ciklusa navaluenanosekundi. Korisno za izlaze tipa servo gdje je širina pulsa značajna veličina, a ne omjer radnog ciklusa.
Ograničenja¶
PWM frekvencija i razlučivost radnog ciklusa međusobno su ovisne na svakom hardverskom mjeraču vremena: pri visokim frekvencijama u period stane manje koraka brojača, pa je manje nižih bitova
duty_u16značajno.Ostvariva PWM frekvencija ovisi o izvoru takta mjerača vremena i predskaleru. STM32 TIM2 / TIM5 su 32-bitni na većini dijelova (kao i TIM3 / TIM4 na STM32N6), dajući šire raspone frekvencije i radnog ciklusa; preostali mjerači vremena su 16-bitni. Točne raspone potražite u relevantnom referentnom priručniku za MCU.
Na STM32 više
PWMkanala na istom TIM-u dijeli frekvenciju. Postavljanjefreq()na jednoj instanci mijenja izlaz svakog drugog kanala povezanog s tim TIM-om.