Forum: Mikrocontroller und Digitale Elektronik Wer hat Lust auf Protokollanalyse? BMS unbekannter Hersteller


von Timo N. (tnn85)


Angehängte Dateien:

Lesenswert?

Hab hier ein Akku 60V mit verbautem (eingegossenem) BMS, der über RS485 
seinen SOC an eine übergeordnete Steuerung herausgibt.
In der übergeordneten Steuerung sehe ich den Wert und habe ihn mit den 
Botschaften auf RS485 verglichen. Deshalb kenn ich den Protokollaufbau 
der Botschaften des BMS nun etwas.
Der Aufbau jedes Request (an das BMS) und jeder Response (vom BMS) ist 
wie folgt:

Byte 1: Adresse (immer 0x10)
Byte 2: Anzahl an Bytes der gesamten Botschaft
Byte 3: Kommando (Request/Response)
Byte 4-x: Daten
Byte x+1: Prüfsumme (Addition Byte 1 bis Byte x ohne Übertrag)

Durch rumprobieren habe ich herausgefunden, dass Byte 8 und 9 ein 
Integer16-Wert ist (Little Endian), der mir die Stromentnahme / den 
Ladestrom in Vielfache von 10mA ausgibt. Sprich Byte 8: 0x93 Byte 9: 
0xFF -> 0xFF93 = -1,090A
(Entladen) oder Byte 8: 0x9E Byte 9: 0x01 > 4,140A (Laden). Im Beispiel 
des Bildes wird gerade nicht geladen und nicht entladen, also ist dieser 
Wert 0.
Da damit Little Endian als Byte Order klar war, hab ich erkannt, dass ab 
Byte 10 mehrere gleiche Werte übertragen werden, die sich wenig ism 
niedrigwertigen Byte unterscheiden und beim Laden auch langsam zunehmen.
Mit obiger Methode umgewandelt und der Annahme, dass zwei Byte 
hintereinander wieder einen 16-Bit-Wert darstellen, ergibt sich der 
folgende  Dezimalwert (für die erste Nachricht): 4080. Ich vermute, es 
handelt sich um eine Zellspannung in mV.

Soweit so gut.
Allerdings hat der Akku eine Entladeschlussspannung von 71,4V (laut 
Netzteil) und bei Standard-Li-Ion Entladeschlussspannung von 4,2V ergibt 
sich eine Zellkonfiguration von 17 Zellen in Reihe.
Ich erhalte aber nur 13 Werte vom BMS?

Meine Frage:
a)Kennt jemand dieses BMS-Protokoll (Chinesisch)
b)Wie komme ich an die anderen Zellspannungen oder meint ihr, die haben 
da nur ein 13s-Zellen BMS verbaut (war nicht gerade Qualitätsware)?
c) Was könnte der Rest der Botschaft sein? Bei den 0x15 0x15 am Anfang 
dachte ich schon an Temperatur.
d)Die letzten Bytes ab 43 ändern sich nie. Byte 42 muss der SOC sein.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Zeigt denn die übergeordnete Steuerung 17 Zellen an? Oder hat die gar 
nicht die Möglichkeit, die Einzelspannungen anzuzeigen? Gibts noch einen 
Multistecker am Akkupack?
13 Zellen jedenfalls deuten auf ein BMS hin, das eigentlich für 48V 
gedacht ist.

: Bearbeitet durch User
von Hobby B. (bastler2022)


Lesenswert?

Timo N. schrieb:
> Hab hier ein Akku 60V mit verbautem

Typ und oder Hersteller oder Link zum Datenblatt ?
Wäre nett.
Mehr Infos mehr mögliche Hilfe.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ich vergaß zu sagen, das du da hervorragende Arbeit geleistet hast!
Respekt für die Analyse.

: Bearbeitet durch User
von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Timo N. schrieb:
> Mit obiger Methode umgewandelt und der Annahme, dass zwei Byte
> hintereinander wieder einen 16-Bit-Wert darstellen,

Glaube da irrst Du Dich. Da wird kein 16 Bit AD-Wandler drin sein. Da 
wird ein 12 Bit AD-Wandler drin sein.

13*8*2 = 208 Bit
208 : 12 = 17,33

Langt also für 17 Werte.

von Timo N. (tnn85)


Lesenswert?

Matthias S. schrieb:
> Zeigt denn die übergeordnete Steuerung 17 Zellen an? Oder hat die gar
> nicht die Möglichkeit, die Einzelspannungen anzuzeigen? Gibts noch einen
> Multistecker am Akkupack?
> 13 Zellen jedenfalls deuten auf ein BMS hin, das eigentlich für 48V
> gedacht ist.

Nein, die übergeordnete Steuerung (eigentlich nur ein Display eines 
E-Rollers), sendet lediglich einen anderen Request (Byte 3 = 0x65) an 
den Akku und erhält nur eine 5 Byte lange Antwort mit lediglich 1 Byte 
Payload, der den SOC in Prozent enthält. Das gilt bisher als gesichert. 
Mehr wird in der regulären Applikation nicht vom Akku abgefragt, ich 
möchte aber mehr wissen.
Der Akkustecker hat nur die zwei Batteriepole (+ und -) und 2 Pins für 
RS485A und RS485B.
Die Zellen und das BMS sind leider in einer grauen Vergussmasse 
vergossen. Man kommt nicht ran ohne den Akku zu zerstören. Aus der Masse 
zur Buchse kommen nur besagte 4 Adern.

Es handelt sich um ein Reverse Engineering, da ich mehr über den Akku in 
Erfahrung bringen möchte.

Hobby B. schrieb:
> Typ und oder Hersteller oder Link zum Datenblatt ?
> Wäre nett.
> Mehr Infos mehr mögliche Hilfe.

Der Akkuhersteller ist völlig unbekannt. Er ist von einem Elektroroller 
(nicht so ein Trittbrettding, sondern für die Straße) und wird ein 
Zukauf sein. Es steht lediglich außen "72V/20Ah" auf dem Akku 
(Nennspannung 60V). Innen ist ein Kleber auf Chinesisch, auf dem dann 
die wahren Werte stehen "60V /20Ah". Wobei ich bei den 20Ah vorsichtig 
bin.

von Timo N. (tnn85)


Lesenswert?

Dieter D. schrieb:
> Glaube da irrst Du Dich. Da wird kein 16 Bit AD-Wandler drin sein. Da
> wird ein 12 Bit AD-Wandler drin sein.
>
> 13*8*2 = 208 Bit
> 208 : 12 = 17,33
>
> Langt also für 17 Werte.

Warum sind die 13 Werte dann ungefähr gleich, wenn ich von einem 16Bit 
Integer ausgehe?
Wenn es so wäre wie du behauptest, dann würde sich bei den Bytes immer 
etwas verschieben un man würde kein Muster erkennen.
Außerdem sind die Werte mit z.b. bei Zelle 1: 0x0FE4 = 4068 = 4,068V 
sehr plausible Zellspannungen, die wenn ich sie mit 17 multipliziere 
genau der gemessenen Gesamtspannung am Batteriepol entspricht.

Ich traue den Chinesen echt alles zu. Dass sie da dann nur ein 
billigeres BMS verbauen mit nur 13 Zellspannungsüberwachungen nur um ein 
paar Cent zu sparen.
Wenn es keinen Balancer hat, wäre das vielleicht noch nicht mal sooo 
tragisch.
Aber dann wäre tragisch, dass so ein Akku gar kein Balancer hat und ich 
kann mich auf einen Defekt nach kurzer Zeit einstellen.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Timo N. schrieb:
> Dass sie da dann nur ein billigeres BMS verbauen mit nur 13
> Zellspannungsüberwachungen nur um ein
> paar Cent zu sparen.

Das ware durchaus möglich. Dreizehn Zellen mit BMS und darüber vier 
bessere Zellen (selektiert) mit einer simplen Über- und 
Unterspaannungsüberwachung mit einem Schaltausgang zu setzen. D.h. 
irgendwo in einem Byte werden dann zwei Bits geändert. Es gibt auch die 
Variante, indem die Abschaltung im Minuspfad verwendet wird, um in dem 
Falle die Spannung der 13. Zelle zum Messeingang zu unterbrechen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ok, es gäbe noch die Möglichkeit, das es ein Kommando zur Abfrage der 
übrigen Zellen gibt, aber ich nehme mal an, das du da schon alles durch 
hast?

von Timo N. (tnn85)


Lesenswert?

Matthias S. schrieb:
> Ok, es gäbe noch die Möglichkeit, das es ein Kommando zur Abfrage der
> übrigen Zellen gibt, aber ich nehme mal an, das du da schon alles durch
> hast?

Ja. Für 4-Byte lange Requests hab ich das Kommandobyte 1-255 schon 
durchprobiert. Da gibt es außer dem Request 0x13 nur noch den Request 
0x65 (der mir nur den SOC zurückschickt, wie oben beschrieben) und noch 
den Request mit dem Kommando-Code 0x48. Bei dem bekomme ich aber nur 
0x0D + 55* 0x00 zurück.
Dann dachte ich noch: Vielleicht gibt es zwei Byte lange Kommando-Codes, 
aber dann schickt er mir für z.b. einen Request "0x10 0x05 0x13 0xYY 
0xCRC" trotzdem die Response für 0x13. Scheinbar führt er da keinen 
Format check durch.
Ich finde es sehr seltsam, dass er da nur 13 Werte liefert für die 17 
Zellen. Aber ja, bei chinesischen Billigprodukten sollte man sich nie 
wundern.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Timo N. schrieb:
> Aber ja, bei chinesischen Billigprodukten sollte man sich nie
> wundern.

48V sind im Gegensatz zu 60V Fahrbatterien ja wesentlich verbreiteter. 
(kann ich ein Liedchen von singen mit meinem 60V E-Auto). Kann also 
sein, das sich da jemand die Mühe gespart hat, ein richtiges BMS zu 
verwenden. Du solltest davon ausgehen, das, wenn überhaupt ein Balancing 
vorhanden ist, die 4 übriggebliebenen Zellen nicht balanciert werden.

: Bearbeitet durch User
von Michi S. (mista_s)


Lesenswert?

Timo N. schrieb:
> schickt er mir für z.b. einen Request "0x10 0x05 0x13 0xYY
> 0xCRC" trotzdem die Response für 0x13

Dieser eine Versuch sagt aber noch nichts definitives darüber aus, ob 
das für sämtliche übrigen 255 1-Byte Codes ebenso passiert, daß ein 
allfälliges 2.Byte komplett ignoriert wird. Wirklich wahrscheinlich 
scheint es mir zwar nicht, daß sich da noch Kommandos verstecken, 
schließlich stellt sich ja schon die Frage, warum sollte es 2-Byte 
Request-Codes geben, wenn eh noch fast alle 1-Byte Codes unbenutzt sind.

Insofern wären eigentlich gültige 2-Byte Codes nahezu genauso 
unwahrscheinlich, wie die Existenz von gültigen 3 oder gar 25-Byte 
Request-Codes; bloß die gut 65000 2-Byte Varianten kann man noch mit 
akzeptablem Aufwand nebenher durchlaufen lassen.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Michi S. schrieb:
> bloß die gut 65000 2-Byte Varianten kann man noch mit
> akzeptablem Aufwand nebenher durchlaufen lassen.

Es sollte aber dann bei den funktionslosen 2-Byte-Varianten immer die 
gleiche Rückantwort erfolgen um das automatisiert auszuwerten. 65 
Tausend Zeilen ohne Hilfsmittel mit den Augen zu durchsuchen, wird 
unangenehm.

von Rainer W. (rawi)


Lesenswert?

Dieter D. schrieb:
> Langt also für 17 Werte.

Wie erklärst du dir dann, dass bei den ungeraden Bytes das obere Nibble 
immer 0 ist. Bei komprimierten 12 Bit Werten müssten alle Bits benutzt 
sein.

von Timo N. (tnn85)


Lesenswert?

Matthias S. schrieb:
> 48V sind im Gegensatz zu 60V Fahrbatterien ja wesentlich verbreiteter.
> (kann ich ein Liedchen von singen mit meinem 60V E-Auto). Kann also
> sein, das sich da jemand die Mühe gespart hat, ein richtiges BMS zu
> verwenden. Du solltest davon ausgehen, das, wenn überhaupt ein Balancing
> vorhanden ist, die 4 übriggebliebenen Zellen nicht balanciert werden.

Ich als bei so E-Rollern ist 60V mit 17 Zellen eigentlich sehr 
verbreitet.
48V natürlich auch. Die wieviel Zellen werden denn bei 48V genutzt?

Bei 60V (bei 17 Zellen also 17 * 3,6V) ist die Nominalspannung 
eigentlich 61,2V. Bei  48V ist sie dann 50,4V? mit 14 Zellen? Selbst 
dann würde das BMS von mir ja nicht ausreichen (wenn es eigentlich für 
48V-Systeme gedacht war). Nur bei 46,8V mit 13 Zellen. Normal wird da 
dann aber immer etwas mehr Spannung genommen, als durch gleichwertige 
Bleiakkus (24 x 2V) erreicht werden würden. Außerdem lassen sich doch 14 
Zellen in Reihe viel besser zu einem gerade Zellenblock formen, da man 2 
Reihen a 7 Zellen bilden kann, die man parallel schaltet.
Es bleibt ein Mysterium. Muss ich warten, bis der Akku das zeitliche 
segnet, bis ich dem auf den Grund gehen kann.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Timo N. schrieb:
> Bei 60V (bei 17 Zellen also 17 * 3,6V) ist die Nominalspannung
> eigentlich 61,2V. Bei  48V ist sie dann 50,4V? mit 14 Zellen?

Ich kenne die 48V Blöcke mit 13 Zellen. Und es ist ja auch wurscht, ob 
gerade oder ungrade Zellenanzahl, da sie sowieso pro Zelle parallel 
sind.
3,7V x 13 = 48,1V
Nominal werden LiIon meist mit 3,7V berechnet. Und du hast ja auch nur 
13 Werte in der Response.

von Timo N. (tnn85)


Lesenswert?

Matthias S. schrieb:
> Ich kenne die 48V Blöcke mit 13 Zellen. Und es ist ja auch wurscht, ob
> gerade oder ungrade Zellenanzahl, da sie sowieso pro Zelle parallel
> sind.
> 3,7V x 13 = 48,1V
> Nominal werden LiIon meist mit 3,7V berechnet. Und du hast ja auch nur
> 13 Werte in der Response.

Ja, manche sagen 3,6, manche 3,7. Gerade bei NMC wird es wohl irgendwo 
in der Mitte liegen.
Wenn du es mit 3,7V rechnest, dann sind das bei 13 Zellen natürlich 1,3V 
mehr und die 48V passen genau.
Wenn du dich da auskennst, mit den 48V Akkus und sagst, dass es meist 
13-Zeller sind, dann glaub ich dir das. Genau das meinte ich ja, wenn es 
ein Akkutyp gibt, der oft vorkommt, dann macht es auch Sinn, wenn man da 
mal ein 13s-BMS an falscher Stelle trifft, weil es einfach deutlich 
günstiger ist.

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.