Far durare a lungo una batteria in un circuito di microcontrollore


26

Spero di alimentare un ATtiny85V per un bel po 'di tempo con una piccola batteria, probabilmente una cella a bottone.

Ho esaminato il lato software e il mio codice è controllato dal timer del watchdog, i convertitori analogici e digitali non utilizzati sono spenti, il chip funziona a 1MHz ecc. Naturalmente, essendo occupato e nuovo in questo, non sono sicuro esattamente quanta corrente sta attingendo, ma spero di averlo minimizzato.

Ogni pochi secondi si sveglia, esegue i controlli del livello di tensione sugli ADC, lo registra su RAM e torna in modalità di sospensione. Se rileva che una linea seriale è connessa, emette i dati.

Tuttavia, ora sto guardando il circuito nel suo insieme e mi chiedo se ci sono cose che dovrei fare per rendere il circuito nel suo complesso più amico della batteria?

Quali sono le cose da fare e da non fare quando si tratta di progettare un circuito (semplice) di lunga durata in cui un componente (il microcontrollore) ha un assorbimento di corrente ripetitivo ma variabile?

Per esempio:

  • Un indicatore LED è un grosso problema? Sta esaurendo la batteria quando è luminosa? Dovrei mettere un resistore gigante su di esso per renderlo debole, o questo fa semplicemente usare al resistore la batteria?
  • Dovrei usare i condensatori di bypass / disaccoppiamento per uniformare l'assorbimento di corrente dalla batteria o il condensatore sprecherà solo la carica della batteria?
  • Il microcontrollore necessita solo di 1,8 V, ma non ho batterie da 1,8 V. Dovrei usare due batterie 1.x e inviare troppa tensione? Posso prolungare la durata della batteria "non usando tanti volt"? Come lo faccio?
  • È necessaria ulteriore potenza per verificare se un pin è ALTO o BASSO? Come se fosse un no-op o qualche aritmetica, c'è molto più consumo di energia nel controllare uno dei pin I / O GP per il suo stato?

So vagamente come calcolare (e più vagamente come misurare) corrente, tensione, potenza, ma non sono davvero sicuro di quale di queste cose equivalga la durata della batteria. L'importante misura della durata della batteria in Coulombs?

Ho questa vaga idea che le batterie siano piene di cose come:

  • carica, come in amp-ora
  • energia, come in wattora
  • potenza, come in watt

ma non sono molto chiaro su cosa "mangia" il mio circuito quando funziona. Ho letto una buona quantità di EE101 e libri di testo di fisica, ma non ho alcuna esperienza di laboratorio. In altre parole, ho letto un sacco di batterie, ma non sono davvero sicuro di cosa significhi la maggior parte in pratica.

I resistori consumano la batteria? I condensatori? I diodi? Sospetto che lo facciano tutti, ma quali dei numeri sono quelli che contano? Impedenza? Dissipazione di potenza? Attuale? Voltaggio?

C'è un modo per abbassare la tensione senza sprecare la batteria? C'è un modo per ridurre la tensione aumentando la durata della batteria?


6
Questa è una domanda molto ampia. Hai quasi bisogno di porre più domande. Potrei fare una domanda completa per la domanda sulla potenza del LED.
Kortuk,

1
Bene, lo spacco dopo l'orario d'ufficio. Forse questo è solo cose da fare e non fare. Penso che tali risposte sarebbero utili alle persone che stanno solo cercando di ottenere di più da una batteria, ma immagino che dare qualsiasi tipo di risposta autorevole o educativa richieda una domanda più ristretta.
Jack Schmidt,

Sì, ho capito che avrei dovuto sezionare la mia risposta in base alla tua domanda e mi ci sarebbe voluta un'ora.
Kortuk,

A proposito mia moglie ha trovato makezine.com/makeitlast che alla fine potrebbe essere utile, dato che è fondamentalmente un concorso per realizzare questo tipo di cose. Penso che inizi oggi, quindi non hanno alcun suggerimento pubblicato su come farlo. Ad ogni modo, il mio progetto è indipendente e dubito che avrei avuto il tempo di partecipare comunque :) Sentiti libero di aspettare fino alla fine del concorso se non ti piacciono queste cose.
Jack Schmidt,

Risposte:


20

Solo un elenco casuale, se pubblichi il tuo schema sarebbe probabilmente più semplice:

Le celle a bottone al litio da 1,8 V sono molto facili da trovare, ma più probabilmente la tua interfaccia seriale ha bisogno di 3.3 v? A meno che la parte ricevente non abbia a che fare con 1,8 V.

La corrente di dispersione aumenta generalmente all'aumentare della tensione, quindi di solito è meglio abbassarla. Considera anche il punto di esaurimento per il sistema rispetto alle caratteristiche della batteria. Le caratteristiche di "morte" della batteria saranno determinate dalla composizione chimica della batteria utilizzata. Ad esempio, se il tuo uC si oscura a 1,7 V, potresti effettivamente voler utilizzare una batteria a voltaggio più elevato poiché con alcune batterie la tensione di uscita diminuirà lentamente quando la batteria si esaurisce. Otterresti più vita da una batteria da 3,3 V poiché quando inizia a esaurirsi, la sua uscita diminuirà lentamente e potrai operare fino a 1,8 V. Se usi una batteria da 1,8 V, ti spegnerai abbastanza rapidamente quando la batteria si esaurisce. Tutto questo presuppone che la tua interfaccia seriale o altri componenti possano gestire un ampio intervallo di tensione (so che l'AVR può).

I LED consumano molta energia, a meno che non si utilizzi un LED a bassissima potenza e non si stia controllando il suo assorbimento di corrente, probabilmente sta assorbendo molta più corrente dell'AVR. Se è solo lì per il debug, non popolarlo per la produzione o farlo lampeggiare una volta ogni tanto o qualcosa per minimizzarlo in tempo, e sicuramente controllare il suo disegno attuale.

Se è possibile, selezionare lo stato di polarità / riposo dell'interfaccia seriale per assorbire il minor consumo possibile, il suo stato di riposo non dovrebbe assorbire energia. Se sono richiesti pull up, utilizzare la resistenza più grande possibile per mantenere l'integrità del segnale ma ridurre al minimo l'utilizzo corrente. Se il potere è una grande preoccupazione, usa uno schema che favorisca i frammenti che non assorbono potere. Ad esempio, se si dispone di pull up, l'utilizzo di un protocollo che determina la presenza di molti 1 nel segnale lascerà l'interfaccia seriale in uno stato che non consuma la stessa potenza per la maggior parte del tempo. Tali ottimizzazioni sono utili solo se si fa un uso intensivo del bus seriale. Se viene usato molto leggermente, assicurati che il suo stato di riposo non assorba potenza.

In generale, puoi assumere tutte le istruzioni (lettura GPIO, ecc.) Che richiedono la stessa quantità di energia. Non è proprio vero, ma la differenza di potenza è minima.

Il consumo di energia dipende molto più dal numero / tipo di periferiche che hai acceso e dalla quantità di tempo che il micro trascorre attivo rispetto al sonno. Quindi l'ADC consuma più energia, le scritture EEPROM usano una discreta quantità di energia. In particolare qualcosa come le scritture EEPROM sono di solito fatte in 'blocchi' abbastanza grandi, quindi dovresti accumulare quante più informazioni possibile prima di fare la scrittura nella EEPROM (se la usi anche tu ovviamente). Per l'ADC che il micro supporta la lettura dell'ADC durante 2 dei suoi stati di sospensione, poiché la conversione dell'ADC impiega un tempo relativamente lungo, questo è un buon momento per dormire.

Probabilmente dovresti semplicemente leggere le sezioni sulla gestione dell'alimentazione, gli stati di sospensione e la riduzione al minimo dell'energia utilizzando nella scheda tecnica del microcontrollore: linky page 35 on. Mantenere l'AVR nello stato di sonno più profondo possibile il più a lungo possibile. L'unica eccezione a questo è che devi considerare i tempi di avvio e spegnimento. Non vale la pena dormire per 10 cicli se il risveglio richiede 25, ecc.

I resistori consumano la batteria? I condensatori? I diodi?

Lo fanno tutti in una certa misura. I resistori si dissipano di più nella maggior parte delle applicazioni:

P = V * I

P = V ^ 2 / R o P = I ^ 2 * R (dove V è la caduta di tensione sul resistore)

I diodi hanno una caduta di tensione (relativamente) fissa, quindi la dissipazione di potenza è quasi esclusivamente legata alla corrente che passa attraverso il diodo. Ad esempio un diodo con una caduta di tensione diretta di 0,7 V, P = 0,7 * I se la corrente si sposta in avanti attraverso il diodo. Questa è ovviamente una semplificazione e dovresti controllare la modalità operativa in base alle caratteristiche IV del diodo.

In teoria i condensatori non dovrebbero dissipare alcuna potenza, ma in realtà hanno una resistenza in serie finita e una corrente di dispersione diversa da zero, il che significa che dissipano un po 'di potenza, in genere non è qualcosa di cui dovresti preoccuparti con tensioni così basse. Detto questo, la scelta di condensatori con corrente di dispersione minima ed ESR è una vittoria di potenza.

Per quanto riguarda il loro utilizzo per appianare il consumo della batteria, questo non aiuta davvero per il consumo di energia, è più per il filtraggio. Anche la chimica della batteria entra in gioco qui, alcuni chimici saranno più felici con un pareggio costante, alcuni si occupano meglio di assorbimenti di corrente appuntiti.


1
la parte importante di P = V ^ 2 / R è che quando R sale con una tensione fissa, il consumo di energia diminuisce.
Kortuk,

Bene, quindi per usare più batteria, probabilmente avrò bisogno di una tensione più alta (possibilmente usando il regolatore suggerito da Andrew). Farò alcuni esperimenti per vedere quanto bassa sarà la tensione della linea seriale. Mi assicurerò anche di impostare i pin non utilizzati su output. Il seriale viene usato solo occasionalmente, quindi controllerò lo stato di riposo. Ho sicuramente provato a spegnere tutte le periferiche che posso.
Jack Schmidt,

Per i condensatori: quindi probabilmente non ho bisogno di alcun condensatore per aiutare la batteria. Controlla la composizione chimica della batteria, ma supponendo che possa gestire il modello di assorbimento di corrente che ho, quindi non è necessario provare a regolarlo, giusto?
Jack Schmidt,

Grazie per la cosa P. Penso di capire ora. P = I * V dove V è la caduta di tensione, quindi posso misurare il consumo della batteria in P o I (o P-ore o I-ore) purché la tensione non possa essere modificata. Non sono ancora sicuro di poter cambiare V "gratuitamente".
Jack Schmidt,

1
Il regolatore buck-boost di cui parla Andrew è davvero la soluzione migliore. Non ne ho parlato perché il layout di tali circuiti è generalmente critico. Sono difficili da tagliare senza prestazioni funky o irradiando tonnellate di EMI. Leggere attentamente la scheda tecnica, le raccomandazioni per il layout e l'identificazione dei percorsi critici sono generalmente incluse. Ci saranno anche vincoli più stringenti su alcune delle parti utilizzate. Condensatori a bassa ESR e simili.
Segna l'

12

Mark ha dato una risposta eccellente e ha colpito molti dei punti che stavo per fare. Ci sono anche alcuni a cui vorrei contribuire.

Utilizzare un oscilloscopio con una resistenza a basso ohm in serie con il ritorno alla batteria comune per effettuare misurazioni di corrente. L'assorbimento di corrente con un microcontrollore non è semplice e, come regola generale, i contatori sono LONTANI troppo lenti per darti una buona idea di cosa sta succedendo. Cosa significa "basso-ohm" dipende dall'assorbimento di corrente previsto. un resistore da 1 ohm svilupperà 100mV per ogni 100mA disegnato, e probabilmente è troppo per te. Proverei un resistore da 10 ohm 1% o 0,5%; vedrai 100mV per ogni 10mA di assorbimento di corrente. 18 ohm ti darebbero 100mV per ogni 5,5mA. Se stai VERAMENTE andando a basso consumo potresti essere in grado di cavartela con 1k; I = V / R: vedrai 100mV per ogni 100uA di corrente assorbita. Attenzione però; se assorbi abbastanza corrente finirai per cadere troppo attraverso lo shunt e le tue misurazioni saranno disattivate, per non parlare del circuito probabilmente non funzionerà. :-)

Con l'ambito collegato, provare alcune frequenze operative diverse per il microcontrollore. Potresti essere sorpreso di apprendere che consumi meno energia con una velocità di clock superiore perché trascorri molto meno tempo "sveglio".

Elimina i pull-up / down il più possibile. Non dovresti avere alcun output, poiché nella maggior parte dei casi puoi portarli in uno stato inattivo. Gli input dovrebbero essere legati a ciò che ha senso, usando un valore il più alto possibile, come ha detto Mark.

Assicurarsi che il microcontrollore sia spento il più possibile. Trasforma i pin non utilizzati in uscite e portali in uno stato (alto o basso, non importa). Non lasciare i LED accesi. Se riesci a spegnere altri componenti o a fermare i loro orologi, fallo. Le memorie Flash SPI, ad esempio, hanno spesso un comando di "spegnimento" che porterà il consumo di energia già basso e lo porterà ancora più in basso.

Altri hanno toccato l'aspetto della tensione e anche io vorrei commentarlo. Probabilmente finirai con un MOLTO migliore utilizzo della batteria se usi un regolatore buck / boost ad alta efficienza tra la batteria e il tuo circuito. Il regolatore sarà in modalità buck (riduzione della tensione) quando il livello della batteria è superiore a 1,8 V necessario e passerà alla modalità boost (aumento della tensione) quando il livello della batteria scende al di sotto di 1,8 V. Ciò ti consentirà di far funzionare il circuito fino a quando la batteria non sarà completamente scarica, il che vale la pena della perdita di efficienza del pochi percento che otterrai quando li usi. Assicurati di selezionare il regolatore in base alla sua efficienza nell'intero intervallo che desideri utilizzare e di dimensionare il regolatore in modo appropriato; un regolatore in grado di fornire 1A con un'efficienza del 98% è probabilmente con un'efficienza del 60% che eroga 50mA. Leggi i fogli dati con attenzione.


Freddo. Non ho mai usato un ambito prima, ma sospetto che il nostro laboratorio locale sarà felice di mostrarmelo (in questo momento sto usando il multimetro in serie per misurare la corrente; non molto buono). - Inoltre, consiglieresti il ​​regolatore anche se sto usando solo 1-10 mA, supponendo di poter trovare una parte appropriata? Il 90% di efficienza è abbastanza buono (ricordo di averne trovato uno economico in quell'intervallo) o sta usando più corrente di quella che mi fa risparmiare?
Jack Schmidt,

1
ottimo punto a giocare con la frequenza, mi ricorda come la radio wifi nel mio cellulare consuma più energia rispetto al modem cellulare, ma il wifi è molto più veloce che può dormire di più e finisce per essere complessivamente migliore grazie alla sua potenza.
Segna l'

2
Un altro trucco per stimare l'utilizzo corrente del microcontrollore medio nel tempo in scenari in cui l'assorbimento di corrente sarà "scoppiato" è caricare un condensatore davvero grande e farlo alimentare un regolatore di corrente a basso quiescente per simulare la tensione della batteria. Un condensatore da 100.000 uF scenderà 0,01 volt per milliampere di secondo. Se scende di 0,3 volt in cinque minuti (300 secondi) l'assorbimento di corrente medio è di 100uA.
supercat

Il punto di efficienza dei regolatori è molto importante. Quindi devi stimare la tua gamma di consumi attuali per selezionare un regolatore appropriato all'interno di quella gamma
gustavovelascoh

4

Con il tuo circuito, consiglierei di utilizzare un multimetro sulla gamma di microampere per misurare il consumo di corrente. Quindi, date le caratteristiche della batteria, è possibile calcolare la longevità. Non è necessariamente amp-ora / corrente, in quanto la batteria avrà caratteristiche di scarica diverse per carichi diversi. Ma può essere utile come approssimazione.

A 1 MHz penso che assorbirai un po 'di potenza - almeno 100 µA, se i micro PIC sono qualcosa con cui confrontarli. Ma questo sarà sopraffatto dal 5mA al 20mA che passa attraverso il tuo LED, quindi dovresti prima sbarazzartene.


Fantastico, LED cancellato. Difficoltà a ottenere una misurazione accurata. Sembra 0,9 mA in questo momento, quindi forse il mio software non si sta spegnendo tanto quanto pensavo. Con Arduino (e il LED del battito cardiaco) è più simile a 8-9 mA, quindi almeno il piccolo sta aiutando.
Jack Schmidt,

1

In questi giorni ci sono kit di sviluppo e breakout board prontamente disponibili che sono estremamente utili per effettuare misurazioni di corrente precise, in alcuni casi fino alla gamma nA. Se non hai già verificato definitivamente µCurrent Gold . Questo è utile per le misurazioni statiche, ma meno per la registrazione delle misurazioni nel tempo.

Un modo in cui è ancora possibile utilizzare la corrente µ è quello di collegare un amplificatore di differenza all'uscita. Quindi puoi inviarlo a un oscilloscopio o un analizzatore logico con ingressi analogici. Ho scritto un tutorial completo su di esso e penso che possa aiutare le persone con un budget che non hanno gli strumenti giusti.

È incredibile ciò che puoi imparare non solo da ciò che la tensione sta facendo all'interno del tuo circuito, ma anche da come reagisce a ogni piccolo picco di corrente. Mi ha salvato il culo un paio di volte quando ho scelto le tecnologie della batteria e i test di validazione. 😎


0

Tutte le risposte hanno già punti importanti. Ne aggiungerò uno dalla mia esperienza.

Quando stavo sviluppando dispositivi con un consumo inferiore a 10uA, anche inferiore a 1uA in modalità di sospensione profonda, la pulizia della scheda faceva la differenza. Una volta avevo 7 schede su 10 con il consumo attuale previsto. Erano tutti uguali e tutto funzionava bene. Dopo averli puliti in un pulitore ad ultrasuoni, tutte le schede sono andate al risultato atteso.

E infine, stimare il consumo previsto / mirato controllando i fogli dati di tutti i tuoi elementi. Se li gestisci bene, raggiungerai la tua stima. Ciò include tutti i pin non utilizzati nel microcontrollore. Anche se si spegne l'ADC, assicurarsi che la configurazione dei pin mentre è spenta sia la migliore a seconda della connessione esterna.

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.