La Pulse-width modulation (o PWM in breve) è un concetto semplice che ha molte applicazioni. Diamo un’occhiata a un’onda quadra.
La forma d’onda ha una certa frequenza. La frequenza e il periodo della forma d’onda sono l’inverso l’uno dell’altro, cioè Frequenza = 1/Periodo e Periodo = 1/Frequenza. Un periodo di 1s significa una frequenza di 1Hz. Un periodo di 0,1s indica una frequenza di 10 Hz e un periodo di 10 s indica una frequenza di 0,1 Hz.
Si noti che il segnale è interamente digitale, in quanto può essere acceso (on)/alto o spento (off)/basso. Questo è diverso da, per esempio, un’onda sinusoidale, che è analogica e passa dolcemente attraverso la forma d’onda.
Si noti inoltre che, per un’onda quadra, il segnale è acceso per metà del tempo e spento per metà del tempo.
La parte on della forma d’onda è chiamata Duty Cycle (Ciclo di lavoro): è la proporzione di tempo per la quale il segnale fornisce alimentazione/lavora/è in servizio. Per un’onda quadra questo è il 50% delle volte, il che significa che il segnale ha un duty cycle del 50%; cioè se il periodo fosse 1s (la frequenza fosse 1Hz), il segnale sarebbe attivo per 0,5s e spento per 0,5s.
Il positivo o parte della forma d’onda può anche essere pensato come un impulso di energia. Modificando la larghezza dell’impulso (il duty cycle), possiamo cambiare la quantità proporzionale di energia nella forma d’onda.
Da ciò deriva il termine Pulse-Width Modulation (modifica dell’ampiezza dell’impulso).
Principali usi di PWM
La Pulse-width modulation (modulazione dell’ampiezza dell’impulso, di seguito denominata in breve sempre) è un modo in cui un sistema digitale può generare un’uscita analogica (facendo passare il segnale PWM attraverso un circuito aggiuntivo e/o un sistema meccanico). Alcuni esempi di applicazioni per PWM sono:
- Un segnale PWM può essere utilizzato per generare una tensione analogica facendo passare il segnale attraverso un filtro passa-basso.
- PWM può essere utilizzato per controllare proporzionalmente la velocità di un motore DC (DC Motor).
Motore DC
- PWM viene utilizzato per impostare la posizione di alcuni tipi di servomotori
Servomotore
- PWM può essere utilizzato per controllare la quantità di calore generata da un elemento riscaldante.
- Il PWM viene utilizzato nei convertitori buck e boost per convertire una tensione di ingresso in una tensione inferiore o fino a una tensione superiore.
- Il PWM può essere utilizzato per controllare la luminosità [apparente] di una lampadina o di un LED.
- … e molti, molti altri.
In alcuni casi l’uscita è una tensione o corrente elettrica, in altri casi è una grandezza fisica come forza/posizione/calore/luminosità, ma in tutti i casi l’uscita può essere scalata uniformemente tra il massimo di completamente acceso e il minimo di completamente spento utilizzando il PWM.
Da PWM a segnale analogico
Diamo un’occhiata al caso della conversione di un segnale PWM in una tensione analogica. Per questo abbiamo bisogno di un filtro passa-basso.
Il PWM digitale a 5 V viene convertito in un’uscita analogica a 2,5 V (50% di 5 V = 2,5 V).
Valori più piccoli di R (resistenza) o C (condensatore) si tradurranno in una risposta più rapida ai cambiamenti nell’ingresso, ma più jitter sull’uscita (e viceversa).
La modifica del duty cycle cambierà la tensione di uscita. Un duty cycle del 20%, ad esempio, si tradurrà in un’uscita di 1 V (20% di 5 V = 1 V):
Al contrario, un duty cycle dell’80% si tradurrà in un’uscita di 4 V (80% di 5 V = 4 V):
Aumentando la frequenza del PWM diminuirà anche il jitter dell’uscita:
Si noti che questo a sua volta significa che è possibile utilizzare valori di resistenza e/o condensatore relativamente più bassi e quindi risposte relativamente più rapide ottenute ai cambiamenti nell’ingresso. Questa è una regola generale per PWM: maggiore è la frequenza PWM, più uniforme e reattiva può essere l’uscita.
Per quanto riguarda la reattività, tuttavia, bisogna ricordare solo che per aumentare la reattività l’elemento di livellamento nel sistema (filtro passa-basso resistore-condensatore negli esempi precedenti) deve essere ridotto. In alternativa, il livello di potenza in ingresso (tensione della forma d’onda in ingresso negli esempi precedenti) dovrebbe essere aumentato. In un sistema meccanico, l’elemento levigante del sistema può essere l’inerzia (massa) del sistema, ne parleremo più avanti.
Ci sono sempre limiti superiori a quanto può essere alta la frequenza PWM, questo può essere limitato dalla frequenza di clock del sistema digitale che genera il PWM, o dalla rapidità con cui possono rispondere gli elementi di commutazione nel sistema di uscita, un relè può impiegare alcuni ms per cambiare, o una valvola potrebbe impiegare un po’ di tempo per aprirsi/chiudersi, per esempio.
E’ anche possibile utilizzare anche un filtro passa-basso induttore-resistenza:
Tuttavia, i filtri resistore-condensatore sono generalmente preferiti per questo particolare tipo di applicazione, a causa delle minori frequenze/dimensioni dei componenti richiesti.
Embedded PWM
La maggior parte dei microcontrollori moderni dispone di periferiche PWM integrate che possono generare uscite PWM entro un determinato intervallo di frequenze e risoluzioni. Se sono richieste frequenze inferiori a quelle che possono essere generate dalla periferica PWM, ciò può essere fatto utilizzando un interrupt del timer e impostando manualmente il pin alto e basso.
In Arduino, la funzione analogWrite() genera direttamente un output PWM:
PWM con elementi meccanici
Per i sistemi meccanici, l’elemento di livellamento del sistema è spesso l’inerzia del sistema, ovvero la velocità con cui il sistema reagisce a un cambiamento di input (utilizzando come esempio i concetti di volano/giostra).
Immaginate di aggiungere un getto d’acqua a una giostra e di poter aprire e chiudere quel getto d’acqua con un’elettrovalvola.
Se apriamo la valvola, la giostra gira più velocemente, se chiudiamo la valvola, la giostra rallenterà naturalmente di nuovo a causa della resistenza dell’aria e dei cuscinetti.
Secondo la seconda legge del moto di Newton, Accelerazione = Forza / Massa. Se assumiamo che la forza sia costante (con PWM la forza è generalmente considerata costante, poiché la tensione della forma d’onda è costante, non otterremo di più complicato di così per ora, assumeremo che la pressione dell’acqua sia costante), quindi possiamo vedere che l’accelerazione dipende esclusivamente dalla massa (inerzia). La velocità alla quale la giostra gira sarà data dalla formula Velocità = Accelerazione x Tempo. Da queste formule possiamo vedere che la velocità è direttamente proporzionale alla forza, e se la forza viene applicata solo per il 50% del tempo (50% duty cycle), anche la velocità sarà il 50% di quella che sarebbe se il la forza venisse applicata costantemente. Un duty cycle del 10% significherebbe una velocità del 10%, un duty cycle del 90% significherebbe una velocità del 90% e così via. Da questo possiamo vedere che possiamo generare un’uscita analogica (velocità) da un ingresso digitale (controllando il getto d’acqua come completamente acceso o completamente spento) variando il duty cycle.
Ci sono alcuni aspetti che non abbiamo esaminato in dettaglio, come le specifiche delle forze di resistenza che agiscono nella direzione opposta al getto d’acqua e come la distanza del getto d’acqua dal centro influirà sulle cose, ma quello che abbiamo esaminato è sufficiente per coprire il principio PWM. Possiamo notare che la frequenza massima del PWM sarà limitata dalla velocità con cui il solenoide che controlla il getto d’acqua può aprirsi e chiudersi, e anche che il jitter nel sistema (per una data frequenza) dipenderà dalla massa della giostra, questo perché la giostra accelererà sempre (getto d’acqua aperto) o decelererà (resistenza aria/cuscinetto) ma maggiore è la massa minore sarà l’accelerazione (variazione di velocità) dovuta a quelle forze (meno jitter).
Gli stessi principi si applicano a un motore DC azionato da campi magnetici (piuttosto che da un getto d’acqua), un elemento riscaldante in un serbatoio d’acqua, una lampadina DC e così via. L’apparente oscuramento di un LED tramite PWM è dovuto al frame-rate ottico dei nostri occhi (persistenza della visione), tuttavia questo è un argomento per un altro articolo!
Riepilogo
Nel complesso, il principio del PWM è molto semplice: convertire un ingresso digitale in un’uscita analogica. Le variabili nel sistema sono la forza (tensione), la frequenza, il duty-cycle e l’inerzia dell’elemento livellante; e i limiti di regolazione di questi variano in base all’applicazione.
Con Proteus, distribuito in Italia da Galgo Electronics, è possibile effettuare tutti questi semplici esperimenti in maniera rapida e ripetuta grazie al modulo delle funzioni di simulazione avanzate. Vai al Sample Design Browser per trovare rapidamente una serie di progetti di esempio di simulazione incorporati già pronti inclusi nella versione demo di Proteus: scarica subito la versione demo qui.