Arduino: misura la tensione esterna


10

Ho un "problema" durante il tentativo di misurare la tensione esterna da una cella a bottone. Ho semplificato il mio circuito, ma fondamentalmente ho un orologio in tempo reale DS1307 alimentato dall'uscita Arduino 5v e una cella a bottone collegata a vBat per mantenere in vita l'orologio mentre Arduino è spento. La mia idea era di misurare il livello della batteria con Arduino collegando il suo positivo a un ingresso analogico e leggere il livello di tensione. Quindi, ho pensato, poiché la tensione massima è 3v, posso usare il 3v3 come AREF e impostare il riferimento analogico su esterno e quindi leggere risultati accurati. Il risultato è piuttosto interessante e le letture di Arduino sono le stesse della lettura della tensione della batteria dal mio multimetro. Il problema si presenta quando disconnetto l'alimentazione da Arduino (una connessione USB). Con mia sorpresa, l'Arduino non si spegne (alcuni led rimangono accesi),

Perché sta succedendo? In che modo Arduino prende corrente dal pin analogico? Questo piccolo circuito è un'aberrazione elettronica?

inserisci qui la descrizione dell'immagine

Risposte:


10

La maggior parte, se non tutti, i pin di ingresso sui controller AVR sono protetti internamente da diodi di serraggio. Questi diodi impediscono che una tensione di ingresso possa essere superiore alla tensione di alimentazione.

Perché ci sono questi diodi interni:

È importante rendersi conto che quando un pin di ingresso fa sorgere sopra della tensione di alimentazione e questi diodi non ci fosse, il chip può agire come uno SCR, latch, cortocircuitare la batteria, e il chip si sarebbe probabilmente essere danneggiato da sovracorrente / surriscaldamento .

Perché Arduino funziona a batteria Dai un'occhiata allo schema elettrico qui sotto. Quando Vcc è staccato dalla normale fonte di alimentazione, c'è un percorso dalla batteria, tramite D1, a Vcc. La tensione della batteria è abbastanza alta da consentire al controller di funzionare.

schematico

simula questo circuito - Schema creato usando CircuitLab

Come risolverlo

La soluzione è semplice, aggiungi un resistore di alto valore in serie tra la batteria e l'ingresso del controller. La maggior parte degli AVR ha una corrente di dispersione di ingresso massima specificata (I IL ) di 1μA, quindi si desidera assicurarsi che la caduta di tensione sia accettabile con quella corrente, ad esempio 100kΩ.

Ma attenzione!

Devi capire che l'ingresso può assorbire questa corrente dalla tua cella a bottone e accorciarne la durata.


Proverei 10Mohm e vedo cosa legge l'ADC e lo uso come riferimento per una batteria carica. È una misurazione complicata se si desidera evitare drenaggi indesiderati.
Andy aka

Potrebbe funzionare, sebbene sia specificato come corrente di ingresso e non come impedenza di ingresso. La risposta può essere non lineare, ma non necessariamente inutile. Potrebbe aver bisogno di una sorta di calibrazione e forse può essere usato il riferimento di gap di banda 1V1 (invece del riferimento esterno 3V3) quando la tensione misurata scende al di sotto di 1,1 V.
jippie,

Bella risposta!! Stavo pensando se un divisore di resistenza con 100kΩ e 50kΩ funzionerà. In questo caso, suppongo che una tensione massima della batteria di 3,2 volt. Ciò fornisce una tensione di caduta di 1,067 v, che può essere compatibile con il riferimento analogico interno di 1 v1. Questo può funzionare? o scaricherà la batteria troppo presto?
alvarolb,

2
T=mAh3V×1000100KΩ+50KΩ=mAh × (100kΩ + 50kΩ)3V×1000

1
Questi diodi sono presenti sulla maggior parte dei microcontrollori in generale, non solo sull'AVR. Non sono inauditi anche su altri tipi di circuiti integrati.
Adam Lawrence,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.