Home
Accesso / Registrazione
 di 

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

PWM-Output-Voltage con arduino

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

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di pwm-arduino

Semplice, chiaro, conciso ...

Semplice, chiaro, conciso ... un ottimo tutorial. Grazie!

ritratto di Emanuele

PWM

Per chi volesse approfondire, ne abbiamo parlato anche qui
http://it.emcelettronica.com/generare-tensione-analogica-con-circuito-digitale-i

Invece di Arduino (Atmel) sono stati presi come esempio i Picmicro (Microchip)

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti