PWM: cos’è e come funziona
La PWM, Pulse Width Modulation, è una tecnica che permette di controllare la potenza media trasferita a un carico variando il tempo durante il quale un segnale digitale rimane attivo. È usata per regolare LED, motori, alimentatori switching, servocomandi e numerosi sistemi elettronici.
Cos’è il PWM?
PWM significa Pulse Width Modulation, cioè modulazione della larghezza dell’impulso. Il segnale continua ad assumere soltanto due livelli logici, HIGH e LOW, ma viene modificata la proporzione di tempo trascorsa nello stato HIGH.
Duty cycle
Il parametro più importante è il duty cycle, espresso in percentuale. Indica quale frazione del periodo il segnale trascorre nello stato attivo.
25%
HIGH per un quarto del periodo e LOW per i restanti tre quarti.
50%
HIGH e LOW occupano la stessa durata.
75%
HIGH per tre quarti del periodo.
Frequenza e periodo
Oltre al duty cycle dobbiamo conoscere la frequenza PWM, cioè quante volte al secondo viene ripetuto un ciclo completo.
Duty cycle e frequenza sono grandezze differenti: possiamo mantenere la stessa percentuale di duty cycle modificando la velocità con cui gli impulsi si ripetono.
PWM con duty cycle 25%, 50% e 75%
Confrontare graficamente più segnali alla stessa frequenza è il modo più immediato per capire cosa cambia realmente al variare del duty cycle.
PWM e potenza media
Quando un carico viene alimentato rapidamente a impulsi, il duty cycle permette di regolare l’energia media trasferita. In un modello ideale resistivo, con impulsi tra 0 e una tensione V, la tensione media è:
Regolare la luminosità di un LED
Il PWM viene spesso utilizzato per controllare la luminosità apparente di un LED. Il LED viene acceso e spento rapidamente; aumentando il duty cycle aumenta il tempo medio durante il quale conduce corrente.
Controllare un motore con PWM
Il PWM è molto usato per controllare la velocità dei motori DC. Il microcontrollore genera il comando PWM, mentre la corrente del motore viene gestita da un transistor, MOSFET o driver dedicato.
PWM e filtro passa-basso RC
Un filtro RC passa-basso può attenuare la componente pulsata del PWM e produrre una tensione più regolare, vicina al suo valore medio.
PWM e DAC: differenze
| PWM | DAC |
|---|---|
| Segnale digitale HIGH/LOW. | Genera livelli analogici discreti. |
| Il valore medio dipende dal duty cycle. | Il livello dipende dal codice digitale. |
| Può richiedere un filtro RC. | Fornisce direttamente un’uscita analogica secondo la propria architettura. |
| Molto comune nei microcontrollori. | Non presente su tutte le MCU. |
PWM con Arduino
Sulle classiche schede Arduino, analogWrite() viene spesso utilizzata per impostare il duty cycle dei pin dotati di PWM hardware. Nonostante il nome della funzione, su queste uscite viene normalmente generato un segnale digitale PWM.
Come viene generato il PWM nell’hardware
Nei microcontrollori il PWM viene normalmente prodotto dai timer/counter. Un contatore avanza con il clock e il suo valore viene confrontato con un registro di confronto. Il risultato del confronto determina quando l’uscita cambia stato.
Questo consente di generare impulsi regolari senza dover commutare continuamente il pin via software, lasciando la CPU libera per altre operazioni.
Applicazioni del PWM
| Applicazione | Uso del PWM |
|---|---|
| LED | Regolazione della luminosità apparente. |
| Motori DC | Controllo della potenza e della velocità. |
| Servocomandi RC | Impulsi temporizzati usati come comando di posizione. |
| Alimentatori switching | Regolazione dell’energia trasferita. |
| Audio | Modulazione e amplificazione in architetture specifiche. |
| Uscita analogica economica | PWM seguito da filtro passa-basso. |
Errori comuni
- pensare che il PWM generi direttamente una tensione analogica continua;
- confondere duty cycle e frequenza;
- considerare tensione media e RMS come equivalenti;
- pilotare motori o carichi di potenza direttamente dal GPIO;
- dimenticare il ripple quando si filtra un PWM;
- scegliere una frequenza PWM inadatta al carico;
- confondere un vero DAC con
analogWrite()su un pin PWM; - ignorare i limiti di corrente e tensione del microcontrollore;
- supporre che tutti i pin PWM abbiano la stessa frequenza su ogni scheda;
- modificare i timer senza considerare le altre funzioni che possono dipendere dagli stessi timer.

