Allgemeine Informationen
Beim Reset muss man unterscheiden zwischen „Akku-Reset“ und Reset des „SoH“ (State of Health) sowie des „Ladezyklenzählers“.
Ein Akku-Reset kann nötig werden, wenn der Akku aufgrund eines unerwarteten externen Fehlers in der Stromer-Elektronik (z. B. Kurzschluss) in den Sicherheitsmodus geht. Wenn dies passiert, wird der 48-V-Ausgang des Akkus deaktiviert und der Stromer kann nicht mehr gefahren werden. Der Akku muss über den Händler an die myStromer AG gesendet werden, um die Sicherheitsstellung zurückzusetzen.
Anders liegt der Sachverhalt beim Reset des State of Health (SoH) und des Ladezyklenzählers. Dieser Reset wird bei den Stromer BQ-Akkus nach einer Zellerneuerung (Refit, Refurbishing, Aufbereitung) nötig.
Reset – SoH- und Ladezyklenzähler – warum?
Nach meinem Wissenstand ist ein SoH- und Ladezyklenreset bei den alten BO-Akkus und den älteren BQ-Akkus (vor 2016) nicht nötig. Das BMS «akzeptiert» die neuen Zellen auch ohne Reset, und die Neukapazität und damit die Neureichweite kann wieder erreicht werden.
Bei der BQ-Serie ab ca. 2016 funktioniert das nicht mehr. Der Wert des SoH und des Ladezyklenzähler wird auch mit neuen Zellen nicht auf die Werkseinstellung zurückgesetzt. Das BMS rechnet nach wie vor mit dem alten SoH-Wert. Das Resultat ist, dass der Akku nun zwar neue Zellen hat, das BMS aber mit der alten Kapazität rechnet und nur die alte Reichweite gefahren werden kann.
Stromer Akkumodelle- und Lieferanten
Welche Akkumodelle es von Stromer gibt kann man im Kapitel Modellpalette – Technische Daten und Sicherheitshinweise nachlesen.
Bei den neueren Akkus der BQ-Serie mit 48-V-Nennspannung gibt es zwei Lieferanten, HTE (TD Hightech Energie) und SMP (Simplo Technology Co. Ltd.). Sie unterscheiden sich äusserlich durch die Anzahl Schrauben beim Ladesockel.

Intern ist der Unterschied beim Aufbau der Platine zu sehen. Akkus von HTE haben eine gut sichtbare CMOS-Batterie, Simplo kommt ohne diese aus. Weiter werden verschiedene Prozessoren verwendet und bei Simplo scheint ein prozessor-externes EEPROM zu fehlen.


Reset mit Reset-Jumper
Für den DIY ist diese Variante die einfachste. Es ist keine spezielle Software nötig. Der Nachteil ist, dass der Akku geöffnet werden muss. Dazu muss man wissen, wo und wie ein solcher Reset gemacht werden kann.
Die Entwickler eines BMS erleichtern dem Anwender manchmal diese Aufgabe, indem sie einen «Reset-Jumper» auf der Platine anbieten. Das ist z. B. bei den Stromerakkus der BO-Serie der Fall – die Details dazu gibt es hier. Bei den BQ-Akkus fehlt dieser bzw. er ist nicht als solcher gekennzeichnet.
Es gibt mehrere Methoden, den verwendeten Microchip und/oder das EEPROM bei einem BQ-Akku zurückzusetzen: Link 1 | Link 2 | Link 3. Der Schlüssel liegt bei der Molex Picoblade 1.25 Steckverbindung «J304» (Pin 4 & 6) auf der Rückseite des BMS. Sie sind zwar nicht als Reset-Jumper bezeichnet, funktionieren aber als solche.

Softwarereset über den CAN-Bus
Braucht es persönliche IT Kenntnisse für den Reset?
Es geht ohne IT-Kenntnisse. Die Schweizer Firmen Swissvolts | Bünzli Batteries | upVolt bieten den Reset über den CAN-Bus an. Swissvolts und Bünzli Batteries verwenden dabei eine modifizierte Software auf Basis der Stromer-Diagnosesoftware. upVolt lässt den Service bei Bünzli Batteries machen. Mit der Software können folgende Parameter ausgelesen bzw. zurückgesetzt werden:
- Auslesen: Produktionsdatum, Ladezyklen, State of Health (SoH)
- Programmierung der Ladeendspannung des Akkupacks
- Rücksetzung des SoH auf 100 % und des Ladezyklenzähler auf 0.
- Reset der Sicherheitsstellung (blockierte Batterie) z. B. aufgrund eines Kurzschlusses im 48-V-System
Bei meinem BQ983-Akku konnte ich zusehen. Der Rosenbergerstecker wurde mit dem Akkusockel verbunden und in wenigen Sekunden war der SoH/Ladezyklenzähler auf Werkseinstellung gesetzt. Allerdings konnte das vor Ort nicht kontrolliert werden weil mein Akku 100 % geladen war. Man sagte mir ich solle ein paar km fahren. Das Omni zeigte bei der ersten Fahrt zuerst einen SoC von 74 % an, was dem alten SoH entsprach. Tatsächlich sprang der Wert nach ein paar km Fahrt auf 100 %. Über das Sromer API konnte ich danach den SoH auslesen – er lag wieder bei 100 %!
Reverse Engineering
Entscheidend für den Reset des SoH und Ladezyklenzählers sind die beiden CHIP’s Microchip PIC18F4685 und das externe Microchip EEPROM 24LC256. Um die «Innereien» zu erforschen, muss man etwas Forensik betreiben.
Platinenaufbau BQ-Akku mit 3 Schrauben (HTE)
Hier zeige ich eine Platine des BQ-Akkus von HTE (3-Schrauben) und verorte die massgeblichen Bauteile für einen SoH/Ladezyklenzähler-Reset.

Die Öffnung der Molex Steckverbindungen ‚J303‘ & ‚J304‘ (Bild in der linken Ecke) liegt auf der Gegenseite der Platine.

J304
1- x
2- PGC= Programming Clock Pin
3- PGD= Programming Data Pin
4- GND= Ground (Vss)
5- VDD= Power Supply
6- VPP= Programming Voltage
J303
1- GND= Ground
2- SCL= Serial Clock
3- SDA= Serial Address/Data I/O
4- VDD= Power Supply
Sie bedienen die entsprechenden Pins des Microchip PIC18F4685.

OD Dump des CAN-Bus
OD steht für Octal Dump und bezeichnet ein UNIX-Kommando, mit dem ein Dump (Speicherauszug) in verschiedenen, für Menschen lesbaren Formaten möglich ist. Dieser Dump ist nötig, um ein sog. Reverse Engineering durchführen zu können. Er dient als Basis, um herauszufinden, welche Speichersegmente für einen SoH/Ladezyklenzähler-Reset zurückgesetzt werden müssen.
Software: Mit dumpcap kann ein OD-Dump realisiert und danach in Wireshark analysiert werden. Wie das geht, kann man u. a. hier anschauen. Weitere Theorie gibt es hier. Verschiedene CAN-Bus-Adapter bieten auch All-in-One-Lösungen an.
Hardware: Hardwareseitig braucht man einen CAN-Bus-Adapter, um den Bus sniffen (abhören) zu können. Siehe u. a. 1 | 2 | 3.
Dump der BQ-Akkus: Im speedpedelecreview.com-Forum hat der User Jebolisch einen solchen CAN-Bus-Dump für die Akkus BQ983 & 814 von HTE sowie den BQ618/655 von Simplo veröffentlicht und soweit möglich dokumentiert. Ich habe die Datei grafisch etwas aufgehübscht und stelle sie hier zur Verfügung.
Schreiben und Lesen eines EEPROM
Um die entscheidenden Speicheradressen, in denen der SoH/Ladezyklenzähler gespeichert ist, neu schreiben zu können muss man wissen wie ein EEPROM (Electrically Erasable Programmable Read-Only Memory) gelesen/beschrieben wird. Ein EEPROM behält seine gespeicherten Daten auch nach dem Ausschalten der Stromversorgung bei. Diese Funktion ist nützlich für die Speicherung kritischer Daten, die über Stromzyklen hinweg erhalten bleiben müssen. Bsp. sind Konfigurationseinstellungen, Kalibrierungswerte, Benutzereinstellungen, Speicherung der kritischen Variablen des Programms oder historische Datenprotokolle.
Wie ein EEPROM programmiert werden kann ist z. B. hier beschrieben.
Voraussetzungen
- Python-Installation: Stelle sicher, dass Python auf deinem System installiert ist.
- I2C-Bibliothek: Du benötigst eine Python-Bibliothek, die die I2C-Kommunikation ermöglicht. Eine beliebte Option ist
smbus2. - Hardware: Der PIC18F4685, der 24LC256 und die entsprechenden Verbindungen müssen entsprechend aufgebaut sein.
Beispiel für das Schreiben und Lesen
1 import smbus2
2 # I2C-Bus und EEPROM-Adresse anpassen
3 bus = smbus2.SMBus(1) # Ändere 1, wenn du einen anderen Bus verwendest
4 address = 0x50 # Ändere die Adresse, wenn sie bei deinem EEPROM anders ist
5 def write_byte(register, data):
6 "Schreibt ein Byte an die angegebene Registeradresse im EEPROM."
7 bus.write_byte_data(address, register, data)
8 def read_byte(register):
9 "Liest ein Byte von der angegebenen Registeradresse im EEPROM."
10 return bus.read_byte_data(address, register)
10 # Beispiel für das Schreiben und Lesen
11 write_byte(0x00, 0x55) # Schreibe 0x55 an die Adresse 0x00
12 data = read_byte(0x00) # Lese das Byte von der Adresse 0x00
13 print("Gelesenes Byte:", data)
Erklärung
- Import: Die
smbus2-Bibliothek wird importiert, um die I2C-Kommunikation zu ermöglichen.
- I2C-Bus und Adresse: Die Variablen
busundaddresswerden definiert, um den I2C-Bus und die Adresse des EEPROMs anzugeben.
- Funktionen:
write_byte: Schreibt ein Byte an eine bestimmte Adresse im EEPROM.ead_byte: Liest ein Byte von einer bestimmten Adresse im EEPROM.
Weitere Informationen
Datenblatt Microchip PIC18F4685 Datenblatt Microchip EEPROM 24LC256
Dokumentation CiA 301 – CiA develops and publishes technical documents. Specifications contain functional requirements and permissions to be implemented in hardware or software. Typical examples are the CANopen CC (classic) application layer (CiA 301) or the CANopen device profile for generic I/O modules (CiA 401 series).
Python-Documentation This is the official documentation for Python 3.13.1.
Hast du Feedback? – gerne unten im Kommentarfeld.