Eine Batterie in einer Mikrocontroller-Schaltung lange halten lassen

Ich hoffe, einen ATtiny85V für eine schöne lange Zeit mit einer kleinen Batterie, wahrscheinlich einer Knopfzelle, zu betreiben.

Ich habe mir die Softwareseite angesehen, und mein Code ist Watchdog-Timer-gesteuert, hat unbenutzte Analog- und Digitalwandler ausgeschaltet, der Chip läuft mit 1 MHz usw. Da ich damit beschäftigt und neu bin, bin ich mir natürlich nicht genau sicher wie viel Strom es zieht, aber ich hoffe, ich habe es im Grunde minimiert.

Alle paar Sekunden wacht es auf, führt seine Spannungspegelprüfungen an den ADCs durch, zeichnet es im RAM auf und geht wieder in den Ruhezustand. Wenn es erkennt, dass eine serielle Leitung angeschlossen ist, spuckt es die Daten aus.

Jetzt betrachte ich jedoch die Schaltung als Ganzes und frage mich, ob es Dinge gibt, die ich tun sollte, um die Schaltung als Ganzes batteriefreundlicher zu machen?

Was sind die grundlegenden Gebote und Verbote, wenn es darum geht, eine langlebige (einfache) Schaltung zu entwerfen, bei der eine Komponente (der Mikrocontroller) eine sich wiederholende, aber variable Stromaufnahme hat?

Zum Beispiel:

  • Ist eine Anzeige-LED eine große Sache? Verbraucht es die Batterie, wenn es hell ist? Soll ich einen riesigen Widerstand darauf setzen, um es zu dimmen, oder führt das nur dazu, dass der Widerstand die Batterie verwendet?
  • Sollte ich Bypass-/Entkopplungskondensatoren verwenden, um die Stromaufnahme aus der Batterie auszugleichen, oder verschwendet der Kondensator nur die Batterieleistung?
  • Der Mikrocontroller benötigt nur 1,8 V, aber ich habe keine 1,8-V-Batterien. Sollte ich zwei 1.x-Batterien verwenden und zu viel Spannung senden? Kann ich die Batterielebensdauer verlängern, indem ich „nicht so viele Volt verwende“? Wie mache ich das?
  • Benötigt es zusätzliche Energie, um zu prüfen, ob ein Pin HIGH oder LOW ist? Gibt es im Vergleich zu einem No-Op oder einer Arithmetik viel zusätzlichen Stromverbrauch, wenn einer der GP-E / A-Pins auf seinen Zustand überprüft wird?

Ich weiß vage, wie man Strom, Spannung und Leistung berechnet (und noch vager misst), aber ich bin mir nicht sicher, welche dieser Dinge der Batterielebensdauer entsprechen. Ist die wichtige Messung der Batterielebensdauer in Coulombs?

Ich habe diese vage Vorstellung, dass Batterien voller Dinge sind wie:

  • Ladung, wie in Amperestunden
  • Energie, wie in Wattstunden
  • Leistung, wie in Watt

aber mir ist nicht wirklich klar, was meine Schaltung "frisst", wenn sie läuft. Ich habe eine ganze Menge EE101- und Physik-Lehrbücher gelesen, aber ich habe nicht wirklich Laborerfahrung. Mit anderen Worten, ich habe eine Menge über Batterien gelesen, bin mir aber nicht sicher, was das meiste davon in der Praxis bedeutet.

Verbrauchen Widerstände die Batterielebensdauer? Haben Kondensatoren? Dioden? Ich vermute, das tun sie alle, aber welche der Zahlen sind diejenigen, die von Bedeutung sind? Impedanz? Energieverschwendung? Strom? Stromspannung?

Gibt es eine Möglichkeit, die Spannung zu senken, ohne die Batterie zu verschwenden? Gibt es eine Möglichkeit, die Spannung zu senken und gleichzeitig die Batterielebensdauer zu verlängern?

Dies ist eine sehr, sehr weit gefasste Frage. Sie müssen fast mehrere Fragen stellen. Ich könnte eine vollständige Frage zur LED-Leistungsfrage stellen.
Cool, ich teile es nach Büroschluss auf. Vielleicht handelt es sich bei diesem nur um grobe Gebote und Verbote. Ich denke, solche Antworten wären hilfreich für Leute, die nur versuchen, mehr aus einer Batterie herauszuholen, aber ich denke, jede Art von maßgeblicher oder lehrreicher Antwort erfordert eine engere Frage.
Ja, mir wurde klar, dass ich meine Antwort nach Ihrer Frage unterteilen musste und eine Stunde brauchen würde.
Übrigens hat meine Frau makezine.com/makeitlast gefunden, was eventuell nützlich sein könnte, da es im Grunde ein Wettbewerb ist, um so etwas zu machen. Ich denke, es beginnt heute, also haben sie keine Hinweise veröffentlicht, wie es geht. Auf jeden Fall ist mein Projekt unabhängig, und ich bezweifle, dass ich sowieso Zeit hätte, daran teilzunehmen :) Sie können gerne warten, bis der Wettbewerb vorbei ist, wenn Sie solche Dinge nicht mögen.

Antworten (5)

Nur eine zufällige Liste, wenn Sie Ihren Schaltplan posten, wäre es wahrscheinlich einfacher:

1,8-V-Lithium-Knopfzellen sind sehr leicht zu finden, aber Ihre serielle Schnittstelle benötigt eher 3,3 V? Es sei denn, Ihr Empfangsende wird mit 1,8 V umgehen.

Der Leckstrom steigt im Allgemeinen mit zunehmender Spannung, daher ist niedriger normalerweise besser. Berücksichtigen Sie auch den Brownout-Punkt für das System im Vergleich zu den Batterieeigenschaften. Die "Tod"-Eigenschaften der Batterie werden durch die von Ihnen verwendete Batteriechemie bestimmt. Wenn Ihr uC beispielsweise bei 1,7 V braun wird, möchten Sie vielleicht tatsächlich eine Batterie mit höherer Spannung verwenden, da bei einigen Batterien die Ausgangsspannung langsam sinkt, wenn die Batterie leer ist. Sie würden aus einer 3,3-V-Batterie mehr Lebensdauer herausholen, da ihre Ausgangsleistung langsam abfällt, wenn sie beginnt zu sterben, und Sie können bis hinunter zu 1,8 V arbeiten. Wenn Sie eine 1,8-V-Batterie verwenden, wird sie ziemlich schnell heruntergefahren, wenn die Batterie leer ist. Dies alles setzt voraus, dass Ihre serielle Schnittstelle oder andere Komponenten mit einem großen Spannungsbereich umgehen können (ich weiß, dass der AVR das kann).

LEDs verbrauchen viel Strom, es sei denn, Sie verwenden eine sehr stromsparende LED und steuern ihre Stromaufnahme, sie ziehen wahrscheinlich viel mehr Strom als der AVR. Wenn es nur zum Debuggen da ist, füllen Sie es nicht für die Produktion oder lassen Sie es nur ab und zu blinken oder so, um seine Pünktlichkeit zu minimieren, und kontrollieren Sie auf jeden Fall seine Stromaufnahme.

Wenn Sie können, wählen Sie die Polarität / den Ruhezustand Ihrer seriellen Schnittstelle, um so wenig Strom wie möglich zu verbrauchen, der Ruhezustand sollte keinen Strom verbrauchen. Wenn Pull-Ups erforderlich sind, verwenden Sie den größtmöglichen Widerstand, um die Signalintegrität aufrechtzuerhalten, aber den Stromverbrauch zu minimieren. Wenn Strom ein großes Problem ist, verwenden Sie ein Signalschema, das Bits bevorzugt, die keinen Strom ziehen. Wenn Sie beispielsweise Klimmzüge haben, wird die Verwendung eines Protokolls, das zu vielen Einsen im Signal führt, die serielle Schnittstelle in einem Zustand belassen, der die meiste Zeit nicht so viel Strom verbraucht. Solche Optimierungen lohnen sich nur bei intensiver Nutzung des seriellen Busses. Wenn es sehr leicht verwendet wird, stellen Sie sicher, dass sein Ruhezustand keinen Strom zieht.

Im Allgemeinen können Sie davon ausgehen, dass alle Anweisungen (Lesen von GPIO usw.) die gleiche Menge an Strom benötigen. Es ist nicht wirklich wahr, aber der Leistungsunterschied ist minimal.

Der Stromverbrauch hängt viel mehr von der Anzahl/Art der Peripheriegeräte ab, die Sie eingeschaltet haben, und von der Zeit, die das Mikro aktiv oder im Ruhezustand verbringt. Der ADC verbraucht also mehr Strom, EEPROM-Schreibvorgänge verbrauchen ziemlich viel Strom. Insbesondere werden EEPROM-Schreibvorgänge normalerweise in ziemlich großen "Blöcken" durchgeführt, sodass Sie so viele Informationen wie möglich sammeln sollten, bevor Sie in das EEPROM schreiben (wenn Sie es natürlich überhaupt verwenden). Für den ADC, der das ADC-Lesen während 2 seiner Schlafzustände unterstützt, ist dies eine gute Zeit zum Schlafen, da die ADC-Konvertierung relativ lange dauert.

Sie sollten wahrscheinlich nur die Abschnitte zu Energieverwaltung, Schlafzuständen und Minimierung des Stromverbrauchs im Datenblatt des Mikrocontrollers lesen: Linky Seite 35 ff. Halten Sie den AVR so lange wie möglich im tiefstmöglichen Schlafzustand. Die einzige Ausnahme hiervon ist, dass Sie die Start- und Abschaltzeit berücksichtigen müssen. Es lohnt sich nicht, 10 Zyklen zu schlafen, wenn das Aufwachen 25 dauert usw.

Verbrauchen Widerstände die Batterielebensdauer? Haben Kondensatoren? Dioden?

Sie alle tun es bis zu einem gewissen Grad. Widerstände verbrauchen in den meisten Anwendungen am meisten:

P = V*I

P = V^2 / R oder P = I^2 * R (wobei V der Spannungsabfall über dem Widerstand ist)

Dioden haben einen (relativ) festen Spannungsabfall, sodass die Verlustleistung fast ausschließlich an den durch die Diode fließenden Strom gebunden ist. Zum Beispiel eine Diode mit einem Durchlassspannungsabfall von 0,7 V, P = 0,7 * I, wenn der Strom durch die Diode vorwärts fließt. Dies ist natürlich eine Vereinfachung und Sie sollten die Betriebsart anhand der IV-Eigenschaften der Diode überprüfen.

Kondensatoren sollten theoretisch keine Leistung verbrauchen, aber in Wirklichkeit haben sie einen endlichen Serienwiderstand und einen Leckstrom ungleich Null, was bedeutet, dass sie etwas Leistung verbrauchen, was Sie jedoch bei so niedrigen Spannungen im Allgemeinen nicht befürchten sollten. Allerdings ist die Wahl von Kondensatoren mit minimalem Leckstrom und ESR ein Machtgewinn.

Soweit sie verwendet werden, um den Batterieverbrauch zu glätten, hilft dies nicht wirklich beim Stromverbrauch, sondern eher beim Filtern. Auch die Batteriechemie kommt hier ins Spiel, einige Chemien werden mit einer konstanten Entnahme zufriedener sein, andere besser mit spitzen Stromentnahmen umgehen.

Der wichtige Teil von P = V ^ 2 / R ist, dass der Stromverbrauch abnimmt, wenn R mit einer festen Spannung ansteigt.
Cool, um mehr Batterie zu nutzen, brauche ich wahrscheinlich eine höhere Spannung (möglicherweise unter Verwendung des von Andrew vorgeschlagenen Reglers). Ich werde einige Experimente durchführen, um zu sehen, wie niedrig die Spannung der seriellen Leitung ist. Ich werde auch sicherstellen, dass die unbenutzten Pins auf Ausgang gesetzt werden. Serial wird nur gelegentlich verwendet, also überprüfe ich nur den Ruhezustand. Ich habe definitiv versucht, alle Peripheriegeräte herunterzufahren, die ich kann.
Für Kondensatoren: Wahrscheinlich brauche ich keinen Kondensator, um der Batterie zu helfen. Überprüfen Sie die Batteriechemie, aber vorausgesetzt, sie kann mit dem Muster der Stromentnahme umgehen, das ich habe, dann müssen Sie nicht versuchen, sie anzupassen, oder?
Danke für das P-Ding. Ich glaube, ich habe es jetzt verstanden. P = I * V, wobei V der Spannungsabfall ist, sodass ich den Batterieverbrauch in P oder I (oder P-Stunden oder I-Stunden) messen kann, solange die Spannung nicht geändert werden kann. Ich bin mir immer noch nicht sicher, ob ich V "kostenlos" ändern kann.
Der von Andrew erwähnte Buck-Boost-Regler ist wirklich die beste Lösung. Ich habe es nicht erwähnt, weil das Layout solcher Schaltungen normalerweise kritisch ist. Sie sind ohne funky Leistung oder die Ausstrahlung von Tonnen von EMI schwer zu stecken. Lesen Sie das Datenblatt sorgfältig durch, Empfehlungen für das Layout und die Identifizierung kritischer Pfade sind normalerweise enthalten. Es wird auch strengere Beschränkungen für einige der verwendeten Teile geben. Kondensatoren mit niedrigem ESR und so.
Fehler noch etwas am Regler: Versuchen Sie, wenn möglich, ein Teil mit einem internen Schalter und einer festen Spannung zu finden. Dadurch werden einige der kritischen Pfade entfernt, um die Sie sich im Layout kümmern müssten.
Lithium hat 3V, nicht 1,8V
@stevenvh Abhängig von der von Ihnen gewählten Chemie sind Lithiumzellen in 1,5 bis 3,7 V erhältlich.
@Mark - Entschuldigung, ich dachte an die klassischen nicht wiederaufladbaren Lithiums, das ist die übliche Bezeichnung, wenn Sie das Amalgam nicht angeben. Die gibt es nur in 3V.

Mark gab eine hervorragende Antwort und traf auf viele der Punkte, die ich ansprechen wollte. Es gibt auch einige, die ich gerne beitragen möchte.

Verwenden Sie ein Oszilloskop mit einem niederohmigen Widerstand in Reihe mit der Rückleitung zur Batterie, um Strommessungen vorzunehmen. Die Stromaufnahme mit einem Mikrocontroller ist nicht einfach und in der Regel sind Messgeräte VIEL zu langsam, um Ihnen eine gute Vorstellung davon zu geben, was vor sich geht. Was "niederohmig" bedeutet, hängt von der erwarteten Stromaufnahme ab. Ein 1-Ohm-Widerstand entwickelt 100 mV pro 100 mA gezogen, und das ist wahrscheinlich zu viel für Sie. Ich würde einen 10 Ohm 1% oder 0,5% Widerstand versuchen; Sie sehen 100 mV für jeweils 10 mA Stromaufnahme. 18 Ohm würden Ihnen 100 mV für alle 5,5 mA geben. Wenn Sie WIRKLICH auf eine geringe Leistung aus sind, können Sie möglicherweise mit 1k davonkommen. I = V / R: Sie sehen 100 mV pro 100 uA Stromaufnahme. Aber Vorsicht; Wenn Sie genug Strom ziehen, werden Sie am Ende zu viel über den Shunt fallen und Ihre Messungen werden falsch sein. ganz zu schweigen davon, dass die Schaltung wahrscheinlich nicht funktioniert. :-)

Probieren Sie bei angeschlossenem Oszilloskop einige verschiedene Betriebsfrequenzen für den Mikrocontroller aus. Sie werden überrascht sein zu erfahren, dass Sie mit einer höheren Taktrate weniger Strom verbrauchen, weil Sie viel weniger Zeit „wach“ verbringen.

Klimmzüge/Klimmzüge so weit wie möglich eliminieren. Sie sollten an keinem Ausgang welche haben, da Sie sie in den meisten Fällen in einen Ruhezustand versetzen können. Eingaben sollten an das Sinnvolle gebunden sein und einen möglichst hohen Wert verwenden, wie Mark sagte.

Stellen Sie sicher, dass Ihr Mikrocontroller so viel wie möglich abgeschaltet hat. Verwandeln Sie unbenutzte Pins in Ausgänge und treiben Sie sie in einen Zustand (hoch oder niedrig, spielt keine Rolle). Lassen Sie keine LEDs eingeschaltet. Wenn Sie andere Komponenten ausschalten oder ihre Uhren anhalten können, tun Sie es. SPI-Flash-Speicher verfügen beispielsweise häufig über einen Befehl zum Herunterfahren, der die ohnehin schon geringe Leistungsaufnahme noch weiter senkt.

Andere haben den Spannungsaspekt angesprochen, und ich möchte ihn auch kommentieren. Sie werden wahrscheinlich eine VIEL bessere Batterienutzung erzielen, wenn Sie einen hocheffizienten Buck / Boost-Regler zwischen der Batterie und Ihrem Schaltkreis verwenden. Der Regler befindet sich im Buck-Modus (Spannungsreduzierung), wenn der Batteriestand höher als die von Ihnen benötigten 1,8 V ist, und wechselt in den Boost-Modus (Spannungserhöhung), wenn der Batteriestand unter 1,8 V fällt. Auf diese Weise können Sie den Stromkreis so lange betreiben, bis die Batterie wirklich leer ist, was den Effizienzverlust von wenigen Prozent wert ist, den Sie bei der Verwendung erleiden. Stellen Sie sicher, dass Sie den Regler basierend auf seiner Effizienz über den gesamten Bereich, den Sie verwenden möchten, auswählen und den Regler entsprechend dimensionieren; Ein Regler, der 1 A bei 98 % Wirkungsgrad liefern kann, hat wahrscheinlich einen Wirkungsgrad von 60 % und liefert 50 mA. Lesen Sie die Datenblätter sorgfältig durch.

Cool. Ich habe noch nie ein Oszilloskop verwendet, aber ich vermute, unser örtliches Labor wird mir das gerne zeigen (im Moment verwende ich das Multimeter in Reihe, um den Strom zu messen; nicht sehr gut). – Würden Sie den Regler auch empfehlen, auch wenn ich nur 1-10 mA verwende, vorausgesetzt, ich finde ein geeignetes Teil? Ist ein Wirkungsgrad von 90 % gut genug (ich erinnere mich, dass ich einen billigen in diesem Bereich gefunden habe), oder verbraucht er mehr Strom, als er mir spart?
Sehr guter Punkt beim Spielen mit der Frequenz, erinnert mich daran, dass das WLAN-Radio in meinem Handy mehr Strom verbraucht als das Mobilfunkmodem, aber WLAN ist so viel schneller, dass es mehr schlafen kann und dadurch insgesamt besser mit Strom versorgt wird.
Ein weiterer Trick zum Abschätzen des zeitdurchschnittlichen Stromverbrauchs von Mikrocontrollern in Szenarien, in denen die Stromaufnahme "stoßartig" sein wird, besteht darin, einen wirklich großen Kondensator aufzuladen und einen Regler mit niedrigem Ruhestrom zu speisen, um die Batteriespannung zu simulieren. Ein 100.000-uF-Kondensator fällt um 0,01 Volt pro Milliampere-Sekunde ab. Wenn es in fünf Minuten (300 Sekunden) um 0,3 Volt abfällt, beträgt Ihre durchschnittliche Stromaufnahme 100 uA.
Der Punkt der Effizienz von Regulierungsbehörden ist sehr wichtig. Sie müssen also Ihren Stromverbrauchsbereich abschätzen, um einen geeigneten Regler innerhalb dieses Bereichs auszuwählen

Bei Ihrer Schaltung würde ich empfehlen, ein Multimeter im Mikroamperebereich zu verwenden, um den Stromverbrauch zu messen. Dann können Sie anhand der Batterieeigenschaften die Lebensdauer berechnen. Es sind nicht unbedingt Amperestunden / Strom, da die Batterie für unterschiedliche Lasten unterschiedliche Entladeeigenschaften aufweist. Als Annäherung kann es aber hilfreich sein.

Bei 1 MHz werden Sie meiner Meinung nach ein bisschen Strom saugen - mindestens 100 µA, wenn PIC-Mikros vergleichbar sind. Aber das wird von den 5 mA bis 20 mA überwältigt, die durch Ihre LED gehen, also sollten Sie das zuerst loswerden.

Cool, LED gelöscht. Es ist schwierig, eine genaue Messung zu erhalten. Sieht im Moment nach 0,9 mA aus, also schaltet sich meine Software vielleicht nicht so stark ab, wie ich dachte. Mit Arduino (und Heartbeat-LED) sind es eher 8-9 mA, also hilft zumindest das Winzige.

Heutzutage gibt es leicht verfügbare Entwicklungskits und Breakout-Boards, die äußerst praktisch sind, um präzise Strommessungen durchzuführen, in einigen Fällen bis in den nA-Bereich. Wenn Sie es noch nicht getan haben, schauen Sie sich unbedingt das µCurrent Gold an . Dies ist gut für statische Messungen, aber weniger für das Protokollieren von Messungen über die Zeit.

Eine Möglichkeit, den µCurrent weiterhin zu verwenden, besteht darin, einen Differenzverstärker an den Ausgang anzuschließen. Dann können Sie dies einem Oszilloskop oder einem Logikanalysator mit analogen Eingängen zuführen. Ich habe ein vollständiges Tutorial zu Schrauben und Muttern darüber geschrieben. Ich habe das Gefühl, dass es für Leute mit kleinem Budget hilfreich sein kann, die nicht ganz über die richtigen Werkzeuge verfügen.

Es ist erstaunlich, was Sie nicht nur daraus lernen können, was die Spannung in Ihrem Schaltkreis tut, sondern auch, wie sie auf jede kleine Stromspitze reagiert. Es hat mir ein paar Mal den Hintern gerettet, als ich mich für Batterietechnologien und Validierungstests entschieden habe. 😎

Alle Antworten haben bereits wichtige Punkte. Ich werde einen aus meiner Erfahrung hinzufügen.

Als ich Geräte mit einem Verbrauch von weniger als 10 uA entwickelte, sogar weniger als 1 uA im Tiefschlafmodus, machte die Reinigung der Platine einen Unterschied. Einmal hatte ich 7 von 10 Platinen mit der zu erwartenden Stromaufnahme. Alle waren gleich und alle funktionierten OK. Nach der Reinigung in einem Ultraschallreiniger erreichten alle Bretter das erwartete Ergebnis.

Schätzen Sie schließlich Ihren erwarteten/gezielten Verbrauch ab, indem Sie die Datenblätter aller Ihrer Elemente überprüfen. Wenn Sie damit gut umgehen, werden Sie Ihre Schätzung erreichen. Dies schließt alle unbenutzten Pins im Mikrocontroller ein. Auch wenn Sie Ihren ADC ausschalten, stellen Sie sicher, dass die Pin-Konfiguration im ausgeschalteten Zustand die beste ist, abhängig von Ihrer externen Verbindung.