classe PWM – modulazione di larghezza di impulso¶
La classe PWM emette un segnale modulato in larghezza di impulso su un Pin. È l’API moderna e cross-port per il PWM; sulle OpenMV cam STM32 incapsula il meccanismo sottostante del canale pyb.Timer, quindi ogni istanza PWM occupa un canale timer.
Esempio di utilizzo:
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()
Costruttori¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Costruisce un oggetto
PWMche pilotadest(unPinsulle OpenMV cam). Gli argomenti per parola chiave sono equivalenti a chiamareinit()immediatamente dopo la costruzione:freq– frequenza PWM in Hz.duty_u16– duty cycle come rapportoduty_u16 / 65535.duty_ns– larghezza dell’impulso in nanosecondi.invert– seTrue, inverte la polarità dell’uscita.
Si può passare al massimo uno tra
duty_u16/duty_nsalla volta. Impostarefreqpuò influenzare altre istanzePWMche condividono lo stesso timer sottostante (vero su STM32 – ogni canale di un dato TIM funziona alla stessa frequenza).Metodi¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Riconfigura l’uscita PWM. Vengono aggiornati solo gli argomenti forniti; gli altri mantengono i valori precedenti. Vedere il costruttore per il significato di ciascun argomento.
- freq() int¶
- freq(value: int, /) None
Legge o imposta la frequenza PWM.
Senza argomenti, restituisce la frequenza corrente in Hz.
Con un singolo argomento
value, imposta la frequenza a quel valore in Hz. Può sollevareValueErrorse la frequenza è al di fuori dell’intervallo ottenibile dal timer sottostante.
- duty_u16() int¶
- duty_u16(value: int, /) None
Legge o imposta il duty cycle come valore senza segno a 16 bit nell’intervallo
0–65535.Senza argomenti, restituisce il duty corrente.
Con un singolo argomento
value, imposta il duty cycle avalue / 65535del periodo.0è sempre basso,65535è sempre alto.
- duty_ns() int¶
- duty_ns(value: int, /) None
Legge o imposta la larghezza dell’impulso direttamente in nanosecondi.
Senza argomenti, restituisce la larghezza dell’impulso corrente.
Con un singolo argomento
value, imposta il tempo alto di ogni ciclo avaluenanosecondi. Utile per uscite di tipo servo dove la larghezza dell’impulso è la quantità significativa anziché il rapporto di duty.
Limitazioni¶
La frequenza PWM e la risoluzione del duty sono interdipendenti su ogni timer hardware: a frequenze elevate, in un periodo entrano meno passi del contatore e quindi sono significativi meno bit bassi di
duty_u16.La frequenza PWM ottenibile dipende dalla sorgente di clock del timer e dal prescaler. I TIM2 / TIM5 STM32 sono a 32 bit sulla maggior parte dei componenti (così come TIM3 / TIM4 sull’STM32N6), offrendo intervalli di frequenza e duty più ampi; i restanti timer sono a 16 bit. Consultare il manuale di riferimento dell’MCU pertinente per gli intervalli esatti.
Su STM32 più canali
PWMsullo stesso TIM condividono una frequenza. Impostarefreq()su un’istanza cambia l’uscita di ogni altro canale collegato a quel TIM.