Der fliegende ADC (Flying ADC BMS)

Durch den Open Source BMS Thread motiviert möchte ich mal eine weitere BMS Variante vorstellen.

Ich nenne es Flying ADC BMS, da ein 1-Kanal ADC quasi schwimmend gelagert hinter einem diskret aufgebauten Multiplexer sitzt.

https://openinverter.org/wiki/16-cell_BMS

Das dürfte ungefähr mein 10. BMS Design sein, also viele "Lessons learned" aus den Vorprojekten.

Großes Augenmerk habe ich deswegen auf 0 Standby-Verbrauch gelegt sowie auf symmetrische Belastung der Zellen. Nicht, dass das BMS mehr Schaden als Nutzen anrichtet, wie in so manchem E-Scooter BMS...

Das Projekt ist so halb Open Source. Die Software ist GPL v3 und hier gehostet: https://github.com/jsphuebner/FlyingAdcBms . Die Hardware habe ich erstmal nicht veröffentlicht, da ich einen kleinen Shop betreibe und es relativ schnell Trittbrettfahrer auf den Plan ruft, wenn man quasi nur bei JLCPCB auf Bestellen klicken muss...

Das Design vereint High Level (Master) und Lowlevel (Zellmessung) auf einer Platine. Wenn man eh nur 16 Zellen hat, langt eine Platine. Wenn es mehr werden, kann man theoretisch beliebig kaskadieren (momentan sind 8 Platinen insgesamt möglich). Es gibt eine Enable-Kette und das erste Modul in der Kette ist immer Master.

Es gibt lediglich CAN Kommunikation, keine Relais-Ausgänge oder ähnliches. Es wird fast die gesamte übliche Palette an Werten geliefert, also Stromlimits für Laden und Entladen, SoC, SoH, Min/Max/Avg/Delta. Innenwiderstand fehlt noch.

Die Zellspannungen werden mit einem MCP3421 gemessen, der bis zu 18 Bit auflösen kann (dann aber seeehr langsam ist - also 14 Bit).

Da dieser mit einen DC/DC Wandler galvanisch getrennt ist, ergab sich quasi im Vorbeigehen ein ganz nettes Feature: der Strom des DC/DC-Wandlers kann in die gerade eingemuxte Zelle geleitet werden. So muss man z.B. nicht 95 Zellen entladen, weil eine 20 mV zu tief ist.

Das Balancing, ist so wie bei BEV OEMs äußerst minimalistisch ausgelegt. Gute Zellen driften einfach kaum auseinander. Eine schwache Zelle kann mit ca. 50 mA nachgeladen werden und eine zu hohe mit ca. 100 mA entladen werden. Wohlgemerkt nacheinander, weil ja von 16 immer nur eine verbunden ist.

Im ausgeschalteten Zustand ist das BMS Verpolungssicher bis 200V, da ja zunächst mal keine Spannung an den FETs vorbeikommt. Beim Einschalten unternehme ich den Versuch, Überspannung und Verpolung rechtzeitig zu erkennen, bevor was in Rauch aufgeht, aber da stehen destruktive Tests noch aus.

Anbei noch der Schaltplan. Verbesserungsvorschläge immer willkommen, auch an der Software
schematic.pdf (221,8 KB)

2 „Gefällt mir“

Besten Dank für die Schaltung. Alte Schule mit dem F103. Aber eher ein Balancer als ein komplettes BMS. Also kein Laststrom über die Platine, keine Strommessung, kein Coulomb Zähler usw. aber auch keine HV Trennung der Kommunikation?

Wie sind denn deine Erfahrungen mit dem Segger Direktanschluss auf der Platine? Hab ich mich bislang weder bei Jtag noch bei SWD getraut. Wieviel Steckzyklen hält der teure Nadeladapter?

Cool danke, wie gesagt echt ne coole idee mit dem ADC :+1:

Was waren denn so die lessions learned aus den vorherigen Versuchen? :grin:

Sehr ausgeklügelte Schaltung... Danke für das Teilen der schaltplans. Wusste gar nicht dass die Chinesen schon im ic-gehäuse integrierte dc/dc-wandler Isolator Kombis anbieten (CA-IS2631HA).. Du brauchst die 5 Volt an dessen vddp Pin damit du auf der zellseite des Isolators genügend zell-ladeleistung bereitstellen kannst? 3,3 Volt an diesem Pin würden dafür nicht genügen?
Dann könnte man gleich anstelle des 5 Volt Schaltnetzteil ein 3,3 Volt Schaltnetzteile bauen... Oder braucht der stromsensor zwingend 5v?
Zum Betrieb der ganzen Schaltung braucht es 12 Volt und das ena_in Signal. Über dieses Signal wird dann auch die Adressierung mehrerer kaskadierten BMs gemacht?

Strommessung ist off-board also irgendein 5V Stromsensor oder über CAN angebunden, z.B. ISA. HV-Trennung könnten die 16 Optokoppler sein :wink:

Den Nadeladapter habe ich seit ein paar Jahren und habe diverse 100 Platinen damit programmiert. Bisher zeigt er noch keine Ermüdung. Ist ein TagConnect TC2030.

Mit dem IS2631 ist noch ein Experiment. Aktuell verkaufe ich noch Boards mit Durchsteck 5V/5V Wandler. Aber die Kriechdistanz des eingesetzten Modells sind mir zu klein. Wenn da Feuchtigkeit hinzukommt gibt es vermutlich Isofehler.
Mit den 5V hast du genau richtig erkannt. Wird schwer eine Zelle mit 3,7V mit 3,3V zu laden :wink: Und 3v3 Stromsensoren sind denke ich auch rar.

Das ena-Signal ist 12V beim ersten Modul und 3,3V bei den nachgeschalteten. So geht die Master-Erkennung. Adressierung geht dann per enable ein, Adresse senden. Modul n-1 setzt Adresse von Modul n.

Lessons learned, puh die Liste wird unvollständig

  1. Das BMS soll nicht mehr schaden als nutzen. Klingt selbstverständlich, ist es aber nicht. Daraus folgt am besten gar keine Belastung der Zellen im Ruhezustand und wenn, dann schon gar nicht asymmetrisch.
  2. 12-24 Zellen pro Board. Das drückt die Systemkosten. Bei zu wenigen Zellen pro Board steigt der Verkabelungsaufwand für die Kommunikation, bei zu vielen der für die Zellkabel
  3. Keine riesigen Balancingwiderstände. Hat man Anfangs so gemacht um noch beim Laden die oberen Zellen runter zu drücken. Macht kein OEM so. Einfach kontinuierlich mit wenigen mA balancen
  4. Keine Experimente beim Kommunikationsprotokoll. Hatte da mal was mit Bitlängenkodierung gebastelt. Normales UART war dann schneller und zuverlässiger. Und CAN ist natürlich nochmal besser
  5. Keine Klemm- oder Schraubverbinder auf der Zellseite. Weil wo soll man die abgeschraubten Kabel ablegen?
  6. Kalibrierung einfach halten. Ein Design krankte daran, dass die Kalibrierung nach der Fertigung zu lange gedauert hätte.

Ich bin noch nicht sicher wie die SoC Erkennung bei LFP damit hinhaut. Die Auflösung ist zwar 0,25 mV aber auch nur so gut wie die Kalibrierung. Und bei LFP dauert es ja auch ewig bis die Zellspannung stationär wird. So 1-2 Stunden.

EDIT: noch zu 1: eine Vorversion hatte 16 N-Kanal FETs die dann über variierende Spannungsteiler die PFETs geschaltet haben. Alles so im Bereich 10-47k. Das hatte aber zur Folge, dass die 1. Zelle immer den Strom durch alle 16 Teiler treibt, die 2. durch 15 und die 16. nur durch einen. Über mehrere Wochen hat das dann zu einem Disbalance um die 50 mV geführt! Natürlich lässt sich das mit eingeschaltetem Balancing kompensieren, aber irgendwie finde ich das nicht akzeptabel.

1 „Gefällt mir“