clasa PWM – modulație în lățimea impulsului¶
Clasa PWM emite un semnal modulat în lățimea impulsului pe un Pin. Este API-ul modern, multi-port, pentru PWM; pe camerele STM32 OpenMV încapsulează mecanismul subiacent de canal pyb.Timer, astfel încât fiecare instanță PWM ocupă un canal de temporizator.
Exemplu de utilizare:
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()
Constructori¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Construiește un obiect
PWMcare comandădest(unPinpe camerele OpenMV). Argumentele de tip cuvânt-cheie sunt echivalente cu apelareainit()imediat după construire:freq– frecvența PWM în Hz.duty_u16– factorul de umplere ca raportduty_u16 / 65535.duty_ns– lățimea impulsului în nanosecunde.invert– dacă esteTrue, inversează polaritatea ieșirii.
Cel mult unul dintre
duty_u16/duty_nspoate fi transmis odată. Setareafreqpoate afecta alte instanțePWMcare partajează același temporizator subiacent (valabil pe STM32 – fiecare canal al unui anumit TIM rulează la aceeași frecvență).Metode¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Reconfigurează ieșirea PWM. Doar argumentele furnizate sunt actualizate; celelalte își păstrează valorile anterioare. Consultați constructorul pentru semnificația fiecărui argument.
- freq() int¶
- freq(value: int, /) None
Citește sau setează frecvența PWM.
Fără argument, returnează frecvența curentă în Hz.
Cu un singur argument
value, setează frecvența la acea valoare în Hz. Poate generaValueErrordacă frecvența este în afara intervalului care poate fi atins de temporizatorul subiacent.
- duty_u16() int¶
- duty_u16(value: int, /) None
Citește sau setează factorul de umplere ca valoare nesemnată pe 16 biți în intervalul
0–65535.Fără argument, returnează factorul de umplere curent.
Cu un singur argument
value, setează factorul de umplere lavalue / 65535din perioadă.0este întotdeauna jos,65535este întotdeauna sus.
- duty_ns() int¶
- duty_ns(value: int, /) None
Citește sau setează lățimea impulsului direct în nanosecunde.
Fără argument, returnează lățimea curentă a impulsului.
Cu un singur argument
value, setează timpul de nivel sus al fiecărui ciclu lavaluenanosecunde. Util pentru ieșiri de tip servo, unde lățimea impulsului este mărimea relevantă, mai degrabă decât raportul factorului de umplere.
Limitări¶
Frecvența PWM și rezoluția factorului de umplere sunt interdependente pe fiecare temporizator hardware: la frecvențe ridicate, mai puțini pași de numărător încap într-o perioadă și, prin urmare, mai puțini biți inferiori ai
duty_u16sunt semnificativi.Frecvența PWM care poate fi atinsă depinde de sursa de ceas a temporizatorului și de prescaler. STM32 TIM2 / TIM5 sunt pe 32 de biți pe majoritatea componentelor (precum și TIM3 / TIM4 pe STM32N6), oferind intervale mai largi de frecvență și factor de umplere; restul temporizatoarelor sunt pe 16 biți. Consultați manualul de referință al MCU-ului relevant pentru intervalele exacte.
Pe STM32, mai multe canale
PWMde pe același TIM partajează o frecvență. Setareafreq()pe o instanță schimbă ieșirea fiecărui alt canal atașat acelui TIM.