Selezionare più opzioni.
Su molte tipi di apparecchiature può capitare di dover
disporre di più opzioni, selezionabili con jumper o commutatori, ma di non
avere pin a sufficienza per questo.
Una via molto semplice per avere più selezioni con un solo
pin è quella di utilizzare un ingresso analogico. L' idea seguente consente
di realizzare un partitore in modo quanto più economico possibile e non
richiede alcuna procedura di taratura software dei valori acquisiti dalla
conversione. Inoltre, la discriminazione dei livelli di tensione
corrispondenti al jumper inserito è la più semplice possibile.
|
Si tratta di collegare all' ingresso analogico un partitore con i
richiesti livelli di tensione.
Ci si potrebbe porre la questione di come discriminare con
sicurezza i vari livelli, anche in presenza di un certo rumore, e, poi
come realizzare la tavola di salti che inviano alle varie
sezioni dipendenti dalla posizione dell' ingresso sul partitore.
All' atto pratico, se consideriamo una scelta di 4 livelli di
tensione, possiamo sfruttare direttamente la gestione del risultato della
conversione AD.
In particolare, per la conversione a 10 bit, è possibile un
allineamento giustificato a destra, che porta in ADRESH i soli due
bit più significativi. |
Tra questi bit e la tensione in ingresso ci sarà la seguente
equivalenza:
ADRESH |
Vin |
00 |
0 ≤ Vin ≤ 1/4 Vref |
01 |
1/4 Vref ≤ Vin ≤ 1/2 Vref |
10 |
1/2 Vref ≤ Vin ≤ 3/4 Vref |
11 |
3/4 Vref ≤ Vin ≤ Vref |
Se utilizziamo Vdd come tensione di alimentazione del
partitore e la stessa Vdd come Vref, questa è la scelta più
economica ed anche la più comune per misure di tensioni analogiche dove non
è richiesta una elevata precisione. E va benissimo per la nostra
applicazione.
Se fissiamo le tensioni del partitore in modo tale da essere
al centro delle 4 gamme, possiamo dire con ragionevole sicurezza che il
risultato della conversione AD, anche se affetto da qualche imprecisione
(tolleranza delle resistenze, tempo di sampling breve, ecc) sarà determinato
essenzialmente solo dai due bit più significativi della conversione.
|
Possiamo semplificare ulteriormente le cose utilizzando come
tensione massima direttamente la Vdd
e come tensione minima la Vss (massa); qui possiamo essere certi
che la conversione renderà rispettivamente 11 e 00 in
ADRESH.
La scelta per gli altri due gradini sarà quella di selezionare sulle prese
intermedie, corrispondenti ai valori di conversione 01 e 10, un punto
centrale della relativa gamma.
Questo assicura che, anche in presenza
di scarsa precisione dei resistori del partitore, il valore della
conversione cadrà nell' intervallo voluto.
Scegliamo quindi un punto a metà delle altre due bande.
Per il valore 10, che spazia tra 1/2 Vref e
3/4 Vref il punto centrale sarà a 5/8, mentre per la
conversione 01 sarà a 3/8. |
|
Quindi avremo:
ADRESH |
Vin |
00 |
0 |
01 |
3/8 Vref |
10 |
5/8 Vref |
11 |
Vref |
La massima resistenza della sorgente della tensione
da misurare, secondo Microchip, non dovrebbe superare i 2.5kΩ.
Essa è determinata dalla resistenza in serie all' ingresso, ovvero da
R1 nella posizione 5/8 e da R1 + R2
nella posizione 3/8. |
Questo
porterebbe a determinare un valore abbastanza basso per le resistenze del
partitore, in quanto il caso peggiore richiederebbe R1+ R2 ≤ 2.5kΩ.
Possiamo, però, iniziare a calcolare
i valori del partitore seguendo questa prima possibilità:
Le resistenze, in percentuale rispetto alla somma della serie,
sono così disposte:
se ne deduce che R1 = 3/8 Rtot
e
quindi R2 = 2/8 Rtot
Se imponiamo R1+ R2 = 2.5kΩ, abbiamo:
2500 Ω = R1+ R2 = (3/8 + 2/8) Rtot
= 5/8 Rtot
da cui Rtot = 4000 Ω.
Quindi:
-
R1 = 1500 Ω
-
R2 = 1000 Ω
-
R3 = 1500 Ω.
Questi valori sono comuni e disponibili nella serie
E96 dei resistori di precisione all' 1%, ma anche nell' economica
serie E24 al 5% (il che mantiene ancora le tensioni all' interno delle gamme
volute).
Va da se che quanto più la resistenza complessiva della serie
è bassa, tanto maggiore sarà la corrente assorbita. Questo potrebbe essere
indesiderabile per applicazioni a basso consumo energetico o alimentate a
batteria, dove è opportuno ridurre al minimo le correnti per avere la massima
durata della batteria. Basse correnti si otterranno aumentando il valore delle
resistenze.
Un aumento della resistenza della sorgente non porta alcun problema sulla
precisione della lettura, ma occorre aumentare il tempo di sampling
prima di avviare la conversione.
Questo dovrebbe essere ampiamente possibile, dato che, solitamente, le selezioni
effettuate con i jumper sono recepite dal programma dopo il POR o comunque in
fasi non critiche dal punto di vista del tempo.
Si potrebbe allora aumentare in proporzione le
resistenze, ad esempio x4, il che, nei valori della E96 è risolvibile con:
-
R1 = 6040 Ω
-
R2 = 4020 Ω
-
R3 = 6040 Ω
con la serie che carica l' alimentazione per 20kΩ
circa, riducendo la corrente assorbita dalla serie a 250 uA con una
Vdd di 5V. Si potranno comunque scegliere altri valori, a seconda della
disponibilità; ad esempio, anche utilizzando comuni elementi della serie E24:
-
R1 = 6200 Ω
-
R2 = 4300 Ω
-
R3 = 6200 Ω
si resta nelle gamme volute.
Il firmware
|
Per quanto riguarda il programma, basterà lanciare la lettura del
convertitore ADC e quindi leggere i due MSb. La cosa è semplifica
dall' allineamento a destra (right justified).
Però la procedura è altrettanto valida anche per ADC a 8 bit,
dove si scarteranno i primi 6 bit meno significativi o in letture a 12
bit, dove si utilizzeranno solamente i 2 bit più significativi.
|
Con uno dei 4 valori della tabella iniziale, si potrà puntare
la procedura scelta con un case in C o una selezione semplice o via lookup
table in Assembly.
Osserviamo che non è stata indicata alcuna tensione particolare
per la Vdd. Infatti questo circuito funziona in egual modo per
qualsiasi tensione di alimentazione del microcontroller, in quanto,utilizzando la stessa Vdd come Vref della
conversione, le tensioni ottenute dal partitore saranno sempre nella stessa
proporzione, dato che sono frazioni della Vdd in precisi rapporti
percentuali. Anche se essa varia, come capita in una economica alimentazione a batteria non
stabilizzata, il rapporti del partitore non variano e neppure quello con la Vref
: il risultato della conversione sarà sempre adeguato, dato che non ne
consideriamo il valore assoluto, ma solo la gamma di appartenenza.
Dal punto di vista realizzativo, potrà essere sempre utile
inserire un condensatore in parallelo all' entrata analogica (10-100 nF) a
scopo di filtro disturbi impulsivi, ma non è obbligatorio.
|
Se si suppone la possibilità di impulsi di tensione indesiderati
sulla Vdd, come è possibile nel caso di apparecchi soggetti al
pericolo di cariche elettrostatiche, si potrà aggiungere un semplice
circuito di protezione R4/C1, la cui resistenza va aggiunta a quella della
sorgente nella valutazione del tempo di acquisizione.
Potrà essere R4 = 1k o più e C1=10-100nF.
|
Se necessaria una maggior ampiezza di scelta, si potranno
utilizzare partitori a più resistenze. Ad esempio, con 8 selezioni, basterà
utilizzare i primi 3 bit significativi della conversione e così via.
Ovviamente, se si desidera un numero elevato di gradini, le
resistenze dovranno essere adeguatamente precise per evitare il rischio di letture
errate a causa delle tolleranze.
|