Sei sulla pagina 1di 9

Generare una tensione analogica con un circuito digitale (I)

http://it.emcelettronica.com/print/52277

Published on L'Elettronica Open Source (http://it.emcelettronica.com)

Home > Blog > blog di cristinap5 > Generare una tensione analogica con un circuito digitale (I)

Generare una tensione analogica con un circuito digitale (I)

By cristinap5 Created 05/05/2009 - 17:00

In quest’articolo si affronterà in dettaglio il metodo per generare una tensione analogica utilizzando un circuito digitale (la rete di resistenza conosciuta come R/2R). Questo metodo necessita di un numero di pin del microcontrollore disponibili da utilizzare soltanto per questo specifico compito. Si tratta di un metodo molto conveniente, in quanto richiede solo un paio di resistenze di soli due valori diversi. Il circuito mostrato nella Figura 1 descrive un DAC a 8-bit costruita attorno ai pin del microcontrollore disponibili, usando resistenze di 2kOhm e 1kOhm. Per semplificare la “Bill of Materials”, è possibile utilizzare anche solo resistenze da 1kOhm, usando due di loro in serie, invece di ogni resistenza da 2kOhm.

due di loro in serie, invece di ogni resistenza da 2kOhm. Il vantaggio di questo circuito,

Il vantaggio di questo circuito, al di là del suo bassissimo costo, è la facilità con cui si attiva. Gli 8 pin del microcontrollore utilizzati hanno le stesse funzioni degli 8 bit di un DAC, dove il pin di sinistra fa da LSB e quello destro da MSB. Il codice digitale applicato dal microcontrollore ai suoi pin rappresenta il valore esatto necessario per un DAC legittimo al fine di generare la tensione richiesta:

0000.0000………… 0.000V 0000.0001………… 0.019V 1000.0000………… 2.481V 1111.1111………… 4.981V

Con questa particolare configurazione è facile aumentare/diminuire il numero di bit del DAC, semplicemente utilizzando più o meno pin del microcontrollore e più/meno rami R/2R. Le immagini che seguono illustrano il valore di uscita simulato per alcuni dei codici digitali che possono essere applicati:

Generare una tensione analogica con un circuito digitale (I)

http://it.emcelettronica.com/print/52277

digitale (I) http://it.emcelettronica.com/print/52277 Figura 2 – 8-bit DAC con codice digitale applicato

Figura 2 – 8-bit DAC con codice digitale applicato 1111.1111

2 – 8-bit DAC con codice digitale applicato 1111.1111 Figura 3 – 8-bit DAC con codice

Figura 3 – 8-bit DAC con codice digitale applicato 0111.1111

Generare una tensione analogica con un circuito digitale (I)

http://it.emcelettronica.com/print/52277

digitale (I) http://it.emcelettronica.com/print/52277 Figura 4 – 8-bit DAC con codice digitale applicato

Figura 4 – 8-bit DAC con codice digitale applicato 0000.0001

Va rilevato però che qualsiasi desiderio di utilizzare la tensione generata per un’applicazione reale necessiterà di un buffering con un’alta memoria tampone. La ragione di ciò sta nel fatto che qualsiasi ulteriore carico applicato all’uscita di questo DAC disturba il comportamento della rete R/2R, introducendo così errori. Si può usare un semplice ripetitore di tensione come un buffer, ma bisogna fare particolare attenzione per poter utilizzare un amplificatore operazionale rail-to-rail. Usare un normale amplificatore operazionale introdurrebbe semplicemente degli errori nei due estremi della scala, poiché l'amplificatore non sarà in grado di ripetere la tensione di ingresso che viene generata da questo semplice DAC.

Anche se semplice e conveniente, questo DAC può essere utilizzato come uno convenzionale. Applicare i codici successivi all’ingresso, con un tasso di ripetizione fissa, ci permetterebbe di generare praticamente qualsiasi tipo di segnale analogico, la sua frequenza è limitata soltanto dalla frequenza di campionamento in cui il microcontrollore può produrre i codici digitali. Naturalmente, come in qualsiasi attività di progettazione, il risultato non è perfetto, in quanto è solo un’alternativa tra i vantaggi e gli svantaggi:

a) Anche se a basso costo e facile da usare, questa struttura ha anche degli svantaggi:

più piccola è la risoluzione, più pin di microcontrollori sono necessari.

b) Inoltre le resistenze della rete devono essere accuratamente selezionate (è preferito

l’1% di tolleranza; usare resistenze con una tolleranza del 5% potrebbero introdurre errori inaccettabili). c)Maggiore è la risoluzione di tale DAC, più lento diventa a causa della larga costante di tempo RC per ogni link di RC aggiunto.

Leggi la versione inglese:Generating Analog Voltage with Digital Circuit (I) [1]

Analogica

circuito digitale

with Digital Circuit (I) [1] Analogica circuito digitale tensione analogica Source URL:

tensione analogica

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

Published on L'Elettronica Open Source (http://it.emcelettronica.com)

Home > Blog > blog di cristinap5 > Come utilizzare la PWM per generare una tensione analogica nei circuiti digitali - Parte II

Come utilizzare la PWM per generare una tensione analogica nei circuiti digitali - Parte II

By cristinap5 Created 07/05/2009 - 15:10

La soluzione PWM (modulazione di larghezza di impulso)

Molte volte i progettisti si trovano di fronte alla necessità di generare livelli di tensione analogica in circuiti esclusivamente digitali. Anche se oggi il mercato offre una gamma molto ampia di convertitori digitale-analogici dedicati, mettere un dispositivo del genere nel circuito schematico ha un impatto negativo sul costo globale del sistema.

Nella prima parte di questo articolo (Generare tensione analogica in un circuito digitale I [1]), ho illustrato in dettaglio ciò che è conosciuto come “metodo R2R” usato per ottenere tensione analogica. Il vantaggio di questo metodo è che è molto simile all’uso di un vero e proprio circuito integrato DAC off-the-shelf, i valori digitali di cui si ha bisogno per generare il codice in esecuzione sul microcontrollore sono gli stessi in entrambi i casi.

I principali svantaggi di questo metodo, tuttavia, consistono in un elevato numero di pin richiesti sul microcontrollore (direttamente proporzionale alla risoluzione che si necessita) e il numero relativamente elevato di componenti esterne necessarie (un paio di resistenze in più per ogni bit di risoluzione aggiuntivo).

Per affrontare questi problemi, è possibile un'altra soluzione: la soluzione PWM. Questa ci consente di ottenere tensione analogica utilizzando un solo pin del microcontrollore e, come minimo, due componenti esterne. Il diagramma a blocchi di questo concept è relativamente semplice:

a blocchi di questo concept è relativamente semplice: Figura 1- diagramma a blocchi della PWM La

Figura 1- diagramma a blocchi della PWM

La teoria alla base della soluzione è che se si ha un filtro passa-basso abbastanza buono e segnale a treni di impulsi, si potrà ottenere nell'uscita del filtro il valore medio di questo segnale. Il valore medio di un segnale a treni di impulsi è sempre proporzionale al duty cycle del treno di impulsi. Se il duty cycle è pari allo 0%, allora il segnale PWM è in realtà sempre 0, e il segnale all’uscita del filtro sarà anch’esso ovviamente 0. Se il duty cycle è al 100%, allora il segnale PWM è in realtà un segnale di tensione continua, pari a VCC, che sebbene filtrato, produce lo stesso valore continuo: VCC.

Nel caso in cui il duty cycle varia tra questi due limiti (0% e 100%) il filtro passa-basso (a

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

condizione che sia di dimensioni corrette) sostanzialmente taglierà le variazioni del segnale, lasciando che passi solo la componente continua del segnale (il suo valore medio). I diagrammi illustrano di seguito il caso in cui il duty cycle è rispettivamente del 50%, 90% e 10%. Il verde rappresenta il segnale PWM, mentre il rosso rappresenta il segnale continuo (analogico) ottenuto all’uscita del filtro.

continuo (analogico) ottenuto all’uscita del filtro. Figura 2 - Duty cycle 50% Figura 3 - Duty

Figura 2 - Duty cycle 50%

ottenuto all’uscita del filtro. Figura 2 - Duty cycle 50% Figura 3 - Duty cycle 90%

Figura 3 - Duty cycle 90%

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

nei circuiti http://it.emcelettronica.com/print/52274 Figura 4 - Duty cycle 10% Questa soluzione è ideale nel

Figura 4 - Duty cycle 10%

Questa soluzione è ideale nel caso in cui sia necessario generare una tensione continua che non cambia molto nel tempo (ma che è regolabile con il software) o che non ha bisogno di cambiare molto velocemente. Molti microcontrollori forniscono moduli di PWM dedicati che possono essere utilizzati per lo scopo qui descritto. Se i moduli PWM non sono disponibili, i moduli timer costituiscono la scelta migliore, in quanto permettono di creare il segnale PWM di cui si ha bisogno con un importo relativamente basso di risorse on/chip (un timer, un gestore di interrupt e poche allocazioni RAM). Ma anche se si utilizza il più economico, piccolo e povero dei microcontrollori, si può creare comunque un segnale PWM controllando direttamente un I/O con il codice, o in un loop, con un gestore o con gli interrupt. Uno degli aspetti più importanti di questa soluzione è il dimensionamento del filtro RC passa-basso, che è uno delle più semplici configurazioni di filtri passa-basso disponibili.

semplici configurazioni di filtri passa-basso disponibili. Figura 5 – Il filtro RC L’aspetto più importante è

Figura 5 – Il filtro RC

L’aspetto più importante è il rapporto tra la costante di tempo del filtro (t = R*C) e il periodo del segnale PWM. Di regola bisogna mettere nella corretta posizione R e C, in modo che la costante di tempo è di circa 100 volte superiore a quella del periodo del segnale. Se la frequenza PWM è a 10 kHz (il che significa un periodo di 100us), si dovrebbe scegliere una costante di tempo di circa 10ms - facilmente ottenibile con R=1k e C=10uF (ideale per raggiungere i valori). Nel caso in cui cali la costante di tempo nel rispetto del periodo della PWM (diciamo da 1 ms a 10 ms), il filtro non sarà in grado di smorzare le oscillazioni del segnale PWM e si potrebbe ottenere qualcosa come questo (anche in questo caso, il rosso è l'uscita del filtro):

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

nei circuiti http://it.emcelettronica.com/print/52274 Figura 6- Periodo PWM: 100us; costante di tempo del filtro:

Figura 6- Periodo PWM: 100us; costante di tempo del filtro: 1ms

Non è consigliabile aumentare troppo la costante di tempo. Questo metodo può essere utilizzato per ottenere una tensione analogica non-continua, nel caso in cui si modifichi nel tempo il duty cycle del segnale PWM (che è ciò che realmente s’intende per PWM), ma se la costante di tempo del filtro è troppo alta rispetto a periodo del segnale PWM, il filtro avrà una risposta lenta, fondamentalmente limitando la velocità di variazione del segnale di uscita. Nel diagramma seguente è possibile vedere l'effetto di una costante di tempo troppo elevata per una PWM con il duty cycle che varia dallo 0% al 90% al 50% e infine al 10%.

duty cycle che varia dallo 0% al 90% al 50% e infine al 10%. Figura 7

Figura 7 – PWM “reale”: duty cycle variabile 0%->90%->50%->10%

Come si può vedere, la risposta del filtro è lenta, il che rende la costante di tempo utilizzata inadatta per generare "veloci" segnali di cambiamento. Il metodo è tuttavia più che sufficiente per

la creazione di segnali analogici continui o che cambiano lentamente, come per esempio una

sinusoide del 50 Hz. Al fine di creare una sinusoide, il duty cycle del segnale PWM dovrebbe variare nel tempo da una formula sinusoidale (facile da raggiungere nei microcontrollori high-end, un pò più difficile con quelli più semplici, ma non impossibile – eventualemente si possono utilizzare le tabelle allocate nella memoria del programma).

E’ necessario un avviso per le fonti di errore che potrebbero influenzare il segnale in uscita (a parte

il dimensionamento del filtro). In molti casi l’alta tensione minima in uscita su un pin del microcontrollore è specificato, diciamo, in VCC-0.2V. Ciò significa che il pin non sarà mai in grado

di raggiungere il valore VCC nel suo stato elevato e questo avrà effetto su tutti i calcoli che si

fanno. Se si eseguono i calcoli per un caso nominale, si dovrebbe trarre la conclusione che si ha bisogno di un duty cycle al 50% per ottenere un segnale di uscita di 2.5V da un fornitura 5V. Ma questo SOLO nel caso in cui il pin effettivamente raggiunge i 5V in un stato elevato. Se si raggiungono i 4.8V, si otterrà soltanto l'uscita a 2,4 V per un duty cycle al 50%. Si può ovviare a

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

questo utilizzando alcuni ulteriori componenti esterne, come per esempio un transistor ad alta corrente veloce e alto:

per esempio un transistor ad alta corrente veloce e alto: Figura 8 – transistor esterno Bisogna

Figura 8 – transistor esterno

Bisogna considerare, però, che anche se si effettua il segnale in ingresso del filtro per variare tra i valori (0 e 5V), l'ulteriore resistenza nel collettore del transistor interesserà la risposta del filtro (nei calcoli, dovrebbe essere considerato in serie alla resistenza del filtro).

Una delle più difficili fonti di errore da correggere è la variazione del sistema di alimentazione di corrente. Ci si può fare affidamento se rimane su 5V, ma la verità è che la maggior parte dei regolatori di tensione hanno una tolleranza (quelli commerciali vanno a + /-4%). È possibile ottenerne sicuramente di più costosi, che possono puntare a +/-1% oppure si può anche ottenere un riferimento di tensione al quale è possibile collegare il resistore nel collettore del transistor. Se si vuole evitare che i costi aumentino, però, una soluzione da tenere in conto per questo errore potrebbe essere l'uso di un ADC on-chip (nel caso in cui il microprocessore ne abbia uno).

on-chip (nel caso in cui il microprocessore ne abbia uno). Figura 9 – Periodo PWM: 100us;

Figura 9 – Periodo PWM: 100us; costante di tempo del filtro 1ms

E’ possibile utilizzare questo ADC per controllare la tensione di uscita e apportare i necessari adeguamenti nel duty cycle. Questo funziona solo se il microprocessore ha un divario di banda di riferimento per il modulo ADC, altrimenti, l'ADC stesso influirà sulla variazione di energia, in modo da non essere utile per lo scopo.

Pertanto, al fine di riassumere le caratteristiche di questa soluzione, è opportuno un breve paragone con il metodo R2R descritto nella prima parte di questo articolo:

a) la PWM è la soluzione più conveniente, anche nella sua forma base, la risoluzione

indipendente dal numero di pin utilizzati (tuttavia, dipende dalla durata della frequenza del microprocessore e del periodo della PWM)

b) La soluzione della PWM è molto tollerante alla deviazione nelle componenti esterne

Come utilizzare la PWM per generare una tensione analogica nei circuiti

http://it.emcelettronica.com/print/52274

utilizzate (il filtro RC può avere una tolleranza del 5% e resistenza anche +/-20% di condensatore di tolleranza) c) La frequenza del segnale di uscita non dipende dalla risoluzione, ma dipende soprattutto (e in modo critico) dal periodo del segnale PWM. La soluzione della PWM dovrebbe essere usata principalmente per i segnali che variano poco oppure per i segnali analogici continui (tuttavia regolabili dal software).

Nel caso in cui è necessaria un'ulteriore lettura sui filtri passa-basso o RC, il web offre una miriade di risorse (tra i risultati in alto di Google) :

http://en.wikipedia.org/wiki/RC_circuit [2] http://en.wikipedia.org/wiki/Low-pass_filter [3] http://www.muzique.com/schem/filter.htm [4]

Analogica

circuito digitale

[4] Analogica circuito digitale pwm tensione analogica Source URL:

pwm

tensione analogica

Source URL: http://it.emcelettronica.com/come-utilizzare-la-pwm-generare-una-tensione-analogica-nei-circuiti-digitali- parte-ii

Links:

[1] http://it.emcelettronica.com/generare-una-tensione-analogica-con-un-circuito-digitale-i [2] http://en.wikipedia.org/wiki/RC_circuit [3] http://en.wikipedia.org/wiki/Low-pass_filter [4] http://www.muzique.com/schem/filter.htm