leider finde ich den "alten" BMS-Thread in dem ich von meinem Plan, selbst so ein BMS System aufzubauen, geschrieben hatte, nicht mehr. Daher gibts dazu jetzt ein neues Vorstellungs-Thema.
Software wird noch veröffentlicht, aktuell bin ich nicht sicher, dass da nicht noch irgendwo schützenswerte Daten drin sind.
Fußnoten und Quellen am Ende des Beitrages.
Vorbemerkungen zum System und den Ideen dahinter:
* Das BMS, das ich schon Ende 2019 im Sinn hatte, muss flexibel sein, ich will nicht für jedes System ein komplett neues Produkt aufbauen, dazu fehlt mir die Zeit und Motivation
* So genannte "Hochvolt" Akkus sollen unterstützt werden, auch wenn ich das Kunstwort nicht mag.
* Daraus folgt, dass die Kommunikation mit dem Akku selbst irgendwie galvanisch isoliert sein muss.
* Und aus den beiden vorherigen Anforderungen folgt, dass das BMS als Master-Slave(n) System aufgebaut wird. Ein eher dummes Platinchen im Akkumodul und ein Master der mit Strom und Peitsche dafür sorgt, dass die Akkumodule arbeiten.
* Nomenklatur: Verwendung des Vorhandenen, siehe [2]
* Kein "active balancing", da halte ich aus Gesichtspunkten der Zuverlässigkeit und hohen Komplexität nichts von
* Wechselrichter: wollte ich 2019 noch selber bauen, aber mangels Zeit und wegen des recht guten Preises (ca 2500€) wurde dann ein Solax X3 15kW Gerät angeschafft. Der Kasten kann Solar in an zwei Strings, Akku bis iwas 800V (muhaha) und Notstrom bis 15kW dauerhaft. sollte also knapp langen, wenn die Drehbank aus bleibt.

Bei der Entwicklung oft benutzte Programme:
* Schaltplan und Layout: KiCAD
* ESP32 Software: VSCode und Platformio mit dem ESP IDF
* STM32 Software: Eclipse, CubeIDE, Editor
* Kubuntu (aktuell), ich kann kein Windows mehr.
* SmartGit
Da an meiner Arbeitsstelle schon ein Open Source BMS[1] vorhanden ist, dachte ich, warum nicht einfach das nehmen und fertig ist die Sache.
Dass es nicht so einfach ist, stellte sich leider recht zügig ein.

Idee und Aufbau des ersten Akkusystems:
Es trug sich zu, dass ich von einem sehr guten Freund einen recht stattlichen Akku zur Verfügung gestellt bekommen habe, der bei ihm in einem Hausakku verbaut war, der leider ohne Serververbindung die beleidigte Leberwurst spielt und aus geht. Nachdem die Herstellerfirma pleite gemacht hatte, wurde dieser Fakt zum Todesurteil für den Hausspeicher.

uppsie. Wer hätte es ahnen können, dass connected Systeme und Zuverlässigkeit nicht in einen Topf gehören.

Die Zellen des Akkus sind von SAFT, Modell VL45E LiFePo4 (wie durch einfaches Zerlegen herauszufinden war...) und sind prinzipiell sinnvoll aufgebaut.
Prinzipiell. Da es sich um ein Franzosenprodukt handelt, muss irgendwo ein Pferdefuß sein. Doku gibts schon mal keine, hätte mich auch gewundert. Beim Messen der Zellen stellte sich noch eine andere, leicht störende Sache heraus: Die kleinen Slaveboards versorgen sich aus den ersten drei Zellen. Alter. Also raus damit und die Akkus erst mal weggestellt.
Damit war es jedoch final vom Tisch, das BMS weiterzuverwenden. Jedes Modul besteht aus 14 Zellen (14s1p) und für vernünftige Spannung werden die vorhandenen zehn Module zu einem String in Serie zusammengeschaltet. Nach kurzer Suche bei den vom foxBMS unterstützten BMS Slave Controllern ergab sich direkt, dass es der MAXIM (damals noch NICHT Analog Devices) MAX17853[3] werden wird. Er hat genug Eingänge für bis zu 14s und die von mir gewünschten Features (Kommunikation Balancing, Automotive Zulassungen)
Als Kommunikator braucht man dann noch den MAX17841[4], der dann von SPI auf den proprietären MAXIM-ISO Kackbus übersetzt. Der kann dann schick mit Pulstrafos isoliert werden.
Ein Modul schaut offen in etwa so aus. Die grüne Platine unten ist der Zellverbinder und dick mit Kupferblech aufgedoppelt. Die Packsicherung hat 250A, der Stecker kann dauerhaft 50A ab. Hervorragender Pfusch.



Die Platinen gibts in zwei Revisionen, weil natürlich in rev1 ein mittelschwerer Fehler (eine der DREI Vccs vom Chip nicht angeschlossen...) war und das Modul so nicht laufen wollte.
Egal, Chips kann man umlöten und Platinen sind günstig. Der Stecker J3 wurde am Akku rausgemessen und von Matt messerscharf erkannt (danke dafür!). Inzwischen war es August 2020 und die Platinen konnten eingebaut werden. Für erste Tests des gesamten Strings (10 Module) wurde aus der Arbeit ein Maxim-Devboard entliehen und mal schnell in einem Wochenende konnten die Funktionen getestet werden. Module funktionieren, und ab damit ins Regal, denn die Zeit war knapp und mit Arbeit voll.
FastForward etwa ein Jahr:
Inzwischen war der Plan, wie der BMS Master aussehen soll halbwegs erstanden, er sollte auf einem ESP32 basieren und modular sein. Um das zu erfüllen, gibt es einerseits einen kleinen Stecker mit den übrigen 4-5 GPIOs des ESP32, nachdem alle nötigen Features abgefrühstückt sind und andererseits einen großen Stecker (IDC 10 Pin) für den sog. Treiber.
Der Treiber enthält den Kommunikator, Isolation und einen Eingang für eine ALERT Leitung, die wohl üblich ist, wenn man die "großen" BMS-Chips anschaut. Und eine LED, die der Master kontrollieren kann. Aktuell wird damit angezeigt, dass der Treiber initialisiert ist.


Bisschen Software. Das ist so ziemlich der für mich grausigste Teil. Ich kann nämlich nicht gut Software.

Ohne denselben Freund, von dem auch die Akkus sind, wäre ich damit einfach aufgeschmissen gewesen, Punkt Ende. Also auch an dieser Stelle meinen höchsten Dank dafür.

Weiterhin gibt es von einem anderen Freund noch die GUI für die BMS-Überwachung, Bilder kommen später im Post.
Was muss die Software tun und warum ist das nicht alles fertig?
Die Software steuert die Module an, kümmert sich ums Balancen, überwacht Spannungen und Ströme und steuert auch die Hauptschalter, Vorladung, Zwischenkreisentladung (wenn gewünscht, die Automotive-Leute sind da z.b. geil drauf.) und kommuniziert mit der Außenwelt. Klingt erst mal sehr überschaubar.
Klingt.. Das soll ja vernünftig sein und nicht wie vom Schinesen. Hier kommen wir nun zu dem, was das foxBMS ist und was es kann, bzw., auch was es nicht kann bzw. nicht ist.
Theoretisch kann man das foxBMS komplett nachbauen, die Quellen liegen auf dem entsprechenden github Repo bereit. Wenn man jedoch Anpassungen machen will, oder z.b. einen eigenen Master aufbauen muss, weil das Kleingeld für den "originalen" BMS Master einfach nicht locker genug sitzt, ist man etwas angeschmiert. Oder zumindest war ich das.
Was man weitestgehend verwenden kann, sind die Treiber, die mit den entsprechenden Kommunikatoren sprechen, die Spannungen messen und balancen (nach Fehlersuche im Code und entsprechendem Issue...). Was man allerdings effektiv komplett neu schreiben muss, sind die HAL Funktionen, mit denen bei mir die ESP32 Hardware abstrahiert und dem BMS zur Verfügung gestellt wird. Ich weiß nicht wie viele Tage wir da zu zweit gesessen sind, es hat auf jeden Fall gedauert und reichlich graue Haare erzeugt.
z.b der Anwendungscode, der das "Main" des BMS darstellt musste komplett von null auf geschrieben werden, da sich in der Quelle nichts passendes gezeigt hat. Auch die für mich notwendige Kommunikation mit der eigenen Messkarte (original wird ein Isabellenhütte IVT verwendet...) und mit dem Wechselrichter (daran arbeite ich gerade.) musste von Null auf erstellt werden.
Vieles ist auch noch offen, wie z.b. die Verwendung der RTC im ESP32, das Herunterfahren und saubere Neustarten bei 12V/24V Ausfall und SoH/SoC/SoE Ermittlung bzw. Batteriemodelle stehen aus.
Status Quo:
Nur überall Probleme, was GEHT denn nun an dem Haufen?
* Messung aller 140 Zellen, Ermittlung der kleinsten, größten, mittleren Spannung.
* Messung und korrekte Berechnung der Temperaturen. drei pro Modul, damit 30 gesamt
* Balancing nach eingestelltem Level mit einem von mir erdachten Algorithmus.
* Kommunikation mit der Außenwelt in beide Richtungen, d.h. CAN wird verstanden und auch gesendet.
* Kommunikation mit der Messkarte und Verwendung der ermittelten Werte im BMS-Zustandsautomaten
* Erste Anfänge mit der Wechselrichterkommunikation (Solax X3 15kW Maschine)
Geladen wird aktuell mit einem Labornetzgerät, damit sich der Akku ausbalancieren kann, durch das vorherige BMS und die lange Wartezeit waren Zellen teilweise unter 2V gefallen.. zis.
Das BMS selbst ist jetzt seit vor Weihnachten nur durch Softwareänderungen unterbrochen online und gleicht das Pack an. bei 45Ah und 100mA maximalem Balancingstrom dauert das etwas.
Als nächstes soll dann der Wechselrichter angeschlossen werden und ich muss schauen, ob die Kommunikation so tut, wie ich das will.
Ein Danke geht auch hier raus an "Araknid" vom secondlifestorage Forum, der das Protokoll des Solax-Wechselrichters herausgefunden hat.[5] Ich hab es dann nur noch nachimplementiert.
Hier noch ein paar Impressionen vom System:

Batteriesicherungen sind aktuell nur 10A oder sowas, später kommen da noch 50A hin. aber für die dünnen Käbelchen (1,5qmm) die da aktuell sind, passt das gut.

Am anderen Ende des Kabels:

und am PC sieht das dann so aus:

Die Daten die hier angezeigt werden, laufen über CAN vom BMS Master aus in ein Zwischenprojekt, den WLAN CAN Adapter, der ein Fork von diesem Projekt hier
https://github.com/Cellgalvano/ESP32_CANViewer
ist und dann weiter durchs Netzwerk bis zu jedem PC im Haus, der zuschauen will. das WLAN CAN Dingens ist mehrbenutzerfähig und spricht über einen TCP Socket mit der GUI. Man kann natürlich auch von der GUI aus CAN Pakete aussenden, um z.b. einen DC/DC Wandler oder sonstige Spielereien steuern zu können. Hauptsächlich bezieht sich der Fork darauf, dass ich das Ding ins ESP IDF umgezogen habe und den CAN isoliert (Ti ISO1044) und galvanisch getrennt versorgt habe, damit man auch in verseuchter Umgebung gefahrlos messen kann. Term ist schaltbar.
So viel dazu. Es gibt auch noch einen kleinen Film zu dem ganzen Aufbau, da muss ich mal schauen wo und ob und wie ich den hochladen kann.
Es geht jedenfalls voran. Langsam, aber irgendwie beständig.
In Planung und teilweiser Realisierung (es gibt ein Slaveboard v0.3) ist noch ein 48V System, aber das muss aktuell leider etwas warten, auch wenn ich gern weiter wäre.
Das Haus und dessen Stromversorgung geht vor. Da hängen immerhin Heizung und Futterversorgung mit dran.
Gruß,
Philipp

[1] https://foxbms.org/
[2] https://docs.foxbms.org/introduction/na ... tions.html
[3] https://www.analog.com/en/products/max17853.html
[4] https://www.analog.com/en/products/max17841b.html
[5] https://secondlifestorage.com/index.php ... ery.10747/