24-48V BMS: Unterschied zwischen den Versionen

Aus Open Source Ecology - Germany
Zur Navigation springen Zur Suche springen
(<div class="toc-fullwidth-compact">__INHALTSVERZEICHNIS__</div> ist übersichtlicher)
 
(68 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
24-48V BMS
+
<div class="toc-fullwidth-compact">__INHALTSVERZEICHNIS__</div>
test
+
 
test
+
==Anleitung zum Aufbau und Inbetriebnahme==
test
+
Folgende Anleitung zum Aufbau und zur Inbetriebnahme des BMS 24V-48V von LibreSolar soll einen Leitfaden darstellen, um den selbständigen Nachbau und die Inbetriebnahme des BMS zu ermöglichen. Der Leitfaden orientiert sich am Aufbau eines BMS für einen LiFePO Akkumulator mit 9 Zellen (28,8V) integriert in einem DC Solarstromspeicher und hat keinen Anspruch auf Vollständigkeit.
test
+
 
test
+
Randdaten des realisierten Projektes:
[https://github.com/LibreSolar/BMS48V/blob/master/README.md LibreSolar BMS48V on GitHub]
+
 
 +
* Akkupack 9x 3,2V 60Ah Innopower LiFePo Akkumulatoren, verspannt mit Kunststoffband
 +
* Max. Ladestrom 30A über 2x MPPT 100-15 Victron Laderegler
 +
* Max. Entladestrom von 11A über Wechselrichter AE Conversion
 +
 
 +
Grundlegende Informationen zum BMS sind unter folgenden Links zu finden:
 +
 
 +
* Genereller Überblick über das BMS, BMS-Features, Einordnung, zukünftige Entwicklungen, bisheriger Einsatz etc. [http://wiki.opensourceecology.de/LibreSolar_BMS]
 +
 
 +
* Vollständiges Repository aller Daten (Sourcecode, Leiterplattenlayouts) für das BMS, neueste Entwicklungen, Verbesserungen, Fortschritte im Projekt, behobene Bugs etc. [http://github.com/LibreSolar/BMS48V]
 +
 
 +
* Überblick über die verschiedenen Elektronikentwicklungen von Martin Jäger, Einordnung BMS  24-48V [http://libre.solar/devices/]
 +
 
 +
* Beschreibung der Hardware BMS Controllerboard [http://github.com/LibreSolar/BMS48V/wiki/Hardware-Description]
 +
 
 +
* Beschreibung der Hardware des Switch N Sense [http://github.com/LibreSolar/Switch-N-Sense]
 +
 
 +
Zum selbstständigen Aufbau und zur Inbetriebnahme des BMS sind folgende Kenntnisse unbedingt erforderlich:
 +
 
 +
* Grundkenntnisse der Elektrotechnik
 +
* Ggf. Löten von SMD Bauteilen
 +
* handwerkliches Geschick
 +
 
 +
== Systemübersicht ==
 +
 
 +
Das LibreSolar BMS 24-48V besteht aus zwei Hauptkomponenten: das BMS Controllerboard und das BMS Leistungsboard.
 +
 
 +
 
 +
 
 +
Das BMS Controllerboard ist zuständig für die Spannungsüberwachung der angeschlossenen Zellen, deren Balancing (Entladung von Zellen mit zu hohem Spannungsniveau über Widerstände), Temperaturüberwachung, Stromüberwachung, Berechnung des SoC, der Ansteuerung des BMS Leistungsboards zur Unterbrechung des Lade- und Entladeprozesses im Fehlerfall über Leistungsmosfets, der Ansteuerung des Kommunikationsinterfaces (CAN, UART/I2C/SPI) und der Abarbeitung des Hauptprogramms.
 +
 
 +
Das BMS Leistungsboard (Switch-N-Sense) enthält je 2 parallel geschaltete Hochleistungsmosfets für jede Stromrichtung in antiserieller Anordnung und einen High-Side-Treiber. Die Ansteuerung erfolgt über das BMS Controllerboard. Dort befindet sich auch der Shunt für die Strommessung. Der dazugehörige A/D-Wandler sitzt im bq769x0. Ein maximaler Strom von 80A kann geschalten werden, wobei dabei unbedingt Kühlkörper auf den Mosfets (Unterseitig auf dem BMS Leistungsboard) zur Abfuhr der Verlustleistung angebracht werden müssen. Kühlungsbedarf besteht insbesondere auch dann, wenn die MOSFETs nur in einer Stromrichtung durchgeschaltet sind und der Strom durch die Body-Dioden der anderen MOSFETs fließt.
 +
 
 +
 
 +
 
 +
Folgendes Bild beschreibt die wesentlichen Bestandteile der Platinen:
 +
[[Datei:Abbildung 2 Beschreibung der wesentlichen Bestandteile der BMS Platinen.pdf|mini|Abbildung 2: Beschreibung der wesentlichen Bestandteile der BMS Platinen]]
 +
 
 +
 
 +
 
 +
Das aktuelle eagle Layout, Stromlaufpläne etc. inklusive Beschreibung aller Bauteile sind unter [http://github.com/LibreSolar/BMS48V]  sowie [http://github.com/LibreSolar/Switch-N-Sense] zu finden.
 +
 
 +
 
 +
Das eigentliche Zellbalancing (Überwachung, Balancing und Hauptsicherheitsfeatures) führt der Balancing-IC bq769x0 durch. Dieser wird je nach Anzahl der angeschlossenen Zellen und Spannungsniveau des Akkupacks ausgewählt:
 +
 
 +
bq76920: 3-5 Zellen Spannung ist abhängig von Zellchemie, BMS kann nicht nur LiFePO
 +
 
 +
bq76930: 6-10 Zellen
 +
 
 +
bq76940: 9-15 Zellen
 +
 
 +
Das vorliegende Platinenlayout BMS 48V ist für den IC bq76930 (6-10 Zellen) bzw. bq76940 (9-15 Zellen ) ausgelegt. Die abweichende Bestückung beim Einsatz des bq76930 ist im Schaltplan angegeben.
 +
 
 +
 
 +
Ist ein BMS für ein Akku mit bq76920: 3-5 Zellen notwendig, so kann das 5-cell Battery Management System (12V) von Matin Jäger verwendet werden [http://libre.solar/devices/bms-5s/]. Der hier in der Anleitung verwendete Balancing IC ist der bq76930. Das Datenblatt „bq769x0 Family Top 10 Design Considerations“ bzw. „bq769x0 3-Series to 15-Series Cell Battery Monitor Family
 +
for Li-Ion and Phosphate Applications“ ist unter [http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=SLUSBK2&fileType=pdf#] zu finden.
 +
Der Balancingstrom  von ca. 100 mA bei 3,3V wird bestimmt durch die 33Ohm Balancingwiderstände. Allerdings verwendet der bq769x0 pro Zyklus 30% der Zeit für die Messung und nur 70% für das Balancing, so dass sich ein effektiver Balancingstrom von ca. 70mA einstellt. Weiterhin können bedingt durch das Schaltungsdesign nebeneinanderliegende Zellen nicht gleichzeitig entladen werden.
 +
 
 +
 
 +
Im oben dargestellten Bild ist der IC (bq76930) (6-10 Zellen ) verwendet, sodass die Balancingwiderstände für die Zellen (11-15) nicht bestückt sind.
 +
 
 +
Werden weniger als 10 bzw. 15 Zellen verwendet, müssen überzählige Zellanschlüsse nach einem im Datenblatt dargestellten Schema überbrückt werden. Dies kann entweder durch verbinden der betreffenden Zellanschlusskabel oder durch Lötbrücken direkt an den Pins des Molex-Steckverbinders auf der Platine erreicht werden. Im vorliegenden Projekt (9 Zellen) wurden die Kontakte C8 und C9 gebrückt. In folgender Tabelle, entnommen aus dem Datenblatt des bq76930 auf Seite 46/47, ist beispielhaft der notwendige Zellkurzschluss für eine unterschiedliche Zellanzahl dargestellt.
 +
[[Datei:Abbildung 3 Zellverbindungen unterschiedlicher Akkupacks beispielhaft für bq76930.pdf]]
 +
 
 +
 
 +
 
 +
Das Datenblatt für den Prozessor STM32F072 ist verfügbar unter:
 +
[https://www.st.com/resource/en/datasheet/DM00090510.pdf]
 +
 
 +
 
 +
Für das vorliegende Setup benötigen wir keine CAN Schnittstelle, sondern verwenden den UEXT (Universal EXTension) Anschluss. Im ersten Schritt wird daran bspw. über einen 10-poligen Wannenstecker ein I2C fähiges Display (OLED SSD1306) an dem BMS Controllerboard angeschlossen, um so direkte Auskunft zu Lade-/Entladestrom, Akkuladezustand und Spannungsniveau der einzelnen Zellen zu bekommen.
 +
 
 +
 
 +
Über die UEXT Schnittstelle stehen die seriellen Schnittstellen I2C, SPI und RS232 bereit (auch gleichzeitig!), um mit anderer Hardware zu kommunizieren. Der UEXT Standard wird unter folgenden Links erklärt:
 +
 
 +
[https://en.m.wikipedia.org/wiki/UEXT][https://www.olimex.com/Products/Modules/UEXT/][https://www.olimex.com/Products/Modules/UEXT/resources/UEXT_rev_B.pdf]
 +
 
 +
Anschlussreihenfolge für OLED:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Anschlusspin OLED !! UEXT Pin
 +
|-
 +
| I2C1_SDA || Pin 6
 +
|-
 +
| GND || Pin 2
 +
|-
 +
| +3V3 || Pin 1
 +
|-
 +
| I2C1_SCL || Pin 5
 +
|}
 +
 
 +
=== Cortex Stecker ===
 +
 
 +
An den Cortex-Stecker auf dem BMS Controllerboard wird der Cortex ST-Link Adapter angeschlossen (verfügbar unter [https://github.com/LibreSolar/Cortex_ST-Link_Adapter] Bestellung unter: [https://aisler.net/martinjaeger/cortex_st-link_adapter/cortex_st-link_adapter]) mithilfe dessen und einem Nucleo Board der Flash- bzw. Debug-Vorgang des STM32 erfolgt. Genaue Vorgehensweise siehe unter Flashvorgang.).
 +
 
 +
[[Datei:Abbildung 4 Cortex ST-Link Adapter.pdf|mini| Abbildung 4: ''Cortex_ST-Link_Adapter'']]
 +
 +
 
 +
===Batterieanschlussklemmen===
 +
 
 +
Die Anschlussblöcke für Batterie und Stromverbraucher auf dem BMS Leistungsboard sind PowerOne Buchsen von Würth Electronic (Nr. 93172) [https://powerelement.we-online.de/p/s/1406/93172-PowerOne-Bush-vertical-through-hole.html] Würth Power Elements WP-BUCF (order code 7461059) und müssen z.B. mithilfe eines Schraubstockes in das BMS Leistungsboard eingepresst werden. Dies ist auch bei schon bestückter Platine möglich, erfordert aber folgende speziell ausgeschnittene bzw. ausgelaserte Unterlegscheiben bspw. aus Holz oder stabiler Pappe.
 +
 
 +
[[Datei:Abbildung 5 Unterlegscheibe aus Holz.pdf|mini|Abbildung 5 Unterlegscheibe aus Holz]]
 +
 +
 +
Die Kontur ist der Datei „Switch-N-Sense.dxf“ zu entnehmen, exportiert aus dem Eagle Board Layout des BMS Leistungsboards.
 +
[[:File:Switch-N-Sense.zip]]
 +
 
 +
Alternativ kann auch sehr weiches Holz (z.B. Balsaholz) als Widerlager verwendet werden, in das sich die Metallfüße eindrücken können.
 +
 +
Die c-Hack Batslergruppe aus Calw haben sich zum Einpressen der Buchsen eine professionelle Presse gebaut, deren Beschreibung unter folgenden Links zu finden ist:
 +
 +
[http://c-hack.de/][http://c-hack.de/c-turm/]
 +
[https://c-hack.de/c-turm/aufbau-und-inbetriebnahme-laderegler/][https://c-hack.de/c-turm/bms-n-switch-mit-hilfsvorrichtung/]
 +
 
 +
 
 +
Die Anschlussblöcke verfügen jeweils über ein M6 Innengewinde zur Befestigung der Kabelschuhe der Batterie- und Anlagenanschlussklemmen mit  M6x10 oder M6x12 Flachkopf Sechskant- oder Innensechskantschrauben.
 +
 
 +
Die 18 bzw. 6 poligen „Molexstecker“ (Typ Micro Fit 3,0mm bzw. Würth Elektronik „3.00mm Micro Power Connector WR-MPC3“) finden u.a. auch in der Automobilbranche ihre Anwendung und werden im vorliegenden Projekt mithilfe einer „KNIPEX Crimpzange“ konfektioniert.
 +
 
 +
[[Datei:Abbildung 6 Crimpzange.pdf|mini|Abbildung 6 Crimpzange]]
 +
 
 +
Da diese Crimpzange sehr hochpreisig ist kann folgende Universalzange ein guter Kompromiss darstellen:
 +
[http://www.engineer.jp/en/products/pa09e.html]
 +
 
 +
Für die Crimpung der einzelnen Litzen werden Litzenschuhe von folgendem Typ (ebenfalls Würth Sortiment) verwendet: „3.00mm Female Terminal WR-MPC3“
 +
Nachdem der „Molexstecker“ vollständig in das BMS Controllerboard eingesteckt wurde, ist dieser nur noch schwer (mit viel Mühe) lösbar. Im Testbetrieb möglichst nicht bis zum Einrasten einstecken!
 +
 
 +
 
 +
Die Funktion des An-Aus Knopf ist hier [https://github.com/LibreSolar/BMS48V/wiki/Hardware-Description] ausführlich beschrieben ( Stichwort „Boot-up procedure and power supply“ )
 +
 
 +
=== Leistungsmosfets ===
 +
 
 +
Es werden vier SMD Leistungsmosfets im BMS Leistungsboard verwendet ( Typ FDMT80080DC). Im vorliegenden Projekt sind die -MOSFETs mit einer Spannung von 60V verwendet.. Unter folgendem Link gibt es Hinweise zu möglichen Mosfets: [https://github.com/LibreSolar/Switch-N-Sense]
 +
 
 +
Die Bestückung der SMD Mosfets erfolgt mithilfe eines Reflowofens und sollte, um andere Bauteile nicht zu beschädigen, somit am Anfang des Bestückungsprozesses erfolgen.
 +
 
 +
===Eigenheiten des bq769x0===
 +
 
 +
Bis zu drei Temperatursensoren sind am BMS Controllerboard anschließbar und mit dem Controller bq769x0 verbunden. Diese liegen auf unterschiedlichen Spannungsniveaus. D.h. ein Zusammenschalten der Temperatursensoren zerstört das BMS-IC!
 +
 
 +
Ist kein Temperatursensor angeschlossen, dann funktioniert der bq769x0 nicht ordentlich. Abhilfe schafft hier bspw. ein Hilfswiderstand (10kOhm), der anstelle des Temperatursensors angeschlossen werden kann.
 +
Verwendete Temperatursensoren: NTC Thermistor
 +
Typ:  TTC3A103F34D3EY
 +
 
 +
===Hardwareänderungen===
 +
 
 +
Momentan sollten noch vor Inbetriebnahme des BMS Hardwareänderungen am BMS Controllerboard (Überbrückungen und Leiterbahnunterbrechungen) durchgeführt werden, um fehlerhafte Spannungsmessung an Zelle 5/6 und evtl. Zelle 10/11 zu vermeiden.
 +
 
 +
Eine Dokumentation ist unter [https://github.com/LibreSolar/BMS48V/issues/4] zu finden.
 +
 
 +
Eine Aktualisierung des Boardlayouts ist inzwischen fertiggestellt und unter dem Abschnitt Aktualisierung des Boardlayouts zu finden.
 +
 
 +
[[Datei:Abbildung 7 Hardwareänderungen am BMS Controllerboard.pdf|mini|Abbildung 7 Hardwareänderungen am BMS Controllerboard]]
 +
 
 +
==Schematischer Aufbau, Komponenten Akkumulator==
 +
 
 +
==Grundlegendes==
 +
 
 +
Im vorliegenden Projekt werden neun Zellen a 3,2V des Lithium-Eisen-Mangan-Phosphat Akku von Innopower INNO-LFMP 60 AH verwendet.
 +
 
 +
[[Datei:Abbildung 8 Lithium-Eisen-Mangan-Phosphat Akkumulator INNO-LFMP 60 AH.pdf|mini|Abbildung 8 Lithium-Eisen-Mangan-Phosphat Akkumulator INNO-LFMP 60 AH]]
 +
 
 +
Abmessungen Zelle: 125x65x185mm, Gewicht:ca.2,0 kg pro Zelle. Innopower liefert den Akkupack per Post fertig mit Kunststoffband verspannt incl. Polverbinder, Polschrauben und Zellabdeckung. Datenblatt zu finden unter: [http://www.innopower.de/pdf/Datenblatt-InnoPower-LFMP-60Ah-web.pdf].
 +
Durch chemische Prozesse beim Auf- und Entladeprozess kommt es zu volumetrischen Ausdehnungen des Akkublocks. Um Verformungen zugunsten höherer Lebenserwartung klein zu halten wird empfohlen, die Zellen z.B mit einem Drahtseil oder mit Gewindestangen und beidseitigen Endplatten fest zusammenzuspannen. Die Zyklenzahl ist bei einer DoD (Depth of Discharge) von 80% mit >= 5000 angegeben.
 +
 
 +
In folgendem Bild ist die gemessene Entladungskurve des Akkupacks dargestellt entladen mit einer konstanten Last von 105W.
 +
 
 +
[[Datei:Abbildung 9 Entladungskurve gemessen bei einer konstanten Last von 105W.pdf|mini|Abbildung 9 Entladungskurve gemessen bei einer konstanten Last von 105W]]
 +
 
 +
Folgendes Ergebnis wurde ermittelt:
 +
 
 +
- Kapazität: 70,8Ah bzw. 118% der Nennkapazität
 +
- Energieinhalt: 2,07kWh
 +
 
 +
Wie in der Abbildung zu erkennen, bleiben die Zellspannungen fast über den ganzen Bereich sehr nah beisammen. Gegen Ende fächern die Kurven auf, was auf kleine Toleranzen in der Kapazität der Zellen hinweist. Der vorliegende Akkumulator wird in den folgenden Spannungsgrenzen betrieben:
 +
 
 +
Schwellwert Überspannung: 3,65V/Zelle
 +
 
 +
Schwellwert Unterspannung: 2,85V/Zelle
 +
 
 +
Ladeschlussspannung im Normalbetrieb: 3,5V/Zelle
 +
 
 +
Entladeschlussspannung im Normalbetrieb: 3,1V/Zelle
 +
 
 +
Im bq769x0 sind keine Hysteresen implementiert.
 +
 +
 +
===Anschluss Akkumulator===
 +
 
 +
===Batterieanschlusskabel===
 +
 
 +
In folgender Abbildung ist der Anschluss der Akkumulatorpole an das BMS Leistungsboard dargestellt. Verwendet wurde als Batterieanschlusskabel in rot und schwarz eine „ADERLEITUNG 1X16 RT H07V-K“. Der Anschluss an das Leistungsboard erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 16mm^2 und einem Lochdurchmesser für M6 Schrauben. Der Anschluss an den Akkumulator erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 16mm^2 und einem Lochdurchmesser für M4 Schrauben (4,3mm, Polschrauben im Lieferumfang Akkumulator).
 +
 
 +
[[Datei:Abbildung 10 Anschluss BMS Leistungsboard.pdf|mini|Abbildung 10 Anschluss des BMS Leistungsboards]]
 +
 
 +
===Anschlusskabel für Zellspannungsmessung und Temperatursensoren===
 +
 
 +
In folgender Abbildung ist der Anschluss der einzelnen Akkumulatorzellen an das BMS Controllerboard dargestellt. Die konkrete Belegung der „Molexstecker“ ist in untenstehender Tabelle sowie auch im Eagle Boardlayout hinterlegt.
 +
Verwendet wurde hier für die Akkumulatorzellen folgende Kabelqualität:
 +
Steuerleitung Ölflex, 12 Adern 0,5mm^2 Grau
 +
Für die Temperatursensoren wurde hier folgende Kabelqualität verwendet:
 +
Steuerleitung Ölflex, 7Adern  0,5mm^2 Grau
 +
Die zwei Temperatursensoren werden in der Mitte zwischen Zelle 3 und 4 sowie 6 und 7 angeordnet.
 +
Der Anschluss an die Akkumulatorzellen erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 1mm^2 und einem Lochdurchmesser für M4 Schrauben (4,3mm, Polschrauben im Lieferumfang Akkumulator).
 +
 
 +
[[Datei:Abbildung 11 Anschluss der Temperatursensoren sowie der Zellspannungsmessung.pdf|mini|Abbildung 11 Anschluss der Temperatursensoren sowie der Zellspannungsmessung]]
 +
 
 +
Für die „Molexstecker“ gilt folgende Pinbelegung:
 +
'''Anschlüsse für Temperaturmessung'''
 +
{| class="wikitable"
 +
|-
 +
! Pin Nummer !! Pin Bezeichnung !! Farbe !! Bemerkung
 +
|-
 +
| 1 || GND || schwarz || Sensor 1 -
 +
|-
 +
| 4 || TS1 || weiß || Sensor 1 +
 +
|-
 +
| 2 || VC5X || braun || Sensor 2 -
 +
|-
 +
| 5 || TS2 || grau || Sensor 2 +
 +
|-
 +
| 3 || VC10X || blau || Sensor 3 - (unbelegt beim BQ76930)
 +
|-
 +
| 6 || TS3 || rot || Sensor 3 + (unbelegt beim BQ76930)
 +
|-
 +
|}
 +
 
 +
'''Anschlüsse für Zellspannungsmessung'''
 +
{| class="wikitable"
 +
|-
 +
! Pin Nummer !! Pin Bezeichnung !! Farbe !! Bemerkung
 +
|-
 +
| 1 || GND || schwarz || Zelle 1 -
 +
|-
 +
| 10 || C0 || grün-gelb || Zelle 1 -
 +
|-
 +
| 2 || C1 || grau || Zelle 1 +
 +
|-
 +
| 11 || C2 || braun || Zelle 2 +
 +
|-
 +
| 3 || C3 || blau || Zelle 3 +
 +
|-
 +
| 12 || C4 || lila || Zelle 4 +
 +
|-
 +
| 4 || C5 || rosa || Zelle 5 +
 +
|-
 +
| 13 || C6 || orange || Zelle 6+
 +
|-
 +
| 5 || C7 || gelb || Zelle 7 +
 +
|-
 +
| 14 || C8 || weiß || Zelle 8 +
 +
|-
 +
| 6 || C9 || - || auf Platine gebrückt mit C8
 +
|-
 +
| 15 || C10 || transparent || Zelle 9 +
 +
|-
 +
| 7 || C11 || - || unbelegt beim BQ76930
 +
|-
 +
| 16 || C12 || - || unbelegt beim BQ76930
 +
|-
 +
| 8 || C13 || - || unbelegt beim BQ76930
 +
|-
 +
| 17 || C14 || - || unbelegt beim BQ76930
 +
|-
 +
| 9 || C15 || - || unbelegt beim BQ76930
 +
|-
 +
| 18 || PWR || rot || Zelle 9 +
 +
|}
 +
 
 +
 
 +
===Aktualisierung des Boardlayouts===
 +
 
 +
Die Hardwareänderungen wurden in zwei Varianten durchgeführt. Bei beiden Varianten wurde folgendes geändert:
 +
 
 +
* Korrekter Anschluss des CAN Microcontrollers Pin „CAN_STB“ am BQ76940
 +
* Korrekter Anschluss der Zellen 5/6 und 10/11 (ohne gegenseitige Wechselwirkung)
 +
'''Auchtung:''' Bitte beachte die dadurch geänderte Steckerbelegung des Molexsteckers für die Zellspannungsmessung
 +
 
 +
 +
'''Variante 1:'''
 +
Das Boardlayout des BMS Controllerboards ist mit vergrößerter Platine konstruiert, sodass diese mithilfe von Schrauben im Hutschienengehäuse von Apra Norm „Apra Rail F06" oder „Apra Rail M06“ mit den Abmessungen (B x L x H) 107 mm x 90 mm x 48 mm montiert werden kann. Mit zwei selbstschneidende Schrauben kann die Platine direkt im Gehäuse festgeschraubt werden. Mithilfe zweier weiterer Abstandshalter mit Innengewinde M3, Länge 8 mm die mit dem Gehäuseboden verklebt werden kann die Platine bei Bedarf mit weiteren 2 M3 Schrauben sicher im Gehäuse fixiert werden. Die aktuellen Dateien des Layouts und des Schaltplans von Variante 1 sowie die Stückliste sind in folgendem Repo abgelegt:
 +
https://github.com/LibreSolar/bms-15s80-sc/tree/rev2
 +
[[Datei:Abbildung_12.1_Hardwareänderungen_LibreSolar_BMS48V_V1.pdf|mini|Abbildung 12.1 Hardwareänderungen Variante 1]]
 +
 
 +
 
 +
'''Variante 2:'''
 +
Das BMS Controller- und Leistungsboard sind in einer Eagle Datei vereinigt. Dadurch lassen sich die Platinenherstellungs- und bestückungskosten reduzieren. Beide Boards lassen sich an ihrer Trennstelle zersägen. [[Datei:Abbildung_12_Hardwareänderungen_LibreSolar_BMS48V_und_Switch_N_Sense.pdf|mini|Abbildung 12.2 Hardwareänderungen Variante 2]]Die jeweils aktualisierten Dateien des Layouts und des Schaltplans sind unter folgendem Link zu finden:
 +
 
 +
Die jeweils aktualisierten Dateien des Layouts und des Schaltplans sind unter folgendem Link zu finden:
 +
[[:File:LibreSolar_BMS48V_mit_SNS.zip]]
 +
 
 +
Folgende Abbildungen zeigen das aktualisierte und modifizierte Boardlayout und die dazugehörige Steckerbelegung (20 Pins) für den Anschluss an den in diesem Projekt verwendeten 9-zelligen Akku.
 +
 
 +
===Steckerbelegung (20 Pins) des modifiziertes Platinenlayouts für den vorliegenden 9 Zelligen Akku===
 +
'''Anschlüsse für Temperaturmessung'''
 +
{| class="wikitable"
 +
|-
 +
! Pin Nummer !! Pin Bezeichnung !! Farbe !! Bemerkung
 +
|-
 +
| 1 || GND || schwarz || Sensor 1 -
 +
|-
 +
| 4 || TS1 || weiß || Sensor 1 +
 +
|-
 +
| 2 || VC5X || braun || Sensor 2 -
 +
|-
 +
| 5 || TS2 || grau || Sensor 2 +
 +
|-
 +
| 3 || VC10X || blau || Sensor 3 - (unbelegt beim BQ76930)
 +
|-
 +
| 6 || TS3 || rot || Sensor 3 + (unbelegt beim BQ76930)
 +
|-
 +
|}
 +
 
 +
'''Anschlüsse für Zellspannungsmessung'''
 +
{| class="wikitable"
 +
|-
 +
! Pin Nummer !! Pin Bezeichnung !! Farbe !! Bemerkung
 +
|-
 +
| 1 || GND || schwarz || Zelle 1 -
 +
|-
 +
| 11 || C0 || grün-gelb || Zelle 1 -
 +
|-
 +
| 2 || C1 || grau || Zelle 1 +
 +
|-
 +
| 12 || C2 || braun || Zelle 2 +
 +
|-
 +
| 3 || C3 || blau || Zelle 3 +
 +
|-
 +
| 13 || C4 || lila || Zelle 4 +
 +
|-
 +
| 4 || C5 || rosa || Zelle 5 +
 +
|-
 +
| 14 || C5.1 || - || auf Platine gebrückt mit C5
 +
|-
 +
| 5 || C6 || orange || Zelle 6 +
 +
|-
 +
| 15 || C7 || gelb || Zelle 7 +
 +
|-
 +
| 6 || C8 || weiß || Zelle 8 +
 +
|-
 +
| 16 || C9 || - || auf Platine gebrückt mit C8
 +
|-
 +
| 7 || C10 || transparent || Zelle 9 +
 +
|-
 +
| 17 || C10.1 || - || unbelegt beim BQ76930
 +
|-
 +
| 8 || C11 || - || unbelegt beim BQ76930
 +
|-
 +
| 18 || C12 || - || unbelegt beim BQ76930
 +
|-
 +
| 9 || C13 || - || unbelegt beim BQ76930
 +
|-
 +
| 19 || C14 || - || unbelegt beim BQ76930
 +
|-
 +
| 10 || C15 || - || unbelegt beim BQ76930
 +
|-
 +
| 20 || PWR || rot || Zelle 9 +
 +
|}
 +
 
 +
 
 +
===Platinenherstellung und Bestückung===
 +
 
 +
Auf [http://libre.solar/devices/bms-48v/] ist das Eagle Layout des BMS Controller- und Leistungsboards incl. aller Schaltpläne und bestückter elektronsicher Bauteile zu finden. Es ist darauf zu achten, bei externer Bestückung den richtigen BQ769x0 einzupflegen. Die bisherigen Platinen wurden bei https://aisler.net/ bestellt und gefertigt. Da das Bestücken für Einzelplatinen aufgrund der Rüstkosten für die Bestückungsmaschine sehr hoch sind, kostet dies derzeit bei einer Abnahme >10 Stück immer noch  > 150€ für Controller- und Leistungsboard.
 +
 
 +
Im vorliegenden Projekt wurden die SMD Bauteile von Hand bestückt.
 +
 
 +
===Gehäuse, Platinenbefestigung===
 +
 
 +
Ein Gehäuse steht im .step bzw. . FCStd als Hutschienengehäuse bzw. zur Montage auf festem Untergrund zur Verfügung und kann als Vorlage zum 3d Druck verwendet werden.
 +
 
 +
[[:File:BMS Gehäuse.zip]]
 +
 
 +
Hierbei empfehlen sich folgende Einstellparameter bei der Verwendung von PLA Kunststoff:
 +
{| class="wikitable"
 +
|-
 +
! Überschrift !! Überschrift
 +
|-
 +
| Drucker || Ultimaker Original+
 +
|-
 +
| Material || PLA 3mm Draht
 +
|-
 +
| Slicer || Ultimater Cura_Engine 3.6.0
 +
|-
 +
| Schichtdicke || 0,1mm
 +
|-
 +
| Wanddicke || 0,8mm
 +
|-
 +
| Anzahl Wandlinien: || 3
 +
|-
 +
| Obere/untere Dicke || 0,8mm
 +
|-
 +
| Füllung || 80%
 +
|-
 +
| Drucktemperatur || 200°C
 +
|-
 +
| Temperatur Druckplatte || 60°C
 +
|-
 +
| keine Kühlung || Beispiel
 +
|-
 +
| Stützstruktur aktiviert || Beispiel
 +
|-
 +
| Druckplattenhaftung || Brim
 +
|}
 +
 
 +
Im Gehäuse ist auf der Rückseite des BMS Leistungsboard genügend Platz, um bei hohen Schaltströmen Kühlkörper für die Mosfets anzubringen (Kühlkörpertyp: Kühlkörper für PGA, 25 x 28 x 15,3 mm). Nach dem Druck muss die Stützkonstruktion entfernt werden. Weiterhin sind alle Löcher für ein M3 Gewinde mit einem Durchmesser von 2,5mm aufzubohren und anschließend ein M3 Gewinde einzuschneiden. Durchgangs und Senklöcher sind ebenfalls entsprechend aufzubohren.
 +
 
 +
Folgende zusätzliche Bauteile sind für den Zusammenbau notwendig:
 +
 
 +
- Gehäuseschraube 4x M3 Länge 50mm
 +
 
 +
- 8x M3 Schraube zur Befestigung der Platinen
 +
 
 +
- 4x M4 Schraube Länge 50mm mit Mutter zur Befestigung der Hutschienenaufnahme
 +
 
 +
- 2x Lichtleiter „Cliplite 4mm Litepipe Vertical“ für 4,3mm Bohrloch. Länge: 2000‘‘???
 +
 
 +
[[Datei:Abbildung 13 Druckgehäuse 3d.pdf|200px|mini|Abbildung 13: 3d Druckgehäuse BMS]]
 +
Folgende Anpassungen sind im CAD Modell noch einzupflegen:
 +
 
 +
Funktionell:
 +
 
 +
- Anpassung der Befestigungslöcher des BMS Leistungsboards an das exakte Maß der Platine
 +
 
 +
- Aufdickung der Wandstärke des Sackloches der Gehäuseschrauben
 +
 
 +
Optisch:
 +
 
 +
- Anpassung der Lüftungsschlitze auf eine Höhe
 +
 
 +
- Verkleinerung der vertikalen Schattenfuge
 +
 
 +
- Vergrößerung der Gehäuseverrundung am Deckel
 +
 
 +
- Einfügen des open source hardware logos sowie der „on/off“ Beschriftung
 +
 
 +
===Flashvorgang===
 +
 
 +
Vor Inbetriebnahme des BMS muss der Hauptprozessor mithilfe eines beliebigen Nucleo Boards geflasht werden. Dies erfolgt, wie unter Abschnitt „Cortex Stecker“ schon erwähnt, mithilfe des „Cortex ST-Link Adapter“ sowie der Entwicklungsumgebung „PlatformIO“. Der aktuelle Quellcode zum kompilieren ist zu finden unter [https://github.com/LibreSolar/BMS_Software.]
 +
 
 +
Wesentliche Anpassungen dieses Quellcodes an die jeweilige Zellchemie und Akkuaufbau sind dem Kapitel „Anpassungen im Quellcode für den Prozessor STM32„ zu entnehmen.
 +
 
 +
Das Nucleo Board wird mithilfe eines Mini-USB-Kabels an den Computer angeschlossen.
 +
Flashreihenfolge:
 +
 
 +
1. 18-poliger Stecker für die Zellanschlüsse einstecken (Cortexstecker liefert keine Betriebsspannung)
 +
 
 +
2. Quellcode im Programm PlatformIO öffnen
 +
 
 +
Notwendige Anpassungen bzgl. BMS-Typ und Akku-Typ vornehmen: config.h, config_48v.h, main.cpp, nach Bedarf output.cpp. Siehe hierzu Abschnitt Anpassungen im Quellcode für den Prozessor STM32
 +
 
 +
3. BMS ohne Anschluss der Batterie / Verbraucher / Raspberry über den „Cortex ST-Link Adapter“ an das Nucleo Board anschließen
 +
 
 +
4. Nucleo Board über Mini USB Kabel an Computer anschließen
 +
 
 +
5. On/Off Taster am BMS Controllerboard betätigen
 +
 
 +
6. Quellcode kompilieren und flashen
 +
 
 +
7. Nach dem Kompilierungsvorgang Verbindung zwischen Computer und Nucleo Board trennen und BMS Controllerboard am Verwendungsort montieren.
 +
 
 +
==Anschluss an Raspberry Pi zur Überwachung und Datenauswertung==
 +
 
 +
Es besteht die Möglichkeit über die UEXT Schnittstelle neben einem Display (OLED) zur Überwachung des BMS ein Raspberry Pi anzuschließen, das mithilfe der Open Source Software „volkszähler“ alle ausgegebenen BMS Daten graphisch für alle gewünschten Zeitspannen darstellt und in einer Datenbank speichert.
 +
 
 +
Es ist weiterhin möglich aus der Datenbank kumulierte Werte für beliebige Zeitspannen berechnen zu lassen und via JSON oder CSV zu exportieren.
 +
 
 +
Zur Einrichtung der Datenüberwachung mithilfe eines Raspberry Pi benötigt es folgende Hardware:
 +
 
 +
- Raspberry Pi, Speicherkarte, Netzteil
 +
 
 +
- USB Schnittstellenwandler (Adapter USB-UART: CP2102) (alternativ interner UART des Raspberry Pi)
 +
 
 +
Pin „USART2_TX“ der UEXT Schnittstelle wird mit Pin RXD des USB Schnittstellenwandlers verbunden und dieser wird in einen USB Port des Raspberrys eingesteckt. Weiterhin GND von BMS und Wandler verbinden. Vorsicht: USB-Adapter mit 3,3V Logikpegel verwenden, der TX-Pin des STM32 ist nicht 5V tolerant. . Vor Anschluss des Adapters Spannung kontrollieren (manche Adapter auf Basis des CH340G arbeiten bspw. mit 5V!). 
 +
 
 +
Auf volkszaehler.org wird ein Image für den Raspberry Pi angeboten, das die vollständige Betriebssysteminstallation incl. Volkszählersoftware enthält. Installation und Einrichtung sind unter folgendem Link beschrieben.
 +
[https://wiki.volkszaehler.org/howto/raspberry_pi_image]
 +
 +
 +
===Einrichtung der Kanäle im „web Frontend“ und in der Konfigurationsdatei „vzloggerconf“:===
 +
 
 +
===Web Frontend===
 +
 
 +
Jeder Kanal verfügt über eine eindeutige UUID. Soll ein neuer Kanal erstellt werden, so wird zuerst im web Frontend unter Kanal hinzufügen, Reiter Kanal erstellen ein neuer Kanal erstellt. Mit der vzlogger.conf wird dann später die Verknüpfung zwischen dieser UUID und den eingehenden Daten von der seriellen Schnittstelle hergestellt. Bei der Kanalerstellung  ist wichtig unter „Typ“ die Art der zu erfassenden Messdaten auszuwählen. Weiterhin ist der Kanalname unter „Titel“ hinzuzufügen und ggf. die Auflösung, in der die Rohdaten der Messwerte vorliegen, hier mV und mA, also Auflösung 1000. Im Falle des BMS ergeben sich also folgende Kanäle:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Titel !! Typ !! Auflösung
 +
|-
 +
| Zellspannungen || Spannungssensor || 1000
 +
|-
 +
| Ladestrom || Stromsensor || 1000
 +
|-
 +
| Akkutemperatur || Temperatur || Beispiel
 +
|-
 +
| SOC || Sensor || Beispiel
 +
|-
 +
| Balancing Status || Sensor || Beispiel
 +
 
 +
|}
 +
 
 +
Weiterhin sollte eine Farbe ausgewählt werden. Wenn das Webinterface nur im lokalen Netz zugänglich ist, kann auch der Haken bei „öffentlich“ gesetzt werden, damit die Kanäle später auch ohne Kenntnis der UUID wieder gefunden werden können.
 +
 
 +
Die Kanalerstellung im web Frontend wird mit dem Button „erstellen“ abgeschlossen.
 +
 
 +
[[Datei:Abbildung 14 Anlegen eines Kanales im VZ Frontend.pdf|mini|Abbildung 14 Anlegen eines Kanales im VZ Frontend]]
 +
 
 +
Damit volkszähler die Verknüpfung zwischen eingehenden Daten über den USB Port zum jeweiligen Kanal im web Frontend finden kann, ist die für jeden Kanal eindeutig generierte UUID dem web Frontend zu entnehmen. Die Kanaldetails öffnen sich durch Klick auf den Infobutton hinter jedem Kanal.
 +
 
 +
[[Datei:Abbildung 15 Auslesen der UUID eines Kanales im VZ Frontend.pdf|mini|Abbildung 15 Auslesen der UUID eines Kanales im VZ Frontend]]
 +
 
 +
===Einrichten der „vzlogger.conf“===
 +
 
 +
Nun ist die Datei vzlogger.conf auf dem Raspberry unter /etc/vzlogger.conf mit einem Editor (z.B. nano) zu öffnen und die Kanäle, wie hier an einem Beispiel dargestellt, einzufügen. Eine vollständige Liste der Einträge bzgl. BMS in der vzloggerconf ist unter diesem Link erreichbar:
 +
[[:File:vzlogger.zip]]
 +
Die Konfigurationsdatei ist in JSON verfasst. Es ist darauf zu achten, dass die  Klammerung und Kommastellung exakt den Vorgaben entspricht.
 +
 
 +
Hier ein Beispiel eines Kanals, der die Datenpunkte der Messgröße „Strom“ erfasst.
 +
 
 +
<syntaxhighlight lang="c">
 +
{
 +
 
 +
"uuid": "0da9ee10-8148-11e8-8297-31989604f71e", // Strom
 +
                   
 +
"middleware": "http://127.0.0.1/middleware.php",
 +
                   
 +
"aggmode": "AVG"
 +
                   
 +
},
 +
</syntaxhighlight>
 +
         
 +
Erläuterung:
 +
{| class="wikitable"
 +
|-
 +
! Quellcode !! Bedeutung
 +
|-
 +
| Uuid || Eindeutige Kanalzuweisung, Wert wie oben beschrieben aus web Frontend entnehmen
 +
|-
 +
| Middleware || Pfad wie die Datei middleware.php auf dem Raspberry über das web Frontend erreichbar ist
 +
|-
 +
| Identifier || Präfix in der seriellen Datenübertragung (BMS Controllerboard zu Raspberry)
 +
|-
 +
| Aggmode || Aggregationsmodus. Zur Auswahl steht „AVG“ (Durchschnittswert), „MAX“ (Maximalwert) und „SUM“ (für Impulse). Je nach Einstellung werden alle mit „aggtime“ definierten Zeitraum eintreffenden Messwerte  mit dem Entsprechenden Modus zu einem Datensatz zusammengefasst und in die Datenbank eingetragen.
 +
|}
 +
 
 +
Ausgehend vom BMS  müssen die Datenpunkte für die seriellen Datenübertragung folgendermaßen ausgegeben werden:
 +
 
 +
<syntaxhighlight>
 +
"1-3:12.7.0*255("<Messwert>*<Einheit(optional)>)“;
 +
</syntaxhighlight>
 +
 
 +
wobei der erste Teil der von vzlogger zu erkennende Identifier ist. Eine entsprechend angepasste output.cpp, die das passende Ausgabeformat liefert, steht unter folgendem Link zur Verfügung. Damit die serielle Ausgabe über UEXT benutzt werden kann, muss die Funktion output_DOGLCD und die Erzeugung des entsprechenden Objekts im Quellcode deaktiviert werden.
 +
 
 +
Um bei Fehlfunktion schnell die Ursache zu finden ist es oft ratsam, die Log-Datei des vz loggers anzusehen. Diese ist zu finden unter:
 +
 
 +
<syntaxhighlight>
 +
/var/log/vzlogger.log
 +
</syntaxhighlight>
 +
 
 +
===Starten des vzloggers über WinSCP:===
 +
 
 +
WinSCP erlaubt den komfortablen Zugriff auf das Raspberry, um Daten z.B. per Drag and Drop zu verwalten oder über PuTTY der integrierten Eingabeaufforderung per Kommandozeile z.B. Programme auf dem Raspberry zu installieren, Datenbanken zu verwalten oder Dateirechte zu vergeben. Im Loginfenster von WinSCP ist in diesem Fall als Rechnername die fest vergebene IP des Raspberry Pi‘s eingetragen. Das WinSCP Standard Login lautet:
 +
 
 +
SSH-User /Benutzer: pi
 +
 
 +
SS-H-PW: raspberry
 +
 
 +
[[Datei:Abbildung 16 Loginfenster von WinSCP.pdf|mini|Abbildung 16 Loginfenster von WinSCP]]
 +
 
 +
Die Eingabeaufforderung per Kommandozeile wird über Menü → Befehle → „In PuTTY öffnen“ geöffnet.
 +
 
 +
[[Datei:Abbildung 17 PuTTY in WinSCP öffnen.pdf|mini|Abbildung 17 PuTTY in WinSCP öffnen]]
 +
 
 +
[[Datei:Abbildung 18 Eingabe von Konsolenbefehle in PuTTY.pdf|mini|Abbildung 18 Eingabe von Konsolenbefehle in PuttY]]
 +
 
 +
Folgende Befehle sind relevant für den vz-logger und das Raspberry:
 +
{| class="wikitable"
 +
|-
 +
! Befehl in Putty !! Bedeutung
 +
|-
 +
| sudo systemctl start vzlogger || Vz logger neu starten
 +
|-
 +
| sudo systemctl stop vzlogger || Vz logger anhalten
 +
|-
 +
| sudo systemctl status vzlogger || Statusabfrage vz logger
 +
|-
 +
| sudo shutdown –r 0 || Raspberry neu starten
 +
|-
 +
| Raspberry sicher herunterfahren || sudo shutdown –h 0
 +
 
 +
|}
 +
 
 +
Alle BMS Kanäle können als Gruppe zusammengefasst werden, indem wie nachfolgend dargestellt, im Dialog „Kanal erstellen“ unter „Typ“ der Eintrag „Gruppe“ ausgewählt, ein Titel vergeben und mit Erstellen bestätigt wird. Im web Frontend erscheint eine neue Zeilemit einem Ordner mit dem Namen des zuvor ausgewählten „Titels“. Nun können per Drag and Drop alle dem BMS zugeordneten Kanäle in diesen Ordner verschoben werden.
 +
 
 +
[[Datei:Abbildung 19 Gruppe hinzufügen im VZ Frontend.pdf|mini|Abbildung 19 Gruppe hinzufügen im VZ Frontend]]
 +
 
 +
[[Datei:Abbildung 20 Kanäle einer Gruppe hinzufügen im VZ Frontend.pdf|mini|Abbildung 20 Kanäle einer Gruppe hinzufügen im VZ Frontend]]
 +
 
 +
Die vollständig eingerichteten Kanäle sind in folgender Abbildung dargestellt. Mit dem Häkchen auf der linken Seite kann die Darstellung eines Kanals unterdrückt oder angezeigt werden. Im oberen Bereich erfolgt die graphische Darstellung der Daten. Je nach Cursorposition werden die Messdaten in der linken oberen Ecke für alle Kanäle angezeigt.
 +
 
 +
Mit den Navigationsbuttons unterhalb des Diagramms  kann jeder beliebige Zeitraum zur Anzeige eingestellt werden. In der Tabellarischen Ansicht unten  werden Minimum, Maximum und Durchschnittswert im betrachteten Zeitraum sowie der aktuelle bzw. letzte Wert angezeigt.
 +
 
 +
Mithilfe der Push-Funktion werden unter Umgehung der Datenbank alle vom BMS eingehenden Messwerte ohne Aggregation „live“ im Diagramm dargestellt.  und der aktuelle Pushwert unter der Spalte „Aktuell“ angezeigt. (vgl. [https://wiki.volkszaehler.org/software/middleware/push-server], im Standard-Image ist diese Funktion nicht eingerichtet).
 +
 
 +
[[Datei:Abbildung 21 Ansicht VZ Logger im Web Frontend.pdf|mini|Abbildung 21 Ansicht VZ Logger im Web Frontend]]
 +
 
 +
===Export von Datenbanksätzen ===
 +
 
 +
Ausgabe von Logdaten aus der volkszähler Datenbank in einer .csv Datei. Die .csv Dateien können bspw. in Excel oder OpenCalc eingelesen werden.
 +
 
 +
Folgender Link ist entsprechend angepasst in einen beliebigen Browser einzugeben:
 +
 
 +
[http://192.168.1.2/middleware.php/data/c80541f0-26b9-11e7-95ac-f32e1bfb5a39.csv?from=2017-12-01&to=2018-01-01&group=hour]
 +
<syntaxhighlight lang="c">
 +
 
 +
http://192.168.1.2/middleware.php/data/c80541f0-26b9-11e7-95ac-f32e1bfb5a39.csv?from=2017-12-01&to=2018-01-01&group=hour
 +
</syntaxhighlight>
 +
 
 +
 
 +
Aufschlüsselung:
 +
{| class="wikitable"
 +
|-
 +
! Linkphrase !! Bedeutung
 +
|-
 +
| 192.168.1.2 || Webadresse des Volkszähler Frontends
 +
|-
 +
| c80541f0-26b9-11e7-95ac-f32e1bfb5a39 || UUID des gewünschten Kanals
 +
|-
 +
| .csv || Dateiformat der Ausgabe (alternativ auch z.B. json)
 +
|-
 +
| from=2017-12-01&to=2018-01-01 || Zeitraum der Ausgabe der gewünschten Daten
 +
|-
 +
| group=hour || Auflösung der Daten (alternativ hour, min, month)
 +
 
 +
|}
 +
 
 +
'''Beispiel des Abrufs zweier Kanäle gleichzeitig:'''
 +
<syntaxhighlight lang="c">
 +
 
 +
http://192.168.1.2/middleware.php/data.csv?uuid[]=c80541f0-26b9-11e7-95ac-f32e1bfb5a39&uuid[]=24e632f0-9b85-11e6-86da-f5af135fa7f8&from=2017-01-01&to=2018-01-01&group=month]
 +
</syntaxhighlight>
 +
Für weitere und tiefergehende Infos siehe:
 +
[http://wiki.volkszaehler.org/development/api/reference]
 +
 
 +
===Stromverbrauch BMS:===
 +
 
 +
Bei 30V Akkuspannung ca. 5mA ohne und 7mA mit OLED.
 +
 
 +
===Anpassungen im Quellcode für den Prozessor STM32===
 +
 
 +
Im Stammverzeichnis des Quellcodes unter [https://github.com/LibreSolar/BMS_Software] sind folgende Dateien zu finden, die geladen und verknüpft im Kompilierungsprogramm „PlatformIO“ den gesamten Quellcode darstellen:
 +
 
 +
Config.h, Config_5s.h, Config_48v.h, Data_objects.h, Main.cpp, Output.cpp, Output.h, Output_can.cpp, Output_can.h
 +
 
 +
Im Quellcode sind folgende Änderungen vorzunehmen, um den hier beschriebenen Akku mit 28,8V und 9 Zellen an das BMS anzuschließen:
 +
 
 +
'''Config.h'''
 +
Auswahl der PCB Variante 48V
 +
<syntaxhighlight>
 +
// select BMS board
 +
 
 +
//define BMS_PCB_5S
 +
 
 +
#define BMS_PCB_48V
 +
</syntaxhighlight>
 +
 
 +
'''Config_48v.h'''
 +
Auf der Unterseite des Switch N Sense Modul befinden sich bis zu vier parallel geschaltete Widerstände (R11 bis R14). Der Berechnete Summenwiderstandswert muss hier in den Quellcode eingetragen werden. Im vorliegenden Fall sind drei Widerstände mit 3mOhm parallel geschaltet, was einen Summenwiderstandswert von 1mOhm entspricht.
 +
<syntaxhighlight>
 +
#define SHUNT_RESISTOR 1.0  // mOhm
 +
</syntaxhighlight>
 +
 
 +
'''main.cpp'''
 +
 
 +
Parameter setzen für die Akkuschutzfunktion (erster Wert in Klammer: Strom in mA, zweiter Wert: Zeit in us oder ms)
 +
<syntaxhighlight lang>
 +
// ToDo: Ensure that these settings are set even in case of initial communication error
 +
 
 +
    BMS.setTemperatureLimits(-20, 45, 0, 45);
 +
   
 +
    BMS.setShuntResistorValue(SHUNT_RESISTOR);
 +
   
 +
    BMS.setShortCircuitProtection(35000, 200);  // delay in us
 +
   
 +
    BMS.setOvercurrentChargeProtection(30000, 200);  // delay in ms
 +
   
 +
    BMS.setOvercurrentDischargeProtection(30000, 320); // delay in ms
 +
   
 +
    BMS.setCellUndervoltageProtection(2800, 2); // delay in s
 +
   
 +
    BMS.setCellOvervoltageProtection(3650, 2);  // delay in s
 +
 
 +
    BMS.setOCV(OCV);
 +
   
 +
    BMS.setBatteryCapacity(72000);  // mAh
 +
 
 +
    BMS.update();  // get voltage and temperature measurements before switching on
 +
 
 +
    BMS.setBalancingThresholds(5, 3350, 5);  // minIdleTime_min, minCellV_mV, maxVoltageDiff_mV
 +
   
 +
    BMS.setIdleCurrentThreshold(6000);
 +
   
 +
    BMS.enableAutoBalancing();
 +
</syntaxhighlight>
 +
 
 +
 
 +
 
 +
 
 +
 
 +
[http://github.com/LibreSolar/BMS48V/blob/master/README.md LibreSolar BMS48V on GitHub]

Aktuelle Version vom 25. August 2022, 19:14 Uhr

Anleitung zum Aufbau und Inbetriebnahme

Folgende Anleitung zum Aufbau und zur Inbetriebnahme des BMS 24V-48V von LibreSolar soll einen Leitfaden darstellen, um den selbständigen Nachbau und die Inbetriebnahme des BMS zu ermöglichen. Der Leitfaden orientiert sich am Aufbau eines BMS für einen LiFePO Akkumulator mit 9 Zellen (28,8V) integriert in einem DC Solarstromspeicher und hat keinen Anspruch auf Vollständigkeit.

Randdaten des realisierten Projektes:

  • Akkupack 9x 3,2V 60Ah Innopower LiFePo Akkumulatoren, verspannt mit Kunststoffband
  • Max. Ladestrom 30A über 2x MPPT 100-15 Victron Laderegler
  • Max. Entladestrom von 11A über Wechselrichter AE Conversion

Grundlegende Informationen zum BMS sind unter folgenden Links zu finden:

  • Genereller Überblick über das BMS, BMS-Features, Einordnung, zukünftige Entwicklungen, bisheriger Einsatz etc. [1]
  • Vollständiges Repository aller Daten (Sourcecode, Leiterplattenlayouts) für das BMS, neueste Entwicklungen, Verbesserungen, Fortschritte im Projekt, behobene Bugs etc. [2]
  • Überblick über die verschiedenen Elektronikentwicklungen von Martin Jäger, Einordnung BMS 24-48V [3]
  • Beschreibung der Hardware BMS Controllerboard [4]
  • Beschreibung der Hardware des Switch N Sense [5]

Zum selbstständigen Aufbau und zur Inbetriebnahme des BMS sind folgende Kenntnisse unbedingt erforderlich:

  • Grundkenntnisse der Elektrotechnik
  • Ggf. Löten von SMD Bauteilen
  • handwerkliches Geschick

Systemübersicht

Das LibreSolar BMS 24-48V besteht aus zwei Hauptkomponenten: das BMS Controllerboard und das BMS Leistungsboard.


Das BMS Controllerboard ist zuständig für die Spannungsüberwachung der angeschlossenen Zellen, deren Balancing (Entladung von Zellen mit zu hohem Spannungsniveau über Widerstände), Temperaturüberwachung, Stromüberwachung, Berechnung des SoC, der Ansteuerung des BMS Leistungsboards zur Unterbrechung des Lade- und Entladeprozesses im Fehlerfall über Leistungsmosfets, der Ansteuerung des Kommunikationsinterfaces (CAN, UART/I2C/SPI) und der Abarbeitung des Hauptprogramms.

Das BMS Leistungsboard (Switch-N-Sense) enthält je 2 parallel geschaltete Hochleistungsmosfets für jede Stromrichtung in antiserieller Anordnung und einen High-Side-Treiber. Die Ansteuerung erfolgt über das BMS Controllerboard. Dort befindet sich auch der Shunt für die Strommessung. Der dazugehörige A/D-Wandler sitzt im bq769x0. Ein maximaler Strom von 80A kann geschalten werden, wobei dabei unbedingt Kühlkörper auf den Mosfets (Unterseitig auf dem BMS Leistungsboard) zur Abfuhr der Verlustleistung angebracht werden müssen. Kühlungsbedarf besteht insbesondere auch dann, wenn die MOSFETs nur in einer Stromrichtung durchgeschaltet sind und der Strom durch die Body-Dioden der anderen MOSFETs fließt.


Folgendes Bild beschreibt die wesentlichen Bestandteile der Platinen:

Abbildung 2: Beschreibung der wesentlichen Bestandteile der BMS Platinen


Das aktuelle eagle Layout, Stromlaufpläne etc. inklusive Beschreibung aller Bauteile sind unter [6] sowie [7] zu finden.


Das eigentliche Zellbalancing (Überwachung, Balancing und Hauptsicherheitsfeatures) führt der Balancing-IC bq769x0 durch. Dieser wird je nach Anzahl der angeschlossenen Zellen und Spannungsniveau des Akkupacks ausgewählt:

bq76920: 3-5 Zellen Spannung ist abhängig von Zellchemie, BMS kann nicht nur LiFePO

bq76930: 6-10 Zellen

bq76940: 9-15 Zellen

Das vorliegende Platinenlayout BMS 48V ist für den IC bq76930 (6-10 Zellen) bzw. bq76940 (9-15 Zellen ) ausgelegt. Die abweichende Bestückung beim Einsatz des bq76930 ist im Schaltplan angegeben.


Ist ein BMS für ein Akku mit bq76920: 3-5 Zellen notwendig, so kann das 5-cell Battery Management System (12V) von Matin Jäger verwendet werden [8]. Der hier in der Anleitung verwendete Balancing IC ist der bq76930. Das Datenblatt „bq769x0 Family Top 10 Design Considerations“ bzw. „bq769x0 3-Series to 15-Series Cell Battery Monitor Family for Li-Ion and Phosphate Applications“ ist unter [9] zu finden. Der Balancingstrom von ca. 100 mA bei 3,3V wird bestimmt durch die 33Ohm Balancingwiderstände. Allerdings verwendet der bq769x0 pro Zyklus 30% der Zeit für die Messung und nur 70% für das Balancing, so dass sich ein effektiver Balancingstrom von ca. 70mA einstellt. Weiterhin können bedingt durch das Schaltungsdesign nebeneinanderliegende Zellen nicht gleichzeitig entladen werden.


Im oben dargestellten Bild ist der IC (bq76930) (6-10 Zellen ) verwendet, sodass die Balancingwiderstände für die Zellen (11-15) nicht bestückt sind.

Werden weniger als 10 bzw. 15 Zellen verwendet, müssen überzählige Zellanschlüsse nach einem im Datenblatt dargestellten Schema überbrückt werden. Dies kann entweder durch verbinden der betreffenden Zellanschlusskabel oder durch Lötbrücken direkt an den Pins des Molex-Steckverbinders auf der Platine erreicht werden. Im vorliegenden Projekt (9 Zellen) wurden die Kontakte C8 und C9 gebrückt. In folgender Tabelle, entnommen aus dem Datenblatt des bq76930 auf Seite 46/47, ist beispielhaft der notwendige Zellkurzschluss für eine unterschiedliche Zellanzahl dargestellt. Abbildung 3 Zellverbindungen unterschiedlicher Akkupacks beispielhaft für bq76930.pdf


Das Datenblatt für den Prozessor STM32F072 ist verfügbar unter: [10]


Für das vorliegende Setup benötigen wir keine CAN Schnittstelle, sondern verwenden den UEXT (Universal EXTension) Anschluss. Im ersten Schritt wird daran bspw. über einen 10-poligen Wannenstecker ein I2C fähiges Display (OLED SSD1306) an dem BMS Controllerboard angeschlossen, um so direkte Auskunft zu Lade-/Entladestrom, Akkuladezustand und Spannungsniveau der einzelnen Zellen zu bekommen.


Über die UEXT Schnittstelle stehen die seriellen Schnittstellen I2C, SPI und RS232 bereit (auch gleichzeitig!), um mit anderer Hardware zu kommunizieren. Der UEXT Standard wird unter folgenden Links erklärt:

[11][12][13]

Anschlussreihenfolge für OLED:

Anschlusspin OLED UEXT Pin
I2C1_SDA Pin 6
GND Pin 2
+3V3 Pin 1
I2C1_SCL Pin 5

Cortex Stecker

An den Cortex-Stecker auf dem BMS Controllerboard wird der Cortex ST-Link Adapter angeschlossen (verfügbar unter [14] Bestellung unter: [15]) mithilfe dessen und einem Nucleo Board der Flash- bzw. Debug-Vorgang des STM32 erfolgt. Genaue Vorgehensweise siehe unter Flashvorgang.).

Abbildung 4: Cortex_ST-Link_Adapter


Batterieanschlussklemmen

Die Anschlussblöcke für Batterie und Stromverbraucher auf dem BMS Leistungsboard sind PowerOne Buchsen von Würth Electronic (Nr. 93172) [16] Würth Power Elements WP-BUCF (order code 7461059) und müssen z.B. mithilfe eines Schraubstockes in das BMS Leistungsboard eingepresst werden. Dies ist auch bei schon bestückter Platine möglich, erfordert aber folgende speziell ausgeschnittene bzw. ausgelaserte Unterlegscheiben bspw. aus Holz oder stabiler Pappe.

Abbildung 5 Unterlegscheibe aus Holz


Die Kontur ist der Datei „Switch-N-Sense.dxf“ zu entnehmen, exportiert aus dem Eagle Board Layout des BMS Leistungsboards. File:Switch-N-Sense.zip

Alternativ kann auch sehr weiches Holz (z.B. Balsaholz) als Widerlager verwendet werden, in das sich die Metallfüße eindrücken können.

Die c-Hack Batslergruppe aus Calw haben sich zum Einpressen der Buchsen eine professionelle Presse gebaut, deren Beschreibung unter folgenden Links zu finden ist:

[17][18] [19][20]


Die Anschlussblöcke verfügen jeweils über ein M6 Innengewinde zur Befestigung der Kabelschuhe der Batterie- und Anlagenanschlussklemmen mit M6x10 oder M6x12 Flachkopf Sechskant- oder Innensechskantschrauben.

Die 18 bzw. 6 poligen „Molexstecker“ (Typ Micro Fit 3,0mm bzw. Würth Elektronik „3.00mm Micro Power Connector WR-MPC3“) finden u.a. auch in der Automobilbranche ihre Anwendung und werden im vorliegenden Projekt mithilfe einer „KNIPEX Crimpzange“ konfektioniert.

Abbildung 6 Crimpzange

Da diese Crimpzange sehr hochpreisig ist kann folgende Universalzange ein guter Kompromiss darstellen: [21]

Für die Crimpung der einzelnen Litzen werden Litzenschuhe von folgendem Typ (ebenfalls Würth Sortiment) verwendet: „3.00mm Female Terminal WR-MPC3“ Nachdem der „Molexstecker“ vollständig in das BMS Controllerboard eingesteckt wurde, ist dieser nur noch schwer (mit viel Mühe) lösbar. Im Testbetrieb möglichst nicht bis zum Einrasten einstecken!


Die Funktion des An-Aus Knopf ist hier [22] ausführlich beschrieben ( Stichwort „Boot-up procedure and power supply“ )

Leistungsmosfets

Es werden vier SMD Leistungsmosfets im BMS Leistungsboard verwendet ( Typ FDMT80080DC). Im vorliegenden Projekt sind die -MOSFETs mit einer Spannung von 60V verwendet.. Unter folgendem Link gibt es Hinweise zu möglichen Mosfets: [23]

Die Bestückung der SMD Mosfets erfolgt mithilfe eines Reflowofens und sollte, um andere Bauteile nicht zu beschädigen, somit am Anfang des Bestückungsprozesses erfolgen.

Eigenheiten des bq769x0

Bis zu drei Temperatursensoren sind am BMS Controllerboard anschließbar und mit dem Controller bq769x0 verbunden. Diese liegen auf unterschiedlichen Spannungsniveaus. D.h. ein Zusammenschalten der Temperatursensoren zerstört das BMS-IC!

Ist kein Temperatursensor angeschlossen, dann funktioniert der bq769x0 nicht ordentlich. Abhilfe schafft hier bspw. ein Hilfswiderstand (10kOhm), der anstelle des Temperatursensors angeschlossen werden kann. Verwendete Temperatursensoren: NTC Thermistor Typ: TTC3A103F34D3EY

Hardwareänderungen

Momentan sollten noch vor Inbetriebnahme des BMS Hardwareänderungen am BMS Controllerboard (Überbrückungen und Leiterbahnunterbrechungen) durchgeführt werden, um fehlerhafte Spannungsmessung an Zelle 5/6 und evtl. Zelle 10/11 zu vermeiden.

Eine Dokumentation ist unter [24] zu finden.

Eine Aktualisierung des Boardlayouts ist inzwischen fertiggestellt und unter dem Abschnitt Aktualisierung des Boardlayouts zu finden.

Abbildung 7 Hardwareänderungen am BMS Controllerboard

Schematischer Aufbau, Komponenten Akkumulator

Grundlegendes

Im vorliegenden Projekt werden neun Zellen a 3,2V des Lithium-Eisen-Mangan-Phosphat Akku von Innopower INNO-LFMP 60 AH verwendet.

Abbildung 8 Lithium-Eisen-Mangan-Phosphat Akkumulator INNO-LFMP 60 AH

Abmessungen Zelle: 125x65x185mm, Gewicht:ca.2,0 kg pro Zelle. Innopower liefert den Akkupack per Post fertig mit Kunststoffband verspannt incl. Polverbinder, Polschrauben und Zellabdeckung. Datenblatt zu finden unter: [25]. Durch chemische Prozesse beim Auf- und Entladeprozess kommt es zu volumetrischen Ausdehnungen des Akkublocks. Um Verformungen zugunsten höherer Lebenserwartung klein zu halten wird empfohlen, die Zellen z.B mit einem Drahtseil oder mit Gewindestangen und beidseitigen Endplatten fest zusammenzuspannen. Die Zyklenzahl ist bei einer DoD (Depth of Discharge) von 80% mit >= 5000 angegeben.

In folgendem Bild ist die gemessene Entladungskurve des Akkupacks dargestellt entladen mit einer konstanten Last von 105W.

Abbildung 9 Entladungskurve gemessen bei einer konstanten Last von 105W

Folgendes Ergebnis wurde ermittelt:

- Kapazität: 70,8Ah bzw. 118% der Nennkapazität - Energieinhalt: 2,07kWh

Wie in der Abbildung zu erkennen, bleiben die Zellspannungen fast über den ganzen Bereich sehr nah beisammen. Gegen Ende fächern die Kurven auf, was auf kleine Toleranzen in der Kapazität der Zellen hinweist. Der vorliegende Akkumulator wird in den folgenden Spannungsgrenzen betrieben:

Schwellwert Überspannung: 3,65V/Zelle

Schwellwert Unterspannung: 2,85V/Zelle

Ladeschlussspannung im Normalbetrieb: 3,5V/Zelle

Entladeschlussspannung im Normalbetrieb: 3,1V/Zelle

Im bq769x0 sind keine Hysteresen implementiert.


Anschluss Akkumulator

Batterieanschlusskabel

In folgender Abbildung ist der Anschluss der Akkumulatorpole an das BMS Leistungsboard dargestellt. Verwendet wurde als Batterieanschlusskabel in rot und schwarz eine „ADERLEITUNG 1X16 RT H07V-K“. Der Anschluss an das Leistungsboard erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 16mm^2 und einem Lochdurchmesser für M6 Schrauben. Der Anschluss an den Akkumulator erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 16mm^2 und einem Lochdurchmesser für M4 Schrauben (4,3mm, Polschrauben im Lieferumfang Akkumulator).

Abbildung 10 Anschluss des BMS Leistungsboards

Anschlusskabel für Zellspannungsmessung und Temperatursensoren

In folgender Abbildung ist der Anschluss der einzelnen Akkumulatorzellen an das BMS Controllerboard dargestellt. Die konkrete Belegung der „Molexstecker“ ist in untenstehender Tabelle sowie auch im Eagle Boardlayout hinterlegt. Verwendet wurde hier für die Akkumulatorzellen folgende Kabelqualität: Steuerleitung Ölflex, 12 Adern 0,5mm^2 Grau Für die Temperatursensoren wurde hier folgende Kabelqualität verwendet: Steuerleitung Ölflex, 7Adern 0,5mm^2 Grau Die zwei Temperatursensoren werden in der Mitte zwischen Zelle 3 und 4 sowie 6 und 7 angeordnet. Der Anschluss an die Akkumulatorzellen erfolgt mit Ringkabelschuhen für ein Kabel mit Querschnitt 1mm^2 und einem Lochdurchmesser für M4 Schrauben (4,3mm, Polschrauben im Lieferumfang Akkumulator).

Abbildung 11 Anschluss der Temperatursensoren sowie der Zellspannungsmessung

Für die „Molexstecker“ gilt folgende Pinbelegung: Anschlüsse für Temperaturmessung

Pin Nummer Pin Bezeichnung Farbe Bemerkung
1 GND schwarz Sensor 1 -
4 TS1 weiß Sensor 1 +
2 VC5X braun Sensor 2 -
5 TS2 grau Sensor 2 +
3 VC10X blau Sensor 3 - (unbelegt beim BQ76930)
6 TS3 rot Sensor 3 + (unbelegt beim BQ76930)

Anschlüsse für Zellspannungsmessung

Pin Nummer Pin Bezeichnung Farbe Bemerkung
1 GND schwarz Zelle 1 -
10 C0 grün-gelb Zelle 1 -
2 C1 grau Zelle 1 +
11 C2 braun Zelle 2 +
3 C3 blau Zelle 3 +
12 C4 lila Zelle 4 +
4 C5 rosa Zelle 5 +
13 C6 orange Zelle 6+
5 C7 gelb Zelle 7 +
14 C8 weiß Zelle 8 +
6 C9 - auf Platine gebrückt mit C8
15 C10 transparent Zelle 9 +
7 C11 - unbelegt beim BQ76930
16 C12 - unbelegt beim BQ76930
8 C13 - unbelegt beim BQ76930
17 C14 - unbelegt beim BQ76930
9 C15 - unbelegt beim BQ76930
18 PWR rot Zelle 9 +


Aktualisierung des Boardlayouts

Die Hardwareänderungen wurden in zwei Varianten durchgeführt. Bei beiden Varianten wurde folgendes geändert:

  • Korrekter Anschluss des CAN Microcontrollers Pin „CAN_STB“ am BQ76940
  • Korrekter Anschluss der Zellen 5/6 und 10/11 (ohne gegenseitige Wechselwirkung)

Auchtung: Bitte beachte die dadurch geänderte Steckerbelegung des Molexsteckers für die Zellspannungsmessung


Variante 1: Das Boardlayout des BMS Controllerboards ist mit vergrößerter Platine konstruiert, sodass diese mithilfe von Schrauben im Hutschienengehäuse von Apra Norm „Apra Rail F06" oder „Apra Rail M06“ mit den Abmessungen (B x L x H) 107 mm x 90 mm x 48 mm montiert werden kann. Mit zwei selbstschneidende Schrauben kann die Platine direkt im Gehäuse festgeschraubt werden. Mithilfe zweier weiterer Abstandshalter mit Innengewinde M3, Länge 8 mm die mit dem Gehäuseboden verklebt werden kann die Platine bei Bedarf mit weiteren 2 M3 Schrauben sicher im Gehäuse fixiert werden. Die aktuellen Dateien des Layouts und des Schaltplans von Variante 1 sowie die Stückliste sind in folgendem Repo abgelegt: https://github.com/LibreSolar/bms-15s80-sc/tree/rev2

Abbildung 12.1 Hardwareänderungen Variante 1


Variante 2:

Das BMS Controller- und Leistungsboard sind in einer Eagle Datei vereinigt. Dadurch lassen sich die Platinenherstellungs- und bestückungskosten reduzieren. Beide Boards lassen sich an ihrer Trennstelle zersägen.

Abbildung 12.2 Hardwareänderungen Variante 2

Die jeweils aktualisierten Dateien des Layouts und des Schaltplans sind unter folgendem Link zu finden:

Die jeweils aktualisierten Dateien des Layouts und des Schaltplans sind unter folgendem Link zu finden: File:LibreSolar_BMS48V_mit_SNS.zip

Folgende Abbildungen zeigen das aktualisierte und modifizierte Boardlayout und die dazugehörige Steckerbelegung (20 Pins) für den Anschluss an den in diesem Projekt verwendeten 9-zelligen Akku.

Steckerbelegung (20 Pins) des modifiziertes Platinenlayouts für den vorliegenden 9 Zelligen Akku

Anschlüsse für Temperaturmessung

Pin Nummer Pin Bezeichnung Farbe Bemerkung
1 GND schwarz Sensor 1 -
4 TS1 weiß Sensor 1 +
2 VC5X braun Sensor 2 -
5 TS2 grau Sensor 2 +
3 VC10X blau Sensor 3 - (unbelegt beim BQ76930)
6 TS3 rot Sensor 3 + (unbelegt beim BQ76930)

Anschlüsse für Zellspannungsmessung

Pin Nummer Pin Bezeichnung Farbe Bemerkung
1 GND schwarz Zelle 1 -
11 C0 grün-gelb Zelle 1 -
2 C1 grau Zelle 1 +
12 C2 braun Zelle 2 +
3 C3 blau Zelle 3 +
13 C4 lila Zelle 4 +
4 C5 rosa Zelle 5 +
14 C5.1 - auf Platine gebrückt mit C5
5 C6 orange Zelle 6 +
15 C7 gelb Zelle 7 +
6 C8 weiß Zelle 8 +
16 C9 - auf Platine gebrückt mit C8
7 C10 transparent Zelle 9 +
17 C10.1 - unbelegt beim BQ76930
8 C11 - unbelegt beim BQ76930
18 C12 - unbelegt beim BQ76930
9 C13 - unbelegt beim BQ76930
19 C14 - unbelegt beim BQ76930
10 C15 - unbelegt beim BQ76930
20 PWR rot Zelle 9 +


Platinenherstellung und Bestückung

Auf [26] ist das Eagle Layout des BMS Controller- und Leistungsboards incl. aller Schaltpläne und bestückter elektronsicher Bauteile zu finden. Es ist darauf zu achten, bei externer Bestückung den richtigen BQ769x0 einzupflegen. Die bisherigen Platinen wurden bei https://aisler.net/ bestellt und gefertigt. Da das Bestücken für Einzelplatinen aufgrund der Rüstkosten für die Bestückungsmaschine sehr hoch sind, kostet dies derzeit bei einer Abnahme >10 Stück immer noch > 150€ für Controller- und Leistungsboard.

Im vorliegenden Projekt wurden die SMD Bauteile von Hand bestückt.

Gehäuse, Platinenbefestigung

Ein Gehäuse steht im .step bzw. . FCStd als Hutschienengehäuse bzw. zur Montage auf festem Untergrund zur Verfügung und kann als Vorlage zum 3d Druck verwendet werden.

File:BMS Gehäuse.zip

Hierbei empfehlen sich folgende Einstellparameter bei der Verwendung von PLA Kunststoff:

Überschrift Überschrift
Drucker Ultimaker Original+
Material PLA 3mm Draht
Slicer Ultimater Cura_Engine 3.6.0
Schichtdicke 0,1mm
Wanddicke 0,8mm
Anzahl Wandlinien: 3
Obere/untere Dicke 0,8mm
Füllung 80%
Drucktemperatur 200°C
Temperatur Druckplatte 60°C
keine Kühlung Beispiel
Stützstruktur aktiviert Beispiel
Druckplattenhaftung Brim

Im Gehäuse ist auf der Rückseite des BMS Leistungsboard genügend Platz, um bei hohen Schaltströmen Kühlkörper für die Mosfets anzubringen (Kühlkörpertyp: Kühlkörper für PGA, 25 x 28 x 15,3 mm). Nach dem Druck muss die Stützkonstruktion entfernt werden. Weiterhin sind alle Löcher für ein M3 Gewinde mit einem Durchmesser von 2,5mm aufzubohren und anschließend ein M3 Gewinde einzuschneiden. Durchgangs und Senklöcher sind ebenfalls entsprechend aufzubohren.

Folgende zusätzliche Bauteile sind für den Zusammenbau notwendig:

- Gehäuseschraube 4x M3 Länge 50mm

- 8x M3 Schraube zur Befestigung der Platinen

- 4x M4 Schraube Länge 50mm mit Mutter zur Befestigung der Hutschienenaufnahme

- 2x Lichtleiter „Cliplite 4mm Litepipe Vertical“ für 4,3mm Bohrloch. Länge: 2000‘‘???

Abbildung 13: 3d Druckgehäuse BMS

Folgende Anpassungen sind im CAD Modell noch einzupflegen:

Funktionell:

- Anpassung der Befestigungslöcher des BMS Leistungsboards an das exakte Maß der Platine

- Aufdickung der Wandstärke des Sackloches der Gehäuseschrauben

Optisch:

- Anpassung der Lüftungsschlitze auf eine Höhe

- Verkleinerung der vertikalen Schattenfuge

- Vergrößerung der Gehäuseverrundung am Deckel

- Einfügen des open source hardware logos sowie der „on/off“ Beschriftung

Flashvorgang

Vor Inbetriebnahme des BMS muss der Hauptprozessor mithilfe eines beliebigen Nucleo Boards geflasht werden. Dies erfolgt, wie unter Abschnitt „Cortex Stecker“ schon erwähnt, mithilfe des „Cortex ST-Link Adapter“ sowie der Entwicklungsumgebung „PlatformIO“. Der aktuelle Quellcode zum kompilieren ist zu finden unter [27]

Wesentliche Anpassungen dieses Quellcodes an die jeweilige Zellchemie und Akkuaufbau sind dem Kapitel „Anpassungen im Quellcode für den Prozessor STM32„ zu entnehmen.

Das Nucleo Board wird mithilfe eines Mini-USB-Kabels an den Computer angeschlossen. Flashreihenfolge:

1. 18-poliger Stecker für die Zellanschlüsse einstecken (Cortexstecker liefert keine Betriebsspannung)

2. Quellcode im Programm PlatformIO öffnen

Notwendige Anpassungen bzgl. BMS-Typ und Akku-Typ vornehmen: config.h, config_48v.h, main.cpp, nach Bedarf output.cpp. Siehe hierzu Abschnitt Anpassungen im Quellcode für den Prozessor STM32

3. BMS ohne Anschluss der Batterie / Verbraucher / Raspberry über den „Cortex ST-Link Adapter“ an das Nucleo Board anschließen

4. Nucleo Board über Mini USB Kabel an Computer anschließen

5. On/Off Taster am BMS Controllerboard betätigen

6. Quellcode kompilieren und flashen

7. Nach dem Kompilierungsvorgang Verbindung zwischen Computer und Nucleo Board trennen und BMS Controllerboard am Verwendungsort montieren.

Anschluss an Raspberry Pi zur Überwachung und Datenauswertung

Es besteht die Möglichkeit über die UEXT Schnittstelle neben einem Display (OLED) zur Überwachung des BMS ein Raspberry Pi anzuschließen, das mithilfe der Open Source Software „volkszähler“ alle ausgegebenen BMS Daten graphisch für alle gewünschten Zeitspannen darstellt und in einer Datenbank speichert.

Es ist weiterhin möglich aus der Datenbank kumulierte Werte für beliebige Zeitspannen berechnen zu lassen und via JSON oder CSV zu exportieren.

Zur Einrichtung der Datenüberwachung mithilfe eines Raspberry Pi benötigt es folgende Hardware:

- Raspberry Pi, Speicherkarte, Netzteil

- USB Schnittstellenwandler (Adapter USB-UART: CP2102) (alternativ interner UART des Raspberry Pi)

Pin „USART2_TX“ der UEXT Schnittstelle wird mit Pin RXD des USB Schnittstellenwandlers verbunden und dieser wird in einen USB Port des Raspberrys eingesteckt. Weiterhin GND von BMS und Wandler verbinden. Vorsicht: USB-Adapter mit 3,3V Logikpegel verwenden, der TX-Pin des STM32 ist nicht 5V tolerant. . Vor Anschluss des Adapters Spannung kontrollieren (manche Adapter auf Basis des CH340G arbeiten bspw. mit 5V!).

Auf volkszaehler.org wird ein Image für den Raspberry Pi angeboten, das die vollständige Betriebssysteminstallation incl. Volkszählersoftware enthält. Installation und Einrichtung sind unter folgendem Link beschrieben. [28]


Einrichtung der Kanäle im „web Frontend“ und in der Konfigurationsdatei „vzloggerconf“:

Web Frontend

Jeder Kanal verfügt über eine eindeutige UUID. Soll ein neuer Kanal erstellt werden, so wird zuerst im web Frontend unter Kanal hinzufügen, Reiter Kanal erstellen ein neuer Kanal erstellt. Mit der vzlogger.conf wird dann später die Verknüpfung zwischen dieser UUID und den eingehenden Daten von der seriellen Schnittstelle hergestellt. Bei der Kanalerstellung ist wichtig unter „Typ“ die Art der zu erfassenden Messdaten auszuwählen. Weiterhin ist der Kanalname unter „Titel“ hinzuzufügen und ggf. die Auflösung, in der die Rohdaten der Messwerte vorliegen, hier mV und mA, also Auflösung 1000. Im Falle des BMS ergeben sich also folgende Kanäle:

Titel Typ Auflösung
Zellspannungen Spannungssensor 1000
Ladestrom Stromsensor 1000
Akkutemperatur Temperatur Beispiel
SOC Sensor Beispiel
Balancing Status Sensor Beispiel

Weiterhin sollte eine Farbe ausgewählt werden. Wenn das Webinterface nur im lokalen Netz zugänglich ist, kann auch der Haken bei „öffentlich“ gesetzt werden, damit die Kanäle später auch ohne Kenntnis der UUID wieder gefunden werden können.

Die Kanalerstellung im web Frontend wird mit dem Button „erstellen“ abgeschlossen.

Abbildung 14 Anlegen eines Kanales im VZ Frontend

Damit volkszähler die Verknüpfung zwischen eingehenden Daten über den USB Port zum jeweiligen Kanal im web Frontend finden kann, ist die für jeden Kanal eindeutig generierte UUID dem web Frontend zu entnehmen. Die Kanaldetails öffnen sich durch Klick auf den Infobutton hinter jedem Kanal.

Abbildung 15 Auslesen der UUID eines Kanales im VZ Frontend

Einrichten der „vzlogger.conf“

Nun ist die Datei vzlogger.conf auf dem Raspberry unter /etc/vzlogger.conf mit einem Editor (z.B. nano) zu öffnen und die Kanäle, wie hier an einem Beispiel dargestellt, einzufügen. Eine vollständige Liste der Einträge bzgl. BMS in der vzloggerconf ist unter diesem Link erreichbar: File:vzlogger.zip Die Konfigurationsdatei ist in JSON verfasst. Es ist darauf zu achten, dass die Klammerung und Kommastellung exakt den Vorgaben entspricht.

Hier ein Beispiel eines Kanals, der die Datenpunkte der Messgröße „Strom“ erfasst.

{

					"uuid": "0da9ee10-8148-11e8-8297-31989604f71e",			// Strom
                    
					"middleware": "http://127.0.0.1/middleware.php",
                    
					"aggmode": "AVG"
                    
				},

Erläuterung:

Quellcode Bedeutung
Uuid Eindeutige Kanalzuweisung, Wert wie oben beschrieben aus web Frontend entnehmen
Middleware Pfad wie die Datei middleware.php auf dem Raspberry über das web Frontend erreichbar ist
Identifier Präfix in der seriellen Datenübertragung (BMS Controllerboard zu Raspberry)
Aggmode Aggregationsmodus. Zur Auswahl steht „AVG“ (Durchschnittswert), „MAX“ (Maximalwert) und „SUM“ (für Impulse). Je nach Einstellung werden alle mit „aggtime“ definierten Zeitraum eintreffenden Messwerte mit dem Entsprechenden Modus zu einem Datensatz zusammengefasst und in die Datenbank eingetragen.

Ausgehend vom BMS müssen die Datenpunkte für die seriellen Datenübertragung folgendermaßen ausgegeben werden:

"1-3:12.7.0*255("<Messwert>*<Einheit(optional)>)“;

wobei der erste Teil der von vzlogger zu erkennende Identifier ist. Eine entsprechend angepasste output.cpp, die das passende Ausgabeformat liefert, steht unter folgendem Link zur Verfügung. Damit die serielle Ausgabe über UEXT benutzt werden kann, muss die Funktion output_DOGLCD und die Erzeugung des entsprechenden Objekts im Quellcode deaktiviert werden.

Um bei Fehlfunktion schnell die Ursache zu finden ist es oft ratsam, die Log-Datei des vz loggers anzusehen. Diese ist zu finden unter:

/var/log/vzlogger.log

Starten des vzloggers über WinSCP:

WinSCP erlaubt den komfortablen Zugriff auf das Raspberry, um Daten z.B. per Drag and Drop zu verwalten oder über PuTTY der integrierten Eingabeaufforderung per Kommandozeile z.B. Programme auf dem Raspberry zu installieren, Datenbanken zu verwalten oder Dateirechte zu vergeben. Im Loginfenster von WinSCP ist in diesem Fall als Rechnername die fest vergebene IP des Raspberry Pi‘s eingetragen. Das WinSCP Standard Login lautet:

SSH-User /Benutzer: pi

SS-H-PW: raspberry

Abbildung 16 Loginfenster von WinSCP

Die Eingabeaufforderung per Kommandozeile wird über Menü → Befehle → „In PuTTY öffnen“ geöffnet.

Abbildung 17 PuTTY in WinSCP öffnen
Abbildung 18 Eingabe von Konsolenbefehle in PuttY

Folgende Befehle sind relevant für den vz-logger und das Raspberry:

Befehl in Putty Bedeutung
sudo systemctl start vzlogger Vz logger neu starten
sudo systemctl stop vzlogger Vz logger anhalten
sudo systemctl status vzlogger Statusabfrage vz logger
sudo shutdown –r 0 Raspberry neu starten
Raspberry sicher herunterfahren sudo shutdown –h 0

Alle BMS Kanäle können als Gruppe zusammengefasst werden, indem wie nachfolgend dargestellt, im Dialog „Kanal erstellen“ unter „Typ“ der Eintrag „Gruppe“ ausgewählt, ein Titel vergeben und mit Erstellen bestätigt wird. Im web Frontend erscheint eine neue Zeilemit einem Ordner mit dem Namen des zuvor ausgewählten „Titels“. Nun können per Drag and Drop alle dem BMS zugeordneten Kanäle in diesen Ordner verschoben werden.

Abbildung 19 Gruppe hinzufügen im VZ Frontend
Abbildung 20 Kanäle einer Gruppe hinzufügen im VZ Frontend

Die vollständig eingerichteten Kanäle sind in folgender Abbildung dargestellt. Mit dem Häkchen auf der linken Seite kann die Darstellung eines Kanals unterdrückt oder angezeigt werden. Im oberen Bereich erfolgt die graphische Darstellung der Daten. Je nach Cursorposition werden die Messdaten in der linken oberen Ecke für alle Kanäle angezeigt.

Mit den Navigationsbuttons unterhalb des Diagramms kann jeder beliebige Zeitraum zur Anzeige eingestellt werden. In der Tabellarischen Ansicht unten werden Minimum, Maximum und Durchschnittswert im betrachteten Zeitraum sowie der aktuelle bzw. letzte Wert angezeigt.

Mithilfe der Push-Funktion werden unter Umgehung der Datenbank alle vom BMS eingehenden Messwerte ohne Aggregation „live“ im Diagramm dargestellt. und der aktuelle Pushwert unter der Spalte „Aktuell“ angezeigt. (vgl. [29], im Standard-Image ist diese Funktion nicht eingerichtet).

Abbildung 21 Ansicht VZ Logger im Web Frontend

Export von Datenbanksätzen

Ausgabe von Logdaten aus der volkszähler Datenbank in einer .csv Datei. Die .csv Dateien können bspw. in Excel oder OpenCalc eingelesen werden.

Folgender Link ist entsprechend angepasst in einen beliebigen Browser einzugeben:

[30]

http://192.168.1.2/middleware.php/data/c80541f0-26b9-11e7-95ac-f32e1bfb5a39.csv?from=2017-12-01&to=2018-01-01&group=hour


Aufschlüsselung:

Linkphrase Bedeutung
192.168.1.2 Webadresse des Volkszähler Frontends
c80541f0-26b9-11e7-95ac-f32e1bfb5a39 UUID des gewünschten Kanals
.csv Dateiformat der Ausgabe (alternativ auch z.B. json)
from=2017-12-01&to=2018-01-01 Zeitraum der Ausgabe der gewünschten Daten
group=hour Auflösung der Daten (alternativ hour, min, month)

Beispiel des Abrufs zweier Kanäle gleichzeitig:

http://192.168.1.2/middleware.php/data.csv?uuid[]=c80541f0-26b9-11e7-95ac-f32e1bfb5a39&uuid[]=24e632f0-9b85-11e6-86da-f5af135fa7f8&from=2017-01-01&to=2018-01-01&group=month]

Für weitere und tiefergehende Infos siehe: [31]

Stromverbrauch BMS:

Bei 30V Akkuspannung ca. 5mA ohne und 7mA mit OLED.

Anpassungen im Quellcode für den Prozessor STM32

Im Stammverzeichnis des Quellcodes unter [32] sind folgende Dateien zu finden, die geladen und verknüpft im Kompilierungsprogramm „PlatformIO“ den gesamten Quellcode darstellen:

Config.h, Config_5s.h, Config_48v.h, Data_objects.h, Main.cpp, Output.cpp, Output.h, Output_can.cpp, Output_can.h

Im Quellcode sind folgende Änderungen vorzunehmen, um den hier beschriebenen Akku mit 28,8V und 9 Zellen an das BMS anzuschließen:

Config.h Auswahl der PCB Variante 48V

// select BMS board

//define BMS_PCB_5S

#define BMS_PCB_48V

Config_48v.h Auf der Unterseite des Switch N Sense Modul befinden sich bis zu vier parallel geschaltete Widerstände (R11 bis R14). Der Berechnete Summenwiderstandswert muss hier in den Quellcode eingetragen werden. Im vorliegenden Fall sind drei Widerstände mit 3mOhm parallel geschaltet, was einen Summenwiderstandswert von 1mOhm entspricht.

#define SHUNT_RESISTOR 1.0  // mOhm

main.cpp

Parameter setzen für die Akkuschutzfunktion (erster Wert in Klammer: Strom in mA, zweiter Wert: Zeit in us oder ms)

// ToDo: Ensure that these settings are set even in case of initial communication error

    BMS.setTemperatureLimits(-20, 45, 0, 45);
    
    BMS.setShuntResistorValue(SHUNT_RESISTOR);
    
    BMS.setShortCircuitProtection(35000, 200);  // delay in us
    
    BMS.setOvercurrentChargeProtection(30000, 200);  // delay in ms
    
    BMS.setOvercurrentDischargeProtection(30000, 320); // delay in ms
    
    BMS.setCellUndervoltageProtection(2800, 2); // delay in s
    
    BMS.setCellOvervoltageProtection(3650, 2);  // delay in s

    BMS.setOCV(OCV);
    
    BMS.setBatteryCapacity(72000);  // mAh

    BMS.update();   // get voltage and temperature measurements before switching on

    BMS.setBalancingThresholds(5, 3350, 5);  // minIdleTime_min, minCellV_mV, maxVoltageDiff_mV
    
    BMS.setIdleCurrentThreshold(6000);
    
    BMS.enableAutoBalancing();



LibreSolar BMS48V on GitHub