PWM to DAC
Come convertire un segnale P.W.M. (Pulse Width Modulation) in una tensione variabile?
Normalmente i microcontrollori e le schede tipo Arduino dispongono di pin che in uscita possono fornire un segnale a frequenza fissa ma con duty cycle regolabile da 0 a 100%. (P.W.M. Out). A volte capita di avere la necessità di disporre di un' uscita regolabile in tensione da 0 a 5V, questo si può ottenere facilmente ed in modo economico utilizzando un filtro RC tipo Passa-Basso opportunamente dimensionato in base alla frequenza del P.W.M.
Come visibile dall'immagine sopra, la scheda Arduino UNO dispone di 6 uscite PWM, esattamente il pin 3, 5, 6, 9, 10, 11.
In questo caso volendo convertire queste uscite PWM in uscite Analigiche, bisogna applicare in uscita un filtro RC di tipo passa basso con costante di tempo R*C abbastanza elevata (circa 0.2 sec.), in pratica il filtro deve avere una frequenza di taglio molto bassa, minore di 1 Hz. Più la frequenza di taglio è bassa e più il filtro elimina le componenti alternate lasciando passare solo la tensione continua corrispondente al valore medio del segnale in ingresso al filtro che dipende dal valore del duty cycle del segnale PWM.
Ci sono alcune considerazioni da fare:
più la costante di tempo del filtro sarà elevata, più sarà lenta la risposta alle variazioni del PWM. Per contro, se la costante di tempo RC è bassa, la risposta del filtro sarà veloce ma maggiore sarà il ripple (ondulazione residua) in uscita. Se focalizziamo il problema sulla variazione del PWM necessario per il controllo dell'effetto Giorno-Notte di un presepe (variazioni di luminosità relativamente lente) possiamo tranquillamente ricorrere ad un doppio filtro RC (filtro del 2° ordine) che permette così di attenuare meglio il ripple in uscita ed ottenere così una tensione di uscita stabile proporzionale al PWM in ingresso.
Le simulazioni seguenti chiariranno meglio i concetti esposti.
Le simulazioni sono state effettuate con Microcap 10 Evaluation version (scaricabile da questo Link), in ingresso al filtro oggetto della simulazione è stato collegato un generatore ad onda quadra, ampiezza 5V e Frequenza 500Hz con duty cycle del 50%, in uscita al filtro è stata collegata una resistenza di valore molto alto che simula lo stadio seguente al filtro che normalmente è costituito da un amplificatore operazionale con alta impedenza d' ingresso. Da notare che essendo la costante di tempo elevata il filtro si comporta da integratore, cioè raggiungerà il valore finale dopo un certo numero di impulsi in ingresso che nella simulazione sono tracciati di colore grigio chiaro.
Il 1° CASO analizzato prevede un filtro RC con risposta relativamente veloce, il tempo necessario a raggiungere i 2.5V è pari a 0.2 secondi, però è presente una certa ondulazione (ripple) ben visibile effettuando uno zoom sulla forma d'onda in uscita VEDI QUI.
Il 2° CASO analizzato prevede lo stesso tipo di filtro del caso precedente con la resistenza R aumentata di valore, la risposta è decisamente più lenta, il tempo necessario a raggiungere i 2.5V è circa 0.4 secondi, però in questo caso l'ondulazione (ripple) è di livello inferiore, come ben visibile effettuando uno zoom sulla forma d'onda in uscita VEDI QUI.
Nella simulazione seguente si mettono a confronto un filtro RC del primo ordine ed un doppio RC del secondo ordine e l'analisi riguarda la risposta in frequenza. Come visibile dal grafico entrambi i filtri presentano una frequenza di taglio di circa 0.8Hz
però la risposta del filtro del 2° ordine presenta una pendenza maggiore (traccia blù) e di conseguenza un maggior effetto filtrante.
La velocità di risposta è simile per entrambi i filtri come visibile da questa simulazione.
La differenza sostanziale è nel valore del ripple in uscita, effettuando uno zoom sul grafico si nota la notevole riduzione dell'ondulazione nel caso del doppio filtro RC (traccia blu) VEDI QUI.
Verifica pratica:
Una volta effettuata l' analisi teorica è stata effettuata una verifica pratica utilizzando lo schema seguente:
Per testare il convertitore PWM to Analogic è stato caricato su Arduino il seguente programma di prova:
Le uscite denominate DAC1 e DAC2 e la massa GND, sono state collegate alla scheda 8 DAC to 8 PWM che rigenera di nuovo un segnale PWM a 100Hz sincronizzato con il passaggio a zero della tensione di rete, necessario per il controllo del dimmer in alternata.
Il risultato è stato ottimo, le dissolvenze s' incrociano senza alcun tremolio della luce.
Materiale scaricabile:
File in formato MICROCAP usati per le simulazioni al transitorio ed in AC.
Codice sorgente di prova per Arduino UNO.