〰️ Elettronica digitale · Guida 10

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.

Livello: base/intermedioPWMDuty cycleFrequenza

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.

Il PWM non rende analogico un pin digitale.Il pin continua a commutare tra due livelli; è il rapporto temporale tra accensione e spegnimento a determinare l’effetto medio sul carico.

Duty cycle

Il parametro più importante è il duty cycle, espresso in percentuale. Indica quale frazione del periodo il segnale trascorre nello stato attivo.

Duty cycle = TON / T × 100%T = periodo completo del segnale.

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.

EsempioCon periodo di 1 ms e duty cycle del 25%, TON = 0,25 ms e TOFF = 0,75 ms.

Frequenza e periodo

Oltre al duty cycle dobbiamo conoscere la frequenza PWM, cioè quante volte al secondo viene ripetuto un ciclo completo.

f = 1 / T
EsempioCon T = 1 ms = 0,001 s, la frequenza è 1 / 0,001 = 1000 Hz.

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 con duty cycle 25 50 e 75 percento
Confronto tra segnali PWM con duty cycle del 25%, 50% e 75% alla stessa frequenza, con diverso tempo di permanenza nello stato HIGH.

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 è:

Vmedia = V · Duty cycleDuty cycle espresso tra 0 e 1.
Esempio idealePWM 0–5 V con duty cycle 60% → tensione media = 5 × 0,60 = 3 V.
Tensione media e tensione efficace non sono la stessa cosa.Per un carico resistivo e un PWM 0–V, il valore RMS ideale è V·√D. La potenza dipende quindi dal tipo di carico e non va calcolata semplicemente usando sempre Vmedia.

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.

La corrente istantanea del LED deve comunque essere limitata.Il PWM non sostituisce la resistenza o il circuito di pilotaggio necessario.

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.

Non collegare un motore direttamente a un pin del microcontrollore.La corrente richiesta è normalmente superiore a quella che il GPIO può fornire e i carichi induttivi richiedono protezioni adeguate.

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.

fc = 1 / (2πRC)Frequenza di taglio di un semplice filtro RC.
Il filtro introduce un compromesso.Una frequenza di taglio più bassa riduce maggiormente il ripple, ma rende anche più lenta la risposta quando cambia il duty cycle.
PWM filtrato con circuito RC passa basso e tensione analogica media
Un filtro RC passa-basso attenua la componente pulsata del PWM e produce una tensione più regolare, con ripple residuo dipendente da frequenza e costante di tempo RC.

PWM e DAC: differenze

PWMDAC
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.
Un PWM filtrato può essere usato come DAC economico in alcune applicazioni.Non è però equivalente a un vero DAC in termini di ripple, velocità, precisione e comportamento dinamico.

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.

const int led = 9; void setup() { pinMode(led, OUTPUT); } void loop() { analogWrite(led, 64); // circa 25% delay(1500); analogWrite(led, 128); // circa 50% delay(1500); analogWrite(led, 191); // circa 75% delay(1500); }
Per una scala 8 bit 0–255:0 corrisponde a 0%, circa 128 a 50% e 255 al valore massimo. Frequenza, timer e comportamento preciso dipendono dalla scheda e dal pin.

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.

Timer + comparatore → forma d’onda PWM

Questo consente di generare impulsi regolari senza dover commutare continuamente il pin via software, lasciando la CPU libera per altre operazioni.

Applicazioni del PWM

ApplicazioneUso del PWM
LEDRegolazione della luminosità apparente.
Motori DCControllo della potenza e della velocità.
Servocomandi RCImpulsi temporizzati usati come comando di posizione.
Alimentatori switchingRegolazione dell’energia trasferita.
AudioModulazione e amplificazione in architetture specifiche.
Uscita analogica economicaPWM seguito da filtro passa-basso.
Il termine PWM compare in applicazioni molto diverse.Non significa che frequenze, livelli elettrici e protocolli siano uguali: per esempio il comando di un servo RC non va trattato semplicemente come la regolazione di luminosità di un LED.

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.