Batteriemanagement-System (BMS) mit Arduino selbst bauen

  • wend .. und was spricht gegen einen einzigen ADS1115.. 16bit bei läppischen 4s werden dir wohl für eine Differentialmessung ausreichen.. das enspricht einer genaugigkeitvon 0.00024V .. reicht das nicht? das wäre 15mal genauer als wenn du jede zelle einzeln über den 10bit ADC des arduino mißt.. einfacher gehts wohl kaum ;):)


    Wennst es trennen willst nimmst 4 ADS1013 + 4 ADUM1250

  • Hallo wend,


    mein letzter Vorschlag war ganz sicher nicht der große Wurf, da die Messgenauigkeit natürlich mit der Anzahl der Zellen abnimmt.


    Mit dem Eigenbau eines BMS hatte ich mich bisher nicht beschäftigt, deshalb muss ich mich auch erst mal an das Thema herantasten.

    Vielleicht ist ja der nächste Versuch schon brauchbarer: BMS.pdf


    Die Schaltung ist mit einem Arduino Nano bis zu S8 verwendbar (8 analoge Eingänge), wobei dann die Betriebsspannung für die OVs vergrößert werden muss.

    Ein Balancing ist auch realisiert.

    Bei <S8 könnte der freie Analog-Eingang für eine Strom-Überwachung verwendet werden.


  • Hier ist ein Foto von meinem Aufbau mit Relais, flying Capacitor, für 3s Packs. Vorteil: Keine gemeinsame Masse, Nachteile: langsam, es klickert, Stromverbrauch der Relais 40mA


    Nochmal, warum ich keine gemeinsame Masse wil: Ich habe ein Balancerboard zusätzlich angeschlossen, und das hat z.B. einen gemeinsamen +Pol, also + von höchster Zelle haengt an +10.8V. Die Masse wird bei Bedarf von einem MOSFET abgetrennt, damit kein Strom mehr fliessen kann. Wenn ich bei meiner Messung nun eine gemeinsame Masse habe, dann würde ich ja nix mehr messen oder schlimmer, das Balancer- und Protectionboard funktioniert nicht mehr richtig, oder wird gestört.


    Im Bild: Der 6-Polige Stecker geht zum Arduin0 (5V,D1,D2,D3,A0,GND) und der 4-Polige zum 3s Batteriepack (0V,3.6V, 7.2V, 10.8V).


    Der Flying Capacitor ist links im Bild zu sehen. Er ist mir 10 µF etwas gross dimensioniert. Aber ich hatte gerade keinen besseren in der Bastelkiste. Die Messzeit ist damit 5 Sekunden pro Zelle, dann hat man eine Meßgenauigkeit von 0.5mV. Das finde ich schonmal nicht schlecht.


    Übrigens sind immer maximal 2 Relais angezogen, wenn gemessen wird, ansonsten stehen sie alle in Ruhe. Das dürfte auch für längere Ketten gelten. Die Ruheposition der Relais leitet immer weiter zum nächsten Relais und wenn es angezogen ist, dann schaltet es auf "seine" Zelle. Nur das letzte Relais kann in der Ruhestellung auf die letzte Zelle schalten. Ich hoffe, es ist verständlich...

  • ;) Du hast bei 4s. Differentiellen messung zur basis 4 plus abgriffe und eine basis masse so wie du sie auch beim normalen Verbraucher an der zell Serie hast. Schließt du leicht nix an?? ;) Deswegen find ich das mit verlaub sehr amüsant was du hier Schaltungstechnisch konstruierst das hat rein garnix mit den balancern zu tun. Und beeinflusst die auch nicht.


    Lg

  • @petzibaer: Die Masse der Verbraucher ist nicht(!) am Minuspol des unteren Batteriepacks angeschlossen. Die Masse geht in das Balancer-Board (P-) und wenn man auf der Platine genau guckt, dann sieht man, dass P- nicht mit dem Minus des ersten Packs verbunden ist, sondern über einen Messhunt und einen MOSFET (zum Trennen). P+ hingegen ist auf der Platine direkt mit dem Pluspol des obersten Akkupacks verbunden.

    Warum, weiss ich nicht, aber das ist halt so bei dem Board. Irgendwo muss das Balancer-Board ja den Strom messen und bei Bedarf (Überstrom, Übertempertur etc.) Unterbrechen.


    Es ist so eines:

    https://www.ebay.de/itm/3S-12V…ction-Board-/192048209292

  • Najo logosch geht P- der zentrale minus anschluss (vermutlich weil ich hab das bord nicht gemessen) über den n channel fetrenner zum zentralen minus anschlus des Batterpacks, dort wird ja zentral getrennt. Das bedeutet aber nicht das du hier am zentralen anschlus des Batteriepacks keine spannungsmessung abgreifen kannst.. Das passiert dann vor oder nach dem fet je nachdem ob du spannungs messung mit trennen lassen willst bei bms abschaltung oder nicht.. Den adc mit i2c kannst ja wunderbar galvanisch auskoppeln. Außerdem ist das kein reines balancer Board sondern ein komplettes bms .. Ich weiß jetzt echt nicht ganz wo du ein problem siehst weil ich seh hier keines.


    Wenn ich dir einen tip geben darf, ich würde mich mal ein bisserl mehr mit dem warum und wieso funktioniert was, und was tut was auf dem board auseindersetzen.. Sprich schaltplan des boards mit komponenten nachzeichnen. Dann tust dir auch in Zukunft leichter die messtechnik und schaltungen dahinter zu verstehen, damit lernt man am meisten für sich selbst dazu.


    Lg

  • So, hier das Ergebnis, für diejenigen, die das interessiert. Messung der Zellenspannungen im Verlauf eines Solartages mit der Schaltung mit dem fliegenden Kondensator und 3 Relais. Gesteuert vom Arduino. Man erkennt, dass das Akkupack "Cell 1" irgendwie auffällig ist. (Höherer Innenwiderstand? Kleinere Kapazität? Probleme mit Kabeln?) Jedenfalls konnte ich das Problem bisher nicht richtig zuordnen, nun, mit der Schaltung, geht das. Also bin ich erstmal zufrieden.

  • Bin dabei, das Problem mit Cell 1 zu finden. Hab erstmal die Zellen 1 und 2 vertauscht, um zu verifizieren, dass es nicht an der Meeselektronik liegt. Liegt es nicht, nun ist Cell 2 die auffaellige. Hier zeigt sich wieder ein schönes Feature der Flying-Capacitor Methode: Man hat keine Probleme mit genauer Kalibration, denn die Messung aller Zellen relativ zueinander ist immer supergenau, hat denselben Kalibrationfaktor. Beim Spannungsteiler wäre das schon anders (Toleranz der Widerstände).


    Nun zu den Kurven: Man sieht zunächst, dass die Spannungsdifferenzen um so größer werden, je höher der Strom aus oder in die Zelle ist. Das deutet auf einen Innenwiderstand oder schlechte Kontakte hin. An der unterschiedlichen Kapazität sollte es eigentlich nicht liegen. Trotzedem muss ich dieses Akkupack mal auseinandernehmen und genau untersuchen.


    Weiterhin beobachte ich, was mein Balancer-Platinchen so macht:


    Es läßt einzelne Zellenspannungen von > 4.2V zu, wenn Strom fliesst, bringt nach einer Weile aber die Spannungen zusammen, und zwar auf der Abfallenden Ladestromkurve, wenn der Ladezustand sich also "voll" nähert. Das ganze dauert aber mehrere Stunden und wenn dann ein Entladestrom fliesst, ist die Spannungsdifferenz (nun in die andere Richtung) wieder da. Hm.


    Ich vermute also, dass das BMS/Balancer-Platinchen durchaus den Strom berücksichtigt, denn sonst muesste es doch den Akku bei > 4.2V schon trennen. Vielleicht macht es also eine Innenwiderstandsmessung. Interessant.


    Weitere Beobachtungen folgen. (Oder gibt es etwa eine genaue Funktionsbeschreibung zu dem 25A 3s BMS (aus China), was ich da verwende?)


    Mir fällt noch ein, dass natuerlich die Kalibration der Spannung nicht 100% stimmen muss, also ist vielleicht angezeigte 4.3V in Wahrheit nur 4.2V. das muesste ich nochmal abgeleichen....

  • Ich bin immer mehr angetan von der Relais-Lösung. Vor allem, weil mit nur einem weiteren relais auch noch ein Balancing realisiert werden kann. Anstelle von auf den Mess-Kondensator, wird dann die Zelle mit der höchsten Spannung bei Bedarf für ein paar Sekunden auf eine Last (kleine 5V Glühlampe) geschaltet. Also Last könnte sogar noch was sinnvolles betrieben werden, z.B. ein DC-DC-Wandler, der dann 5V USB Ladefunktion zur Verfügung stellt.


    Das Balancing kann dann also nicht nur beim Laden des Akkupacks geschehen, sondern auch zwischendurch, z.B. immer dann, wenn die Zellspannung der Zelle mit der größten Spannung um mehr als 0.1V vom Mittelwert abweicht. Noch besser wäre es natürlich, wenn die Ladung von der höchsten Zelle zur niedrigsten übertragen würde. Das ginge, wenn man anstelle der Last einfach eine einzelne 18650 Zelle (oder ein 1s-Pack) dranhängt, die die Ladung aufnimmt und wieder abgibt. So ginge kaum was verloren.


    Ich möchte behaupten, selbst bei einem grossen Akku z.B. 14s100p, waere das noch eine gute Lösung.

    Man baucht dann 15 Relais, einen Arduino, und ein 1s-Akkupack. Der Rest ist software. Stromverbrauch: zwischen 40mA@6V (nur Arduino) und 120mA@6V (Arduino + Relais beim messen oder balancen). Das ganze bleibt also bi <1W für das gesamte system. Ich denke, so ein Batrium-BMS bracuht in der Summe mehr.