You are on page 1of 10

Understanding EC1 analog outputs

In this EasyStep you get a quick overview of the standard analog outputs on the EC1
Expert summary
The pins on the EC1 designated as analog outputs generate a Pulse Width Modulated
(PWM) stream of digital pulses (also called a pulse train). So you don't get an analog
voltage directly, but with some very simple external circuitry you can convert the pulses
into an analog voltage. This actually adds to the versatility of the EC1 without adding one
cent to the price.
The sketch below shows what a PWM pulse stream looks like (time on the horizontal axis,
voltage on the vertical axis. The total period (the time from the start of one pulse until the
start of the next pulse is denoted by tt. The time the pulse is high (in our case at 3.3V) is
denoted by th. The duty cycle is the percentage or fraction of the total period that the
voltage is high. That can be calculated as
P = t h / tt

Using the raw PWM signal


The raw pulse train can be used for things like driving an LED with variable brightness.
While the LED may be flashing at a very high frequency, the eye will not discern the
individual flashes. All the eye will see is the average light output, which is proportional to
the duty cycle of the pulse stream. This EasyStep shows you how to do it with an RGB 3colour LED.
In another EasyStep I will show you also how to control and RC (hobby) servo.

A very simple conversion to an analogue voltage


The simplest way to convert the PWM pulse train to a DC voltage is with an resistorcapacitor (RC) lowpass filter. What the filter does is to average the voltage coming out of
the EC1. The sketch below is a schematic of an RC filter connected to an EC1.

The voltage coming out of the filter will not be a perfectly steady voltage. It will fluctuate
slightly at the frequency of the PWM signal. These fluctuations are called ripple. Ripple
can never be eliminated, but it can be reduced to a point where it doesn't matter.
A RC lowpass filter is characterised by its time constant. To calculate the time constant,
simply multiply the resistor value in ohms by the capacitor value in farads. Resistors
typically come in values of thousands of ohms (kilo-ohms or k or just K). Capacitors
typically come in values of millionths of a farad (a farad is a LOT!) (micro-farad or F).
The larger the time constant of the filter, more effective it will be at reducing the PWM
ripple. The downside is that a large time constant will also slow down the filter's ability to
change the output voltage quickly when your program changes the PWM duty cycle (by the
way, we often just say "the PWM is 25%" when we actually mean the duty cycle is 25%).
Generally a time constant of 10 to 50 times the period of the PWM signal (tt above) is
suitable.
Example: The default PWM frequency in the EC1 is 40kHz. This gives a period of 1/40kHz
= 25S. In the circuit above, if the resistor R is 10k and the capacitor is 0.1F, the time
constant would be
Period receiver=2.36ms para ser 10 a 50 veces=23.6 a 118 ms
Con r=1M y cap=0.1uF, t=0.1s=100 ms
= 10000 * 0.1E-6 = 0.001S = 1mS
Which is 40x the PWM period.
The downside of this simple technique is that the resistor gives the circuit a high output
resistance. That means that anything resistive connected to the output of the filter will "drag
down" the voltage. For example, if the filter resistor is 10k, a load of 100; will pull it
down by about 10%.

Amplifying to 10V DC
The sketch below shows teh schematic of a circuit that will filter the PWM pulse train and
amplify it up to a 0 to 10V analog output with a low output resistance. This circuit can drive
load resistances as low as 2k (5mA load current). It is the circuit used in out industrial
grade off the shelf controllers.

The amplifier chip is an LM358. This contains two identical operational amplifiers, of
which this circuit only uses one. I selected 22K for the filter resistor because that gives the
best DC accuracy. The resultant filter time constant is 2.2mS. The output reistance of this
circuit will be very low.

Resolution
The resolution of the analog/PWM outputs is 10 bits, or 0.1%.

Accuracy
While the resolution is quite high, the accuracy is not. See Analog Accuracy is expensive,
Resolution is cheap. The main governing factor of accuracy of any digital to analog
converter is the accuracy of the reference voltage. In the EC1 the reference voltage is the
3.3V supply, which comes from a MCP1801 3.3V regulator with a worst case accuracy of
2.5% (it is typically better than that, but professionals use worst case numbers!). If you have
a good digital multimeter, you can get a "fix" on the actual reference voltage by measuring
between a 0V pin and a 3.3V pin.
If you need more accuracy you will have to somehow calibrate your system.

Some interesting ways to blow up your EC1


If you want to blow up your EC1, and void the warranty, here are some things you can do
to the analog outputs:

Connect an analog output to any voltage greater than 3.3V;

Connect an analog output to any voltage more negative than 0V;

Come utilizzare la PWM per generare una


tensione analogica nei circuiti digitali
Parte II
cristinap5 7 maggio 2009 Elettronica 4 commenti

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),
ho illustrato in dettaglio ci che conosciuto come metodo R2R usato per ottenere
tensione analogica. Il vantaggio di questo metodo che molto simile alluso 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:

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 alluscita del filtro sar anchesso 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
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 alluscita del filtro.

Figura 2 - Duty cycle 50%

Figura 3 - Duty cycle 90%

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.

Figura 5 Il filtro RC
Laspetto 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):

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 sintende 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%.

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 lalta 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 questo utilizzando alcuni ulteriori componenti esterne,
come per esempio un transistor ad alta corrente veloce e alto:

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).

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 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
http://en.wikipedia.org/wiki/Low-pass_filter
http://www.muzique.com/schem/filter.htm

You might also like