Batteriestandsanzeige

22

Ich möchte eine Batterielebensdaueranzeige erstellen, die ich in Verbindung mit einem Mikrocontroller verwenden kann. Ich hoffe, dass ich dann die verbleibende Akkulaufzeit ablesen und den Mikrocontroller zunehmend in den Ruhezustand versetzen kann, um die Akkulaufzeit zu verlängern.

littlebirdceo
quelle
1
Welcher Mikrocontroller?
Brian Carlton

Antworten:

13

Bei der primären Frage, wie die Spannung einer Batterie gemessen werden soll, besteht die einfachste Methode darin, einen der ADC-Pins am Arduino zu verwenden.

Wenn Sie 5 V aus der Batterie bereitstellen (unwahrscheinlich), können Sie das Pluszeichen (+) direkt an einen der analogen Eingangsstifte anschließen und analogRead () verwenden - jede Werterhöhung (von 0 bis 1023) entspricht 4,9 mV. Multiplizieren Sie den gelesenen Wert mit 0,0049, um die gelesenen Volt zu erhalten.

Wenn Sie mit einer höheren Spannung als 5 V (mit größerer Wahrscheinlichkeit) arbeiten, können Sie eine Spannungsteilerschaltung (siehe: http://en.wikipedia.org/wiki/Voltage_divider ) verwenden, um die Spannung, die Sie an den Analogeingang senden, auf zu bringen <= 5 v. Wenn Sie mit 12 V arbeiten, möchten Sie die Spannung in etwa 1/3 teilen. Nach dem Multiplizieren des ADC-Werts mit 3 multiplizieren, um die tatsächliche Spannung zu erhalten.

Wenn Sie also 12 V und einen 1/3-Spannungsteiler verwenden, gilt Folgendes:

#define BAT_PIN 14

float read_batt_volts(void) {

  int val = analogRead(BAT_PIN);

  float volts = (float) val * (float) 0.0049 * (float) 3;

  return(volts)
}

! c

Shutterdrone
quelle
2
Ich muss dem noch zwei wichtige Dinge hinzufügen. Erstens sterben die meisten 12-V-Batterien nicht bei 0 V, sondern bei etwas, das mindestens 5 V von Ihrer vollen Ladespannung entfernt ist. Eine übliche Technik, um Messungen mit höherer Auflösung im Betriebsbereich zu erhalten, besteht darin, die Spannung mit einer Zenerdiode abzusenken. Ein Widerstand in Reihe mit einem Zener und Sie messen über den Widerstand. Zweitens erkennen die meisten Menschen nicht, dass Sie Strom aus einer Batterie ziehen müssen, um eine gute Vorstellung von der verbleibenden Leistung zu erhalten.
Kortuk
@Kortuk: Könnten Sie zwei Erklärungen für mein Lernen abgeben: (1) Um in den Pin-akzeptierten Spannungsbereich zu gelangen, schlagen Sie vor, dass der Zenerdioden-Ansatz eine höhere Auflösung ergibt als die Spannungsteilermethode? (2) Warum haben Sie hier besonders erwähnt, dass "Sie Strom ziehen müssen ..." usw.?
Boardbite
22

tinker.it hat einen "geheimen" Spannungspegelmesser im Atmega168 / atmega328 veröffentlicht. Mit einem kleinen Trick kann ein Arduino VCC mit einer internen 1.1v-Präzisionsreferenz vergleichen. Die Erklärung und der Code finden Sie hier: https://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

bpijls
quelle
Ausgezeichnet, ich verwende einen Atmega mit Batterien und konnte keinen zuverlässigen VREF-Wert ermitteln. Danke, dass du das gepostet hast, es hat mein Problem wie Magie gelöst!
Radhoo
10

Der Vorschlag von shutterdrone ist sehr gut, es fehlt jedoch ein Detail, da impliziert wird, dass die analoge Spannungsreferenz mit der gemessenen Spannung übereinstimmt (abgesehen von der Annahme, dass ein Arduino verwendet wird, was nicht ausdrücklich angegeben ist).

Sie benötigen einen ADC, unabhängig davon, ob er in Ihre uC integriert ist oder eine externe Komponente. Der ADC benötigt eine analoge Spannungsreferenz (ARef), um den Eingang mit zu vergleichen. Sie möchten nicht, dass das ARef mit der von Ihnen erfassten Spannung übereinstimmt, da der ADC dann die Eingangs- und Referenzspannung immer als gleich ansieht, sodass der Analogwert für die erfasste Spannung immer das Maximum ist. Was Sie brauchen, ist eine sehr genaue analoge Spannungsreferenz, die sich nicht ändert, wenn sich die Versorgungsspannung ändert. Der ADC vergleicht diese Referenzspannung mit der Batteriespannung. Sie können einen Spannungsteiler verwenden, um die erfasste Batteriespannung in den Bereich des ARef zu reduzieren.

Der Arduino (Atmega8 / 168/328 / etc.) Verfügt über einen eingebauten ADC und eine eingebaute 1,1-V-Analogreferenz. Die einzigen externen Komponenten, die Sie benötigen, sind Widerstände für den Spannungsteiler. Ich denke, Sie möchten auch sehr hohe Werte für die Widerstände verwenden, um den Stromverbrauch der Batterie zu verringern.

Blalor
quelle
2
Hervorragende Punkte - und Sie haben Recht, dass ich (fälschlicherweise) einen Arduino in der Mischung angenommen habe. =)! c
shutterdrone