Trasformare la Pulse-width modulation (PWM) di Arduino in tensione analogica

Vediamo come rendere più simmetrica la gestione dei segnali con Arduino ottenendo un segnale analogico in tensione alla porta analogWrite di Arduino per simmetria con la conversione Analogico-Digitale della porta analogRead.

Per simmetria, dato che la porta analogRead di Arduino è un convertitore AD (Analogico-Digitale), dalla porta analogWrite ci si aspetterebbe un convertitore DA, mentre invece otteniamo un segnale con modulazione PWM (Pulse-width modulation). Vediamo allora come trasformare un segnale modulato con PWM in una tensione analogica.

L'idea di base è molto semplice, infatti per ottenere un segnale analogico da uno modulato tramite PWM è sufficiente filtrare il segnale modulato con un filtro passa basso, vediamo perchè.

Sostanzialmente la modulazione PWM non fa altro che incrementare la durata dello stato logico alto in base al segnale che vogliamo trasmettere, quindi se il segnale d'uscita può variare tra 0 e 255 la modulazione PWM darà in uscita qualcosa di simile a quanto mostrato sotto.

PWM example graphs for Arduino

Sul sito ufficiale di Arduino viene spiegato in modo molto chiaro come modificare la frequenza di modulazione per le varie uscite che generano un segnale modulato tramite PWM.

Per effettuare la conversione in analogico dovremo quindi "interpretare" opportunamente il segnale digitale modulato di modo da trasformarlo nella forma d'onda desiderata. Per effettuare questa decodifica useremo un filtro passa basso, che in sostanza è costituito da una resistenza ed una capacapità come nello schema sottostante.

RC Low Pass Filter

In pratica vogliamo generare un segnale che sale fino ad un valore massimo in base alla durata dello stato logico alto del segnale di ingresso e poi lo stesso segnale dovrà decrescere quando lo stato logico in ingresso è basso. In modo pittoresco ma molto diffuso, possiamo vedere il tutto come un sistema rubinetto e vasca con paperella. Se il rubinetto è aperto (stato logico alto), il secchio si riempie d'acqua e la paperella (il nostro segnale) si alza di livello con l'acqua (come in figura sotto), quando la vasca è piena la paperella non sale più verso l'alto anche se entra altra acqua, se invece togliamo acqua dalla vasca la paperella scende di livello.

Se al posto della vasca mettete un condensatore, al posto del livello della paperella il livello del segnale analogico che vogliamo generare ed al posto dell'acqua la tensione, otterrete il sistema di conversione che ci occorre. Questo è sostanzialmente il funzionamento di un filtro passa basso.

Non resta che dimensionare opportunamente le varie parti del circuito per ottenere il risultato desiderato. Vogliamo infatti che la vasca si riempia con la velocità giusta per non far salire troppo in fretta la paperella ed occorre anche una vasca sufficientemente grande per far raggiungere il livello desiderato alla paperella.

Dimensionare un filtro di questo tipo non è molto difficile però richiede alcune conoscenze base di teoria dei circuiti poichè ci sono altri aspetti da tenere in conto, quindi per semplificare ulteriormente l'operazione possiamo ricorrere ad uno strumento disponibile online estremamente comodo e facile da usare a questo link. Basterà inserire i dati relativi al segnale modulato tramite PWM sul sito indicato prima per ottenere tutti i dettagli per il progetto del filtro passa basso necessario per fare la conversione DA.

Abbiamo visto e spiegato (in modo pittoresco) come ottenere un convertitore DA in uscita da Arduino tramite il segnale modulato PWM ed un semplice filtro passa basso. Ovviamente il filtro lo possiamo aggiungere o rimuovere in base alle necessità 

Arduino è disponibile da Farnell

Scarica subito una copia gratis

Una risposta

  1. Avatar photo Emanuele 30 Agosto 2011

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend