STM32L071KZ Batteriespannungsüberwachung über ADC

Entschuldigung für die Neuling-Frage. Ich habe hier keine Fragen und Antworten gefunden, die mir bei diesem Problem helfen könnten, also habe ich beschlossen, sie zu stellen.

Ich entwerfe meine erste Schaltung mit dem Mikrocontroller STM32L071KZ und er wird über VBUS (USB, 5 V) als Primärversorgung und 2xAA-Alkalibatterien (3 V) als Sekundärversorgung mit Strom versorgt.

Die Netzteile sind auf 3,3 V geregelt, sodass der Mikrocontroller und der Rest der Schaltung von geregelter Spannung und nicht direkt von VBUS oder Batterien gespeist werden.

Ich möchte den Batteriespannungspegel überwachen und wenn er unter einen bestimmten Schwellenwert fällt (z. B. 2,2 V), werde ich ihn dem Benutzer anzeigen.

Ich frage mich, wie ich die Dinge verkabeln soll. Die VDD des Mikrocontrollers beträgt 3,3 V und entspricht VDDA. Wenn ich es richtig verstanden habe, erhalte ich beim Abtasten der Batteriespannung einen konstanten Wert, da die Abtastung das Verhältnis zwischen VDD und VDDA ist.

Dies ist mein Stromkreis-Blockdiagramm, um die Dinge klarer zu machen:

Geben Sie hier die Bildbeschreibung ein

Vielen Dank!

Muss man den Controller wirklich mit 3,3 Volt versorgen? Es würde gerne mit irgendetwas zwischen 1,8 V und 3,6 V laufen und es hat seine eigenen Stromversorgungsüberwachungseinrichtungen, siehe Programmierbarer Spannungsdetektor und Brown-Out-Schwellenwert im Referenzhandbuch. Wenn Sie genau 3,3-V-Ausgänge benötigen, gilt dies natürlich nicht.
Sie lassen den ADC eine Messung an der internen Bandlückenspannungsreferenz durchführen - ähnlich wie meine Antwort hier auf eine Frage dazu, dies in einem PIC zu tun. Die Referenz Ihres STM32 ist anders (1,224 V statt 1,024 V), aber das Prinzip ist dasselbe.
@brhans Messen der internen Referenz vor dem Messen des Analogeingangs kann dazu beitragen, die Genauigkeit etwas zu verbessern (durch die Berechnung der tatsächlichen Vref + aus Vrefint). Dies ist jedoch nicht das, worum es in Ihrer referenzierten Antwort geht.
@Maple - meine referenzierte Antwort beschreibt, wie die interne Bandlücke verwendet wird, um die Vdd des Mikros zu messen. Es verwendet diese Bandlücke nicht als Referenz des ADC. Vdd ist die Referenz des ADC und die Bandlücke ist der gemessene Eingang. Da die Bandlücke konstant ist und Vdd variiert, wird das Ergebnis des ADC als Maß für Vdd verwendet. Es sind keine Spannungsteiler erforderlich.
Genau das habe ich gesagt, vorausgesetzt, Vref + wird auf diese Weise berechnet (nicht Vdd oder Vdda), bevor der tatsächliche ADC-Eingang gemessen wird. Vdd/Vdda sind keine ADC-Referenzen in STM32, Vref+ ist es. Die oben erwähnten 1,224 V sind Vrefint und können überhaupt nicht als ADC-Referenz verwendet werden.
@Maple - das OP schreibt: "Wenn ich die Spannung der Batterie abtaste, erhalte ich einen konstanten Wert, da die Abtastung das Verhältnis zwischen VDD und VDDA ist" - was mich zu dem Schluss führt, dass er Vref + und VDDA miteinander verbunden hat, weil er es tut keine externe Referenz haben. Und 13.12.1 im STM32L071-Datenblatt lautet: "Es ermöglicht eine genaue Überwachung des VDD-Werts (wenn keine externe Spannung, VREF+, für ADC verfügbar ist)."
Sie weigern sich zu verstehen, was ich sage, weil Sie glauben, ich würde mit Ihnen streiten, was ich nicht tue. Versuchen wir es noch einmal: Die vom ADC gemessene Spannung ist relativ zur Spannung Vref+. Dies gilt für die Batteriespannung am ADC-Eingangspin und für die intern verfügbare Vrefint-Bandlückenspannung. Durch Messen von Vrefint kann Vref+ berechnet und später zur Berechnung der gemessenen Batteriespannung verwendet werden. Ob Vref+ mit Vdd oder Vdda oder beiden (oder sogar einer externen Referenz) verbunden ist oder nicht, ist für diese Berechnungen völlig irrelevant .

Antworten (1)

Sie müssen sicherstellen, dass die von Ihnen verwendeten Batterien niemals 3,3 V überschreiten. Wenn dies bei frischen Batterien möglich ist, sollten Sie einen Spannungsteiler hinzufügen, um den ADC-Eingang auf einen akzeptablen Bereich zu senken. Dies erhöht jedoch den Stromverbrauch der Batterien. Die übliche Abhilfe besteht darin, einen MOSFET-Schalter zwischen Batterie und ADC hinzuzufügen, der von einem anderen MCU-Pin gesteuert wird. Die MCU öffnet den Schalter periodisch, misst die Spannung und schließt ihn wieder. Siehe diese Frage zum Beispiel.

Auch die Diode zwischen Boost DC-DC und Vdd lässt etwas Spannung ab (abhängig von Strom und Diode), sodass Sie den Boost-Ausgang möglicherweise auf eine etwas höhere Spannung einstellen möchten.

Beachten Sie, dass der Aufwärtswandler die Batterie entlädt, selbst wenn USB angeschlossen ist. Darüber hinaus muss Ihr LDO eine höhere Spannung als DC-DC erzeugen, damit die Diode schließt, etwa 3,4 bis 3,5 V

Daher würde ich vorschlagen, entweder einen Gleichstromadapter mit Fass und eine Buchse mit mechanischem Schalter zu verwenden, der die Batterie trennt, wenn die Stromversorgung angeschlossen ist, oder einen anderen MOSFET-Schalter, der die Batterie trennt, wenn USB-Spannung vorhanden ist. Siehe diese Frage für relevante Diskussionen.

Ansonsten sieht deine Schaltung OK aus.