Tips & Tricks - PIC

 


1 ingresso - 4 selezioni


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
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:

  • R3 = 3/8 Rtot  dove Rtot = R1 + R2 + R3

  • R2 + R3 = 5/8 Rtot

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.



 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 01/09/12 .