Forum: Mikrocontroller und Digitale Elektronik BMS selber programmieren


von Christian R. (ralechris)


Lesenswert?

Hallo zusammen, für meine Techniker-Arbeit soll ich ein E-Bike selbst 
zusammen bauen.
Ein fertiges BMS habe ich gefunden den ich mit meinem Akku 
(Lithium-ionen) verbinden wollte. Damit ich jede Zelle einzeln 
kontrollieren kann. Allerdings genügt das meinem Lehrer nicht. Da es ein 
fertiges Bauteil ist und ich nicht an die Programmierung ran komme. Das 
BMS ist parametrierbar aber nicht programmierbar. Jetzt ist meine Frage, 
ob mir jemand einen Tipp hat / mit helfen kann?
Gibt es einen Microcontroller den ich als bms verwenden kann. Indem ich 
dann jede einzelne Zelle von meinem Akku 36 Volt verbinden kann (löten) 
und selbst programmieren kann (Programmiersprache: C++)
Wenn ja, hat mir jemand Beispiele der Programmierung oder Schaltpläne?

von w.n. (Gast)


Lesenswert?

Hi,
ich hab mal mit dem BQ76920 von TI ein BMS gebaut. Da gibt es auch Typen 
für mehr Zellen: BQ76930, BQ76940. Das sind eigentlich analog Frontends 
mit Vermessung und Überwachung der Akkus, können aber auch Widerstände 
zur Balancierung zuschalten. Die Teile kommunizieren über I2C. Ich habe 
einen Attiny4313 mit der Überwachung beauftragt.
Schaltpläne gibt es sicher in der Doku von einem zugehörigen Eval-Board. 
Der Balancing-Algorithmus ist bei mir ganz einfach: sobald eine Zelle 
mit der Spannung nach oben ausreißt, schalte ein Widerstand zu. Wenn 
eine Zelle zu wenig Spannung hat, werden die anderen etwas entladen.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

Die Spannung der Zellen kannst Du messen, indem DU einen Microcontroller 
mit ausreichend vielen 12bit A/D Wandlern findest. Die A/D Wandler sind 
auf der Masse-Seite mit dem negativen Pol der "letzten" Batterie in der 
Kette verbunden. Jeder Pluspol geht dann über einen Spannungsteiler an 
jeweils einen A/D Eingang.

Bedenke dabei, das bei 3.2V Batterien, die erste Zelle 3.2V liefert, die 
2. Zelle liefert 6.4V plus die Abweichung der ersten. Die dritte Zelle 
liefert 9.6V plus die Abweichung der ersten plus die Abweichung der 
zweiten Zelle. Nach sechs Zellen wird es dann langsam ungenau, weil in 
deinen 12 bit Messbereich nur ein sechstel des Wertes tatsächlich aus 
der gemessenen Zelle kommt.

So kannst DU zumindest schon mal was messen. Managen kannst Du aber noch 
nichts.

Ein echtes BMS nutzt pro Zelle einen eigenen Microcontroller. Die 
Controller werden über einen Bus verlinkt, der aber potentialfrei sein 
muss, da ja jede Zelle dem Microcontroller ein eignes Massepotential 
liefert, also per Übertrager oder Optokoppler und bidirektional.

Ein Hauptkontroller entscheidet dann, ob ein Balancing durchgeführt 
werden muss. Da gibt es die einfache und die komplizierte Lösung. Die 
einfache Lösung schaltet einen Widerstand auf einzelne Zellen, so dass 
diese langsamer lädt und die anderen Zellen aufholen können. Das geht 
und wird meisst auch so gemacht, weil es billig ist, aber es erzeugt 
Wärme und verschwendet Ladeenergie.

Besser ist, wenn man die Energie der zu hoch geladenen Zelle nimmt und 
damit die zu niedrig geladene Zelle nachlädt. Dafür müsste man die in 
Reihe geschalteten Zellen auftrenne, was aber sehr aufwändig wäre, denn 
durch den Strang fliesst ja u.U. der volle Fahrstrom. Stattdessen kann 
man über eine Art Bus mit einer Zelle jeweils einen Supercap laden, die 
Zelle Abtrennen, und dann mit der in dem Supercap gespeicherten Energie 
eine andere Zelle beglücken. Alternativ mach man das mit einem 
induktiven Übertrager.

Oder man ignoriert das alles, und nimmt sich einmal im halben Jahr die 
Zeit, jede Zelle einzeln randvoll zu laden. Und schon ist alles wieder 
in Balance.

Viel Spass... .

von DraconiX (Gast)


Lesenswert?

Schön ausführlich, aber mehreren Zellen Messe ich, und so wie auch jeder 
Balancer der mir unter die Finger gekommen ist, von Zelle zu Zelle - 
nicht alle nacheinander in Reihe ;-)

Also von Z1 neg->  Z1 pos dann: Z1 pos / Z2 neg -> Z2 pos dann: Z2 pos / 
Z3 neg -> Z3 pos... U.s.w.

Da hast du genau den Wert jeder einzelnen Zelle ohne komisches 
subtrahieren der vorhergehenden. Zellen. Das ist ja Umstand ohne Ende, 
da müsste man sich ja noch zig Spannungsteiler bauen um nach der ersten 
Zelle zu messen.

von Dr. Sommer (Gast)


Lesenswert?

Eine Techniker-Arbeit über ein BMS, und solche grundlegenden Fragen? 
Andere schreiben über so etwas Bachelor-Arbeiten...

von temp (Gast)


Lesenswert?

Schau dir mal die fertigen BMS an die man so unter Smart BMS findet wie 
das hier:

https://bmsbattery.com/bmspcm/330-smart-bms-513-cells-in-series-bms-pcm.html

Gibt es auch gegen Aufpreis von deutschen Händlern. Die verwenden intern 
den OZ890 Chip. Den kann man entweder so betreiben wie das die Smart BMS 
Platinen machen, nämlich nur Parametrisieren und der Chip macht alles 
selber. Oder man schaltet ihn über i2s in den dummen Modus. Dann dient 
der OZ890 nur als AD-Wandler und zum Schalten der Balancerwiderstände. 
Die ganze Intelligenz muss man dann selbst in einen µC Programmieren der 
den OZ890 über i2c benutzt. In dieser Betriebsart dürfte das dem 
entspreche was du suchst. Das hat sogar die großen Vorteil, dass du 
jeden beliebigen Controller verwenden kannst der i2c kann.

von Wolfgang (Gast)


Lesenswert?

Matthias M. schrieb:
> Bedenke dabei, das bei 3.2V Batterien, die erste Zelle 3.2V liefert, die
> 2. Zelle liefert 6.4V plus die Abweichung der ersten. Die dritte Zelle
> liefert 9.6V plus die Abweichung der ersten plus die Abweichung der
> zweiten Zelle. Nach sechs Zellen wird es dann langsam ungenau, weil in
> deinen 12 bit Messbereich nur ein sechstel des Wertes tatsächlich aus
> der gemessenen Zelle kommt.

Da man bei allen Zellen die selbe Messgenauigkeit anstrebt, kann man bei 
massebezogener Messung auch gleich alle Spannungen mit dem gleichen 
Spannungsteilerverhältnis auf den Spannungsbereich des Wandlers runter 
holen. Was bringt es einem, die unteren Zellen genauer zu messen. Das 
macht die Verarbeitung nur unnötig unübersichtlich.
Besser wäre natürlich eine differentielle Messung, d.h. Multplexer 
jeweils für Signal- und Bezugseingang, die um eins versetzt auf die 
Zellenkette geschaltet werden, so dass der ADC immer nur eine Zelle 
sieht.

von Dietmar (Gast)


Lesenswert?

Matthias M. schrieb:
> Ein echtes BMS nutzt pro Zelle einen eigenen Microcontroller. Die
> Controller werden über einen Bus verlinkt, der aber potentialfrei sein
> muss, da ja jede Zelle dem Microcontroller ein eignes Massepotential
> liefert, also per Übertrager oder Optokoppler und bidirektional.

Sprich ein 7s Akku hat mindestens 7 Mikrocontroller.

Merkst was? Das ist Unsinn. Niemand verbaut 7 Mikrocontroller. Allein 
die Kosten für die Firmwareentwicklung, Überprüfung, wäre doch Wahnsinn.

Ich habe hier einen 7s ebike Akku offen und der hat gerade mal 2 IC die 
in die Richtung "digital/µC" gehen, allein 7 5-pin OP sind für die 
Auswertung der Shunts verbaut, Unterseite der Platine ist nicht all zu 
leicht einsehbar, aber ich bezweifel, dass hier 7µC sitzen...

von Dr. Sommer (Gast)


Lesenswert?

Wenn hier schon alle fertige Lösungen vorschlagen, schlage ich mal den 
LTC8604 vor, welcher quasi alles macht was man für 12 Zellen braucht. 
Aber wie gesagt ist ein BMS eine sehr komplexe Angelegenheit, das 
handelt man nicht in ein paar Foren-Posts ab.
Ein Kollege hat eine BA-Arbeit nur über die Hardware geschrieben, und 
ein zweiter eine über die dazugehörige Software, ist aber kollosal 
gescheitert. Überleg dir vielleicht noch mal ob du das alles in einer 
Techniker Arbeit schaffst...

von Dr. Sommer (Gast)


Lesenswert?

Dietmar schrieb:
> Merkst was? Das ist Unsinn. Niemand verbaut 7 Mikrocontroller. Allein
> die Kosten für die Firmwareentwicklung, Überprüfung, wäre doch Wahnsinn.

Doch, die BMS der Firma Elithion machen das zB. Indem die die billigsten 
PIC dafür nehmen, ist das gar nicht so teuer. Und Überraschung, auf 
allen Controllern läuft die gleiche Software, die muss man nur einmal 
entwickeln.
Für so kleine Zahlen wie 7 ist das Overkill, aber wenn man Akkus bis 
1000V hat braucht man auf jeden Fall einzelne Controller auf 
unterschiedliche Potentialen.

von Dietmar (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Dietmar schrieb:
>> Merkst was? Das ist Unsinn. Niemand verbaut 7 Mikrocontroller. Allein
>> die Kosten für die Firmwareentwicklung, Überprüfung, wäre doch Wahnsinn.
>
> Doch, die BMS der Firma Elithion machen das zB. Indem die die billigsten
> PIC dafür nehmen, ist das gar nicht so teuer. Und Überraschung, auf
> allen Controllern läuft die gleiche Software, die muss man nur einmal
> entwickeln.
> Für so kleine Zahlen wie 7 ist das Overkill, aber wenn man Akkus bis
> 1000V hat braucht man auf jeden Fall einzelne Controller auf
> unterschiedliche Potentialen.

Bei einem Auto oder Akku Richtung Tesla Powerwall gebe ich dir Recht, 
genauso bei einer größeren USV (z.B. im Rechenzentrum).

Aber wir sprechen hier von einem ebike. Und da macht das keiner.

von Required (Gast)


Lesenswert?

>schlage ich mal den  LTC8604 vor,

Sicher, dass die Typbezeichnung stimmt?
Gugl liefert nix dazu.

Danke!

von Volle22 (Gast)


Lesenswert?

Dietmar schrieb:
> Merkst was? Das ist Unsinn. Niemand verbaut 7 Mikrocontroller. Allein
> die Kosten für die Firmwareentwicklung, Überprüfung, wäre doch Wahnsinn.

nur weil du es nicht kennst heißt es nicht das es das nicht gibt.

Wird aber sehr selten gemacht. Hauptproblem ist aber die effiziente 
Versorgung der Zellelektronik aus nur einer Zelle.

Bei einem Tessla mit > 10000Zellen ist natürlich auch nicht sinnvoll

Auch exotisch ist übrigens aktives Balancing
also aktives umladen von einer Zelle in einen Andere.
Aber auch  ich hierfür gibt es Chips und Lösungen.


Zurück zu TO
ein halbwegs brauchbares BMS für 10 Zellen selbst zusammenbauen und 
Programmierern kann schon ein paar Mannjahre verbraten. Selbst wenn man 
einen Messchip + Controler verwendet.
Diskrete Elektronik anstatt Messschip bekommt man von der Genauigkeit 
nicht in Griff. Wenn man die Zellkapazität größtenteils auch nutzen 
will.

von temp (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Wenn hier schon alle fertige Lösungen vorschlagen, schlage ich mal den
> LTC8604 vor, welcher quasi alles macht was man für 12 Zellen braucht.
> Aber wie gesagt ist ein BMS eine sehr komplexe Angelegenheit, das
> handelt man nicht in ein paar Foren-Posts ab.

Du meinst LTC6804. Sehr schöne Bausteine und nicht sonderlich 
kompliziert vom Protokoll her. Allerdings kosten da das Stück allein 
schon um die 20€. Dafür gibst fast das ganze OZ890 Board.

von Dr. Sommer (Gast)


Lesenswert?

Required schrieb:
> schlage ich mal den  LTC8604 vor,
>
> Sicher, dass die Typbezeichnung stimmt?
> Gugl liefert nix dazu.
>
> Danke!

Upps. Ich meinte LTC6804 ?

Der hat auch (optional) eine differentielle und per CRC gesicherte 
Datenübertragung, was die wesentlich robuster macht als zB I2C, was im 
Kontext hoher Ströme (Akku!) wichtig ist.

von w.n. (Gast)


Lesenswert?

temp schrieb:
> Allerdings kosten da das Stück allein
> schon um die 20€. Dafür gibst fast das ganze OZ890 Board.

Wo denn? Und gibt es die OZ890 irgendwo einzeln zu kaufen?

von temp (Gast)


Lesenswert?

w.n. schrieb:
> Wo denn? Und gibt es die OZ890 irgendwo einzeln zu kaufen?

Direkt beim freundlichen Chinesen (dem Hersteller). Hatte ich oben 
verlinkt. Da kostet das Board 20$.

Die einzelnen Chips habe ich noch nie in der freien Wildbahn gesehen, 
die wären für mich aber auch uninteressant. Die BQ76x0 Serie ist aber 
auch nicht schlecht. Auf alle Fälle interessant wie die das mit den 
externen Balancing-Fets gelöst haben.
Eigene Erfahrung hab ich nur mit den LTC680x gemacht. Die sind zwar 
teuer aber sehr genau. Auch für die interne Selbstüberwachung wurde da 
viel gemacht, so dass die Dinger von der Seite in einer anderen Liga 
spielen als OZ890.

von Heinz (Gast)


Lesenswert?

Als Technikerarbeit ist das Blödsinn. Viel zu komplexes Thema. Vor allem 
wäre schon das BMS an sich viel zu komplex, geschweige noch ein EBike 
dazu. Sag deinem Ausbilder, der soll mal andere Drogen nehmen.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

Auch wenn das anders dargestellt wurde: im KFZ Bereich sind je ein 
Mikrocontroller pro Zelle durchaus üblich und sinnvoll:

http://www.evsource.com/tls_cleanpower.php

Die Idee mit den Spannungsteilern war auch nur dazu da, den AUfbau 
extrem simpel zu halten. Ein billiger Controller hat den selben 
Nullpunkt für alle A/D Wandler. Wenn ich kaskadiere, dann komme ich mit 
Zelle*2 Widerständen aus und fertig. Ja, ungenau, aber fertig.

von S. K. (Gast)


Lesenswert?

Christian R. schrieb:
> Hallo zusammen, für meine Techniker-Arbeit soll ich ein E-Bike selbst
> zusammen bauen.

Darf man das überhaupt? Haben diese Bikes nicht eine Zulassung durch den 
TÜV? Meines hat eines. Braucht auch einen Führerschein und ein 
Nummernschild.

von S. R. (svenska)


Lesenswert?

S. K. schrieb:
> Braucht auch einen Führerschein und ein Nummernschild.

Das ist dann kein Fahrrad, sondern ein Moped.

Und solange man nur auf seinem eigenen Hof fährt (oder z.B. dem 
Unigelände, Sportplatz oder so), interessieren weder TÜV noch 
Bauartprüfung noch Führerschein.

Beitrag #5271619 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.