Inhaltsverzeichnis:

Noch ein Batteriekapazitätstester - Gunook
Noch ein Batteriekapazitätstester - Gunook

Video: Noch ein Batteriekapazitätstester - Gunook

Video: Noch ein Batteriekapazitätstester - Gunook
Video: Akku Kapazitätsmessgerät DL 24 Elektronischelast Batterie Kapazität Tester 2024, Juli
Anonim
Noch ein Batteriekapazitätstester
Noch ein Batteriekapazitätstester
Noch ein Batteriekapazitätstester
Noch ein Batteriekapazitätstester

Warum noch ein Kapazitätstester

Ich habe viele verschiedene Bauanleitungen für Tester gelesen, aber keine davon scheint meinen Anforderungen zu entsprechen. Ich wollte auch mehr als nur einzelne NiCd/NiMH- oder Lion-Zellen testen können. Ich wollte einen Akku für ein Elektrowerkzeug testen können, ohne ihn zuerst zu zerlegen. Also beschloss ich, mir die Sache genauer anzuschauen und einen eigenen zu entwerfen. Eins führt zum anderen und ich beschloss schließlich, selbst ein instructable zu schreiben. Ich habe mich auch entschieden, nicht auf alle Details einzugehen, wie man den Tester tatsächlich baut, weil jeder über bestimmte Entscheidungen entscheiden kann, wie z Eagle installieren oder wie man eine Platine macht. Mit anderen Worten, ich konzentriere mich auf die Schaltpläne und den Code und wie man den Tester kalibriert.

Schritt 1: Verlauf - Version 1

Geschichte - Version 1
Geschichte - Version 1

Oben ist die erste Version mit der unten erwähnten über 10V-Eingangsunterstützung hinzugefügt (R12 & R17 & Q11 & Q12).

Die erste Version wurde mehr oder weniger von einem instructable von deba168 genommen (leider kann ich sein instructable nicht finden, um einen Link bereitzustellen). Es wurden nur einige kleinere Änderungen vorgenommen. In dieser Version hatte ich einen 10 Ohm Lastwiderstand, der von einem Mosfet gesteuert wurde. Dies brachte jedoch einige Probleme mit sich. Beim Testen einer NiCd- oder NiMH-Zelle konnte die benötigte Zeit leicht in Stunden, wenn nicht sogar Tagen gemessen werden. Ein 1500mAh Akku brauchte über 12 Stunden (der Strom betrug nur 120mA). Andererseits konnte die erste Version nur Batterien unter 10V testen. Und ein voll aufgeladener 9,6-V-Akku kann tatsächlich bis zu 11,2 V betragen, was aufgrund der 10-V-Grenze nicht getestet werden konnte. Es musste etwas getan werden. Zuerst habe ich nur ein paar Mosfets und Widerstände hinzugefügt, damit die Spannungsteiler mehr als 10 V zulassen können. Aber dies brachte auf der anderen Seite ein anderes Problem mit sich. Eine voll geladene 14,4V Batterie kann bis zu 16,8V haben, was mit 10 Ohm Widerstand 1,68A Strom und natürlich eine Verlustleistung vom Lastwiderstand von fast 30W bedeutet. Also bei niedriger Spannung zu lange Testzeit und bei hoher Spannung zu hoher Strom. Es war offensichtlich keine adäquate Lösung und eine Weiterentwicklung war erforderlich.

Schritt 2: Version 2

Ich wollte eine Lösung, bei der der Strom unabhängig von der Batteriespannung in bestimmten Grenzen bleibt. Eine Lösung wäre gewesen, PWM und nur einen Widerstand zu verwenden, aber ich zog es vor, eine Lösung ohne pulsierenden Strom zu haben oder die Mosfet-Wärme abzuleiten. Daher habe ich eine Lösung mit 10 Spannungsschlitzen mit jeweils 2 V Breite erstellt, wobei 10 3,3-Ohm-Widerstände und ein Mosfet für jeden Widerstand verwendet wurden.

Schritt 3: So stellte sich heraus

So ist es geworden
So ist es geworden

Kommentare zur SchaltungMan könnte argumentieren, dass der Spannungsverlust über den Mosfet vernachlässigbar ist, weil der Widerstand des Mosfet so niedrig ist, aber ich habe die Wahl des Mosfet dem Leser überlassen und somit kann der Widerstand sogar über 1 Ohm gehen, wo er beginnt zu Gegenstand. In Version eins würde die Wahl des richtigen Mosfets die Notwendigkeit einer Messung des unteren Punktes beseitigen, aber in Version 2 entschied ich mich, die Spannung nur über einen Widerstand zu messen, was es dann wichtig macht, tatsächlich zwei Messpunkte zu haben. Und der Grund für die Wahl war die einfache Verkabelung des Veroboards. Dies fügt einen gewissen Genauigkeitsfehler hinzu, da die gemessene Spannung an einem Widerstand erheblich kleiner ist als die Messung über alle Widerstände. Bei der Komponentenauswahl habe ich mich für das entschieden, was ich entweder schon zur Hand hatte oder leicht beschaffen konnte. Dies führte zu folgender Stückliste:

  • Arduino Pro Mini 5V !WICHTIG! Ich habe die 5V-Version verwendet und alles basiert darauf
  • 128x64 I2C-OLED-Display
  • 10 x 5W 3,3 Ohm Widerstände
  • 3 x 2n7000 Mosfets
  • 10 x IRFZ34N-Mosfets
  • 6 x 10 kOhm Widerstände
  • 2 x 5 kOhm Widerstände
  • 16V 680uF Kondensator
  • 1 alter CPU-Lüfter

Folgendes habe ich in den Schaltplänen nicht hinzugefügt

  • Pullup-Widerstände auf I2C-Leitungen, die mir aufgefallen sind, machten das Display stabiler
  • Stromleitungen
  • Kondensator in 5V Leitung der auch das Display stabilisiert

Beim Testen habe ich festgestellt, dass die Lastwiderstände ziemlich heiß werden, besonders wenn sie alle verwendet werden. Die Temperatur stieg auf über 100 Grad Celsius (das sind über 212 Grad Fahrenheit) und wenn das gesamte System in einer Box geschlossen werden soll, sollte eine Art Kühlung bereitgestellt werden. Die von mir verwendeten Widerstände sind 3,3 Ohm / 5 W und der maximale Strom sollte mit etwa 2 V pro Widerstand auftreten, was 2 V / 3,3 = 0,61 A ergibt, was 1,21 W ergibt. Ich landete beim Hinzufügen eines einfachen Lüfters in der Box. Hauptsächlich, weil ich zufällig einen alten CPU-Lüfter in der Nähe hatte.

Schematische Funktionalität

Es ist ziemlich einfach und selbsterklärend. Die zu prüfende Batterie wird an die Reihe der Widerstände und Masse angeschlossen. Die Spannungsmesspunkte sind der Batterieanschluss und der erste Widerstand. Die Spannungsteiler werden dann verwendet, um die Spannung auf ein Niveau zu senken, das besser zu Arduino passt. Ein digitaler Ausgang wird verwendet, um entweder den 10-V- oder 20-V-Bereich der Teiler auszuwählen. Jeder Widerstand in der Last kann mit den Mosfets, die direkt von Arduino angesteuert werden, einzeln geerdet werden. Und schließlich ist das Display mit Arduino I2C-Pins verbunden. Zum Schaltplan gibt es nicht viel zu sagen J

Schritt 4: Der Code

Der Code
Der Code

Oben ist die grobe Funktionsweise des Codes zu sehen. Schauen wir uns dann den Code genauer an (die Arduino-Ino-Dateien sind angehängt). Es gibt eine Reihe von Funktionen und dann die Hauptschleife.

Hauptschleife

Wenn die Messung fertig ist, werden die Ergebnisse angezeigt und die Ausführung endet dort. Wenn die Messung noch nicht abgeschlossen ist, wird zuerst überprüft, welcher Batterietyp ausgewählt ist und dann die Spannung am Eingang. Wenn die Spannung 0,1 V überschreitet, muss mindestens eine Art Batterie angeschlossen sein. In diesem Fall wird ein Unterprogramm aufgerufen, um herauszufinden, wie viele Zellen sich in der Batterie befinden, um zu entscheiden, wie getestet werden soll. Die Anzahl der Zellen ist mehr oder weniger Information, die besser genutzt werden könnte, aber in dieser Version wird sie nur über die serielle Schnittstelle gemeldet. Wenn alles in Ordnung ist, wird der Entladevorgang gestartet und bei jeder Runde der Hauptschleife wird die Batteriekapazität berechnet. Am Ende der Hauptschleife wird das Display mit bekannten Werten gefüllt.

Vorgehensweise zum Anzeigen von Ergebnissen

Die Funktion showResults setzt einfach die anzuzeigenden Zeilen auf dem Display und auch den String, der an die serielle Schnittstelle gesendet werden soll.

Verfahren zum Messen von Spannungen

Am Anfang der Funktion wird der Vcc von Arduino gemessen. Es wird benötigt, um die über Analogeingänge gemessenen Spannungen berechnen zu können. Dann wird die Batteriespannung im 20-V-Bereich gemessen, um entscheiden zu können, welcher Bereich verwendet werden soll. Dann werden sowohl die Batteriespannung als auch die Widerstandsspannung berechnet. Batteriespannungsmessungen nutzen die DividerInput-Klasse, die über Methoden zum Lesen und zur Spannung verfügt, um den Rohwert oder die berechnete Spannung des fraglichen Analogeingangs zu liefern.

Vorgehensweise zur Auswahl der verwendeten Werte

In der Funktion selectUsedValues wird die Anzahl der Zellen geschätzt und die oberen und unteren Grenzwerte für die Batterie eingestellt, die beim Entladevorgang verwendet werden sollen. Auch die Messung wird als gestartet markiert. Die Grenzen für diesen Vorgang werden am Anfang des als globale Variablen gesetzt. Sie könnten jedoch konstant sein, und sie könnten auch innerhalb der Prozedur definiert werden, da sie nicht global verwendet werden. Aber hey es gibt immer was zu verbessern:)

Vorgehensweise zur Berechnung der Batteriekapazität

Die Entladefunktion sorgt dafür, dass die Kapazität des Akkus tatsächlich gezählt wird. Als Parameter erhält er die untere und obere Grenze der Spannungen für die zu testende Batterie. Der hohe Wert wird in dieser Version nicht verwendet, aber der niedrige Wert wird verwendet, um zu entscheiden, wann der Test beendet werden soll. Am Anfang der Funktion wird die Anzahl der zu verwendenden Widerstände mit einer dafür erstellten Funktion ermittelt. Die Funktion gibt die Anzahl der Widerstände zurück und startet gleichzeitig die Entladung und setzt den Zähler zurück. Dann werden die Spannungen gemessen und zusammen mit dem bekannten Widerstandswert verwendet, um den Strom zu berechnen. Jetzt, da wir Spannung und Strom kennen und die Zeit seit der letzten Messung, können wir die Kapazität berechnen. Am Ende des Entladevorgangs wird die Batteriespannung mit dem unteren Grenzwert verglichen und wenn der Grenzwert unterschritten wird, stoppt die Entladephase, die Mosfets werden geschlossen und die Messung wird als bereit gekennzeichnet.

Vorgehensweise zum Ermitteln der Anzahl der zu verwendenden Widerstände

In der Funktion selectNumOfResistors wird ein einfacher Vergleich der Spannung mit voreingestellten Werten durchgeführt und als Ergebnis die Anzahl der zu verwendenden Widerstände festgelegt. Der entsprechende Mosfet wird geöffnet, um einige der Widerstände zu überspringen. Die Spannungsschlitze sind so gewählt, dass der maximale Strom während der Entladung jederzeit etwas über 600mA (2V/3,3Ohm=606mA) bleibt. Die Funktion gibt die Anzahl der verwendeten Widerstände zurück. Da der Lüfter von der gleichen Leitung wie der erste Mosfet angetrieben wird, muss er bei der Entladung immer geöffnet werden.

Schritt 5: Kalibrieren des Messgeräts

Kalibrieren des Messgeräts
Kalibrieren des Messgeräts

Um das Messgerät kalibrieren zu lassen, habe ich eine weitere App erstellt (angehängt). Es verwendet die gleiche Hardware. Am Anfang sind die Korrekturteilerwerte alle auf 1000 eingestellt.

const int divCorrectionB10V = 1000; // Teilerkorrekturmultiplikator im Bereich 10V const int divCorrectionR10V = 1000; // Teilerkorrekturmultiplikator im Bereich 10V const int divCorrectionB20V = 1000; // Teilerkorrekturmultiplikator im Bereich 20V const int divCorrectionR20V = 1000; // Teilerkorrekturmultiplikator im Bereich 20V

in der Funktion readVcc() hängt die resultierende Vcc-Spannung vom Setzen des Wertes in der letzten Zeile der Funktion vor der Rückkehr ab. Normalerweise findet man im Internet einen Wert von 1126400L für die Berechnung. Mir ist aufgefallen, dass das Ergebnis nicht stimmt.

Kalibriervorgang:

  1. Laden Sie die Mess-App auf Arduino.
  2. Sie können im Arduino (und im seriellen Ausgang und ob sich der Lüfter dreht) sehen, ob die Last eingeschaltet ist. Wenn dies der Fall ist, drehen Sie den Batterietyp-Wahlschalter.
  3. Passen Sie den Wert in readuVCC() an, um ein korrektes Ergebnis zu erhalten. Nehmen Sie den Wert, den die Funktion liefert (in Millivolt) und dividieren Sie den langen Wert damit. Sie erhalten den Rohwert der internen Referenz. Messen Sie nun mit einem Multimeter die tatsächliche Versorgungsspannung in Millivolt und multiplizieren Sie diese mit dem zuvor berechneten Wert und Sie erhalten den neuen korrigierten Long-Wert. In meinem Fall gab die Funktion 5288 mV zurück, wenn die tatsächliche Vcc 5,14 V betrug. Berechnung von 1126400/5288*5140=1094874, die ich durch Versuch verfeinert habe. Fügen Sie den neuen Wert in den Code ein und laden Sie ihn erneut auf Arduino hoch.
  4. Die Einstellung der Korrekturwerte des analogen Eingangswiderstandsteilers erfolgt unter Verwendung einer einstellbaren Stromquelle, die verwendet wird, um den Eingang des Messgeräts zu speisen. Am einfachsten ist es, Spannungen von 1V bis 20V in 1V-Schritten zu verwenden und die Ergebnisse in einer Tabelle aufzuzeichnen. In der Tabelle wird der Durchschnitt genommen. Die korrigierten Werte werden mit folgender Formel berechnet: „ raw_value*range*Vcc/Vin “wobei raw_value der Wert in 10VdivB, 10VdivR, 20VdivB oder 20VdivR ist, je nachdem welche Korrektur berechnet werden soll.

Sehen Sie sich die Tabelle an, wie es für mich aussah. Die Durchschnittswerte werden nur aus den Werten berechnet, die im Bereich liegen sollen, und diese Werte werden dann in der tatsächlichen Zähler-App eingestellt.

So was

const int divCorrectionB10V = 998; // Teilerkorrekturteiler im Bereich 10V const int divCorrectionR10V = 1022; // Teilerkorrekturteiler im Bereich 10V const int divCorrectionB20V = 1044; // Teilerkorrekturteiler im Bereich 20V const int divCorrectionR20V = 1045; // Teilerkorrekturteiler im Bereich 20V

Die Einstellung des Widerstandswerts kann durch Anlegen einer Spannung an den Eingang (dh 2 V), Schalten des Fledermausschalters (um die Last zu erhalten) und Messen des eingehenden Stroms und der Spannung am ersten Widerstand und Teilen der Spannung durch den Strom erfolgen. Für mich gab 2V 607 mA, was 2 / 0,607 = 3,2948 Ohm ergibt, die ich auf 3,295 Ohm gerundet habe. Nun ist also die Kalibrierung abgeschlossen.

Schritt 6: Letzter HINWEIS

Eine wichtige Anmerkung hier. Es ist unbedingt erforderlich, dass alle Verbindungen von der Batterie zu den Widerständen in einwandfreiem Zustand sind. Ich hatte eine schlechte Verbindung und fragte mich, warum ich 0,3 V weniger Volt im Widerstandsgitter als an der Batterie hatte. Dadurch endete der Messvorgang fast sofort mit 1,2V NiCd Zellen, da die untere Grenze von 0,95V schnell erreicht war.

Empfohlen: