La tecnica PWM è un tipo di modulazione digitale che permette di ottenere una tensione media variabile. Questa tensione media dipende dal rapporto tra la durata dell’impulso positivo e dell’impulso negativo. Questo viene definito duty cycle.
Nei sistemi moderni, la PWM può essere attivata e manipolata a piacimento. È da segnalare come la PWM sia indistinguibile, ad occhio umano, da un analogico puro.
I parametri del PWM
La tecnica PWM agisce direttamente sulla durata dell’impulso modificando la lunghezza del periodo tra due impulsi.
Generalmente il duty cycle, in elettronica, viene definito come il rapporto tra il tempo di attivazione del segnale e il tempo totale, e si esprime in percentuale. A conoscenza di ciò, possiamo enunciare alcuni valori tipici. Per comodità verranno anche riportati i valori su Arduino:
0%, assenza di attivazione del segnale | Arduino = 0
25% | Arduino = 63
50% | Arduino = 127
75% | Arduino = 191
100%, con segnale sempre attivo | Arduino = 255
Applicazioni del PWM
La tecnica PWM viene fondamentalmente usata:
per regolare la potenza elettrica in uscita. In questo caso, la tecnica PWM permette di alterare la tensione ricevuta all’utilizzatore variando la tensione media. Se infatti:
con duty cycle pari a 100 la tensione è massima
con duty cycle pari a 0 la tensione è nulla
Se ne deduce che tutti i valori intermedi di duty cycle permettano di avere tensioni intermedie tra 0 e 100
effettuare una conversione da digitale a analogico. In questo caso servendosi di un filtro RC possiamo trasformare un valore digitale in una tensione continua. Al pratico, questo si traduce nell’utilizzo di un timer in grado di generare onde quadre con duty cycle variabile. Variando il duty cycle varierà la tensione in uscita
Come usare il PWM per pilotare un carico?
In un sistema Arduino, usare la PWM per pilotare un carico è molto semplice. È sufficiente collegare il nostro utilizzatore ad uno dei pin digitali PWM-ready e poi impostare il duty cycle da programma. Per pilotare un carico si ricorre alla funzione:
analogWrite(pin, valore);