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:
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:
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?
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.
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.
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.
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.
Kortuk
Jack Schmidt
Kortuk
Jack Schmidt