Anfänger sucht Hilfe bei Akku Überwachung mittels Arduino

  • Nabend,


    vor einiger Zeit habe ich schon in einem Thread um Hilfe zu einer KSQ gebeten, das hat so gut geklappt, dass ich nun vom Größenwahn getrieben auf meinem nächsten Problem sitzen geblieben bin.
    Hier der Thread: http://www.ledstyles.de/index.…-8-SOIC-EP-geh%C3%B6rt-o/
    Hier auch nocheinmal vielen DANK an alle Helfer!


    Ich hab lange überlegt ob ich da, das schon angeschnittene Problem nocheinmal aufgreife, mich aber für einen neuen Thread entschieden, denn völlig anderes Thema, das hier einzeln vlt auch Anderen helfen kann.


    Ich möchte für eine Akku betriebene Vielzwecklampe die Li-Po Zellen überwachen.
    Der Arduino kommt schon für die Soft-PWM zum Einsatz und langweilt sich.


    Der Akku besteht aus 3 Li-Po Zellen (ehemals RC-Car Akkus, wovon ich noch viele hier rumfliegen habe. Hersteller und Daten fehlen leider da nur noch die nackten Einzelzellen vorhanden sind).
    Also 3s1p mit ca 4500mAh. Ich habe die Zellen nun laaaange im Keller und auch mittlerweile einige Monate im Test.
    Problematik ist, dass die Zellen aufgrund des Zustandes etwas Differenzen beim entladen bilden. Ca. 0,21V.


    Jetzt habe ich mir überlegt, dass ich jede Zelle einzeln kontrollieren werde.
    Die Ladespannung ist max 4,2V und die Entladespannung werde ich bei 3V ansetzten.
    (Ich habe einige gekaufte Li-Pos da, dort steht in der Packungsbeilage dass die Entladespannung bei 2,7V liegt. Daher teste ich nun einfach die 3V aus, wenns der Akku nicht lange mitmacht, ists halt so, dann nehme ich halt die gekauften Li-Pos...)


    Ich habe mich die letzten 3 Wochen mit dem Arduino beschäftigt und habe echt nicht sooo viel Ahnung von der Software.
    Nach einer Woche Recherche habe ich gefühlt 1Milliarde Möglichkeiten gefunden einen Akku zu überwachen.
    Aber komme nicht auf meine individuelle Lösung.


    Ich möchte hier keine Lösung "ergaunern", aber vlt hat jemand hilfreiche Tipps und den Schubbs in die richtige Richtung.


    Meine Zellen haben also 4,2-3V wovon ich nun jede am Analogen Eingang vom Arduino verkabel. (Eigentlich nicht meine Traumlösung 4mal extra Kabel jeweils 1,5m bis zum Stecker zu legen... aber naja so hab ich schonmal den Balanceranschluss...) **(Brauch ich eigentlich jeweils + und - ?)
    Brauch ich jetzt noch einen Spannungsteiler auf ?,? V?
    (Aus Platzgründen möchte ich hinterher am liebsten nur den µC und nen paar widerstände und Kondensatoren in der Lampe haben)


    Jetzt würde ich natürlich auch gerne einen Automatismus mit einbauen, der bei diversen Spannungen abläuft und die Leistung reduziert. Nur habe ich ja drei verschiedene Spannungen. Jetzt soll bei der insgesamt tiefsten der Automatismus gestartet werden. Aber was ist, wenn nun bei reduzierter Leistung eine andere Zelle einbricht und jetzt plötzlich die tiefste Spannung an einem anderen Eingang anliegt? Kann ich das irgendwie "Global" regeln?
    Das Ganze darf natürlich auch den vorhanden Switch Case der PWM nicht beeinträchtigen.


    Das wäre erstmal meine erste Hauptproblematik, womit ich dann weiter probieren kann.
    Wenn jemand zufällig eine Idee oder vlt sogar selbst schon dieses Problem hatte wäre ich für Tipps sehr dankbar :thumbup:


    Im nachhinein möchte ich die Lampe diesen Winter noch nutzen und wenns fertig ist das Ganze vlt einmal als Komplettprojekt hier im Forum vorstellen, zumindest was die Hardware anbelangt um vlt anderen bei Ihren Projekten zu helfen.


    Gruß
    Fox

  • Die normalen Atmel AVR also das was normalerweise im Arduino drin ist messen über den ADC die Spannung nach Masse.
    Es würde also reichen, jeweils den Plus des Akkus zu messen über einen Spannungsteiler zu messen ( der erste Akku nach Masse geht evtl. ohne Spannungsteiler) und den Spannungswert auszurechnen.
    Danach kannst du den Wert mit deinem Limit vergleichen und dann entsprechende Aktionen auslösen.

  • Mehrere Zellen in Reihe, da wird's dann schon besch...eiden <X
    Da mußt du dann vom Balancer von jedem Abgriff messen und über die Differenzen ausrechnen, was jede Zelle an Spannung hat. Ich habe deshalb um Reihenschaltungen von LiPos bisher einen Bogen gemacht und meine Zellen parallelgeschaltet und bin lieber mit einem StepUp hoch. Das ist aber eher auf kleine bis mittlere Leistungen beschränkt.
    Ansonsten gibt es z.B. von Maxim Akku Management Controller. Das sind µC mit gut auflösenden AD-Wandlern (4096 Steps gegenüber 1024 beim Arduino), Coulomb Counter, die genau auf sowas spezialisiert sind und per I2C dann mit dem Arduino kommunizieren können.
    Selbst bei einer Zelle ist es nicht so ganz trivial, wenn man nicht nur lediglich bei Unterschreiten von 3V das Gerät abschalten will, sondern eine prozentuale Füllstandsanzeige realisieren will.
    Zum einen ist nicht sichergestellt, das jede Zellchemie die selbe Entladekurve besitzt, zum anderen hängt die Entladekurfe von der Art der Last ab. Ein ohmscher Widerstand verringert den aufgenommenen Strom bei fallender Spannung. Ein StepUp oder auch eine getaktete KSQ verhält sich aber genau andersherum, da sie die Leistung konstanthält steigt da sogar noch der Strom!
    Ich habe 1x den Akku "leergelutscht" und dabei eine Tabelle von Zeit und Spannung mitgschrieben. So konnte ich dann im Nachhinein unterschiedlichen Spannungswerten einen prozentualen Ladezustand zuordnen und auf einem 5x7 LCD Matrixdisplay jeweils ein dafür vordefiniertes Piktogramm anzeigen lassen.

  • Vielen Dank für die Antworten :)
    Ich denke in dem Fall greif ich dann wohl von jeder Zelle ab...


    gibt es was effizienteres als die Spannungsteiler variante via ohmischer widerstand? Macht es dann sinn jede Zelle auf die selbe Spannung zu bringen damit der verlust an jeder der Selbe ist?


    Wenn es nur die Widerstandmöglichkeit gibt werde ich aber wohl drauf verzichten und nur die erste Zelle zur Überwachung nutzen um den Akku möglichst effizient zu nutzen... dann muss ich halt das Risiko eingehen das die einzelnen Zellen unterschiedlich tief einbrechen...


    All zu viel Platz habe ich ja leider nicht daher werde ich mir eine weitere akku management Kontrolleinheit sparen... trotzdem Danke für den Hinweis. :)


    Gruß
    Fox

  • Spannungsteiler sind ein zweischneidiges Schwert. Vor allen Dingen, wenn man lange Pausen hat, wo das Gerät nicht benutzt/aufgeladen wird. Ein zu niederohmig dimensionierter Spannungsteiler saugt dir die Akkus leer - besonders, wenn der Controller das Gerät zwar wegen Unterspannung abschaltet, der Spannungsteiler aber weiter saugt. Zu hochohmig dimensioniert wird das Ganze aber störempfindlicher und die Belastung des Knotenpunktes durch den Analogeingang bringt dann signifikante Verfälschungen.
    Dieses Problem hatte ich schon mit einer Zelle. Ich habe mit einem Transistor eine Selbsthaltung mit Ein-Taster. Nur nach dem Transistor konnte ich auf Grund des Spannungsabfalles nicht messen.
    Der Teufel steckt meist im Detail ;)

  • Gegen Spannungsteiler habe ich eigneltich gar nichts, habe auch noch nie mit welchen gearbeitet^^
    aber es ist meiner Ansicht nach nicht der Idealfall wenn ich aus 2 Zellen des Akkus mehr verbrauch habe, als aus der dritten Zelle.


    Da habe ich dann zwar die Sicherheit, dass die schwächste Zelle auch den Automatismus auslöst. Aber leider auch einen Mehrverbrauch von (keine Ahnung, übern Daumen gepeilt 20mW vlt) pro Zelle. Und das auch, wenn die Lampen nicht an sind, sondern nur im Standby.


    Naja... je länger ich drüber nachdenke um so mehr könnte ich mich damit auch anfreunden :D

  • Hey Leute :)


    ich probier gerade ein wenig rum, mit der Spannungsausleserei.


    Mein Problem ist jetzt dass ich natürlich wie erwartet eine differenz auslese.
    Das Multimeter sagt meine Zelle hat gerade 3,93V
    Mein Arduino sagt dem SerialPort dass er 4,01V misst.
    soweit so gut... könnte ich mit leben, kann man ja verrechnen...
    aaaaber jetzt ist die Abweichung spannungsabhängig proportional oder in verschiedenen faktoren...
    das heißt, dass bei Multimeterwert 3,89V - 3,92V beim Arduino gemessen wird.
    Also die Abweichung geringer wird.


    mein Programmteil sieht so aus:

    Code
    void setup() {               
    Serial.begin(9600);                                                // Serielle Kommunikation auf 9600 bits pro sek festlegen
    }
    void loop()
    { 
      int MessWert = analogRead(A0);                              // AnalogenPin A0 auslesen
      float voltage = MessWert * (5.0 / 1023.0);   // gelesener Wert in Spannung umwandeln
      Serial.println(voltage);                              // Ergebnis in den seriellen Port ausgeben


    auch wenn ich den Faktor anpasse bleibt das Problem bestehen...
    kennt jemand das Problem und ggf eine Abhilfe?

  • okay... hat sich vorerst erledigt...
    habe vorhin mal die Referenzspannung auf default gesetzt. einfach nur um sicher zu gehen dass auch auch so ist.

    Code
    analogReference(DEFAULT);


    jetzt zeigt der SerielMonitor nur noch 5V an, auch wenn nichts angeschlossen ist...
    und der µC wird warm.


    habe jetzt schon vieles versucht.. aber der scheint mir hin zu sein -.-


    PS:
    Welche Spannung kann der analoge Eingang eines Atmega328p vertragen? Im Datenblatt kann ich es nicht erkennen...
    Wenn dieser nur 3,3v kann, dann hab ich den Fehler gefunden ;)


    Wäre aber fürs nächste mal interessant zu wissen...


    Gruß
    Fox