Daly BMS (Batteriemanagement System für Li-Akkus) WLAN fähig machen

  1. Einleitung
  2. Planung
  3. Aufbau
  4. Informationen

1. Einleitung

Da sich seit einiger Zeit die Energieerzeugung in Deutschland wandelt, hin zu einem immer höheren Anteil an erneuerbaren Energien, nimmt damit auch das Risiko von Ausfällen der Energieversorgung zu. Ein solcher 'Blackout' könnte sich durchaus auch über mehrere Tage oder im schlimmsten Fall Wochen hinziehen. Jetzt trifft es sich ganz gut, dass auf dem Dach bereits eine 4,5kWp PV-Anlage installiert ist. Hinzu kommt, dass die Anlage bald 20 Jahre alt ist und damit der subventionierte Stromankauf durch das EVU wegfällt.

Daraus ergeben sich 2 interessante Gedanken:

  • Wie könnte man den erzeugten PV-Strom speichern, damit dieser bei einem Stromausfall zur Verfügung steht?
  • Wie kann man den Speicher so integrieren, dass eine 'Nulleinspeisung' entsteht?

Das Thema Nulleinspeisereglung soll hier noch nicht weiter behandelt werden, da ja zunächst erstmal ein funktionierender Speicher benötigt wird. Die Anschaffung des Speichers war mit einer Bestellung bei Alibaba schnell erledigt. Er besteht aus 16 LiFePO4 Akkus mit jeweils 230Ah und einer Nennspannung von 3,2V je Zelle. Insgesamt stehen mit dem Block nun knapp 12kWh elektrischer Batteriespeicher zur Verfügung.

nach oben


2. Planung

Das Daly-BMS kommt mit einer UART-Schnittstelle die leider recht sparsam beschrieben ist. Mit etwas Recherche und reverse engineering konnten aber leicht die Befehle gefiltert werden, mit denen nicht nur die Parameter ausgelesen werden können, sondern auch die Einstellungen möglich sind.

Die Kommunikation ist wirklich recht simpel und kann ohne große Umstände über die Rx/Tx Pins jedes ESP8266 realisiert werden. Es wird einfachh die RS-232 Schnittstelle des ESP mittels Serial.begin(9600, SERIAL_8N1); initialisiert und dann alle Befehle nur noch mit einem Serial.write(my_txBuffer, XFER_BUFFER_LENGTH); auf die Schnittstelle gejagt.

Beispiel-Telegramm:
  • 0xA5 0x40 0x90 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x7D

Die Buffer-Variable besteht immer aus 12 Bytes und setzt sich wie in der Daly-Spezifikation beschrieben zusammen. Byte [0] ist immer 0xA5, Byte [2] trägt den Befehlscode, Byte [8] ist immer 0x08 und Byte [12] die Checksumme. Die Datenbytes sind bei Datenabrufen mit 0x00 gefüllt.

Data MessageData ID
get / set
Remark
Nominal Values0x50 / 0x10Byte [0:2] Pack Capacity [mAh]
Byte [3:4] nominal Cell Voltage [mV]
Byte [5:7] Reserved
Hardware Specification0x51 / 0x11Byte [0] Board count
Byte [1:3] Cell count [0F 00 00] = (16 0 0)
Byte [4:6] Temp sensor count [01 00 00] = (1 0 0)
Byte [7] Reserved
 0x52 / 0x12 
BMS Config0x53 / 0x13Byte [0] Battery Operation Mode

Byte [1] Battery Type
Byte [2:4] Production Date
Byte [5:7] BMS Sleep Time [s]
Byte [7] Reserved
Firmware Index Number0x54 / 0x14 
 0x55 / 0x15 
 0x56 / 0x16 
Battery code0x57 / 0x17Delivers 5 Frames with 8 Bytes each
 0x58 / 0x18 
Cell Thresholds0x59 / 0x19Byte [0:1] max Cell Voltage Level1 [mV]
Byte [2:3] max Cell Voltage Level2 [mV]
Byte [4:5] min Cell Voltage Level1 [mV]
Byte [4:5] min Cell Voltage Level2 [mV]
Pack Thresholds0x5A / 0x1AByte [0:1] max Pack Voltage Level1 [1/10V]
Byte [2:3] max Pack Voltage Level2 [1/10V]
Byte [4:5] min Pack Voltage Level1 [1/10V]
Byte [4:5] min Pack Voltage Level2 [1/10V]
Current Thresholds0x5B / 0x1BByte [0:1] max Charge Current Level1 [1/10A]
Byte [2:3] max Charge Current Level2 [1/10A]
Byte [4:5] min Charge Current Level1 [1/10A]
Byte [6:7] min Charge Current Level2 [1/10A]
Remark: Currents have an Offset of 30,000
 0x5C / 0x1C 
 0x5D / 0x1D 
Voltage & Temperature Difference Thresholds0x5E / 0x1EByte [0:1] max Cell Voltage Difference Level1 [mV]
Byte [2:3] max Cell Voltage Difference Level2 [mV]
Byte [4:5] max Temperature Difference Level1 [°C]
Byte [6:7] max Temperature Difference Level2 [°C]
Balance Thresholds0x5F / 0x1FByte [0:1] Balance Start Voltage [mV]
Byte [2:3] max allowed Cell Difference [mV]
Byte [4:5] Reserved
Byte [6:7] Reserved
Short Circuit Shutdown &
current sampling resolution
0x60 / n/aByte [0:1] Short circuit shutdown [A]
Byte [2:3] Current Sampling resistance [mOhm]
Byte [4:7] Reserved
 0x61 / n/a 
Software Version0x62 / n/aDelivers 3 Frames with 8 Byte each
Byte [0] = Frame Number
Byte [1:7] 7 character string Bytes
Hardware Version0x63 / n/aDelivers 3 Frames with 8 Byte each
Byte [0] = Frame Number
Byte [1:7] 7 character string Bytes
Control Discharge MOSFET n/a / 0xD9Byte [0]: 0x00 = off 0x01 = on
Byte [1:7] Reserved
Control Charge MOSFET n/a / 0xDAByte [0]: 0x00 = off 0x01 = on
Byte [1:7] Reserved

Parameter schreiben

  • #
BMS:
  • #


Daly BMS

.

nach oben


3. Aufbau


zum Vergrößern auf das Bild klicken

Kleine Adapterplatine mit ESP8266


zum Vergrößern auf das Bild klicken


zum Vergrößern auf das Bild klicken


zum Vergrößern auf das Bild klicken

nach oben


5. Informationen

Schaltpläne können auf Anfrage zur Verfügung gestellt werden.

 

Quellen:
Daly Kurzbeschreibung des UART Protokolls
Daly UART Protokoll