smartBMS OZ890 mit ELV i2c-Interface ansprechen

Diskutiere smartBMS OZ890 mit ELV i2c-Interface ansprechen im Controller/Regler, Fahrerinformation, Elektronik Forum im Bereich Diskussionen; Nach einigem Probieren und Forschen kann ich nun mein smartBMS mit dem ELV USB-I2C-Interface über i2C flashen. Folgende Anschlüsse müssen...
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
Nach einigem Probieren und Forschen kann ich nun mein smartBMS mit dem ELV USB-I2C-Interface über i2C flashen.

Folgende Anschlüsse müssen gemacht werden, damit der OZ890 I2C auch ohne Akku reagiert:
P+: 36V
B-: Masse
Zelle 4: ca 12 V gegen Masse

Angesteuert wird das I2C Interface z.B. mit dem Terminalprogramm hterm, das auch Befehlsmakros verwalten kann.

Anbei die wichtigsten Macros zum Senden mit hterm (I2C Adresse 0x30)

Read Operation Register S60 Register P S61 AnzBytes P Beispiel: S60 06 P S61 01 P Auslesen Register 6
Read EE Data Word S60 5C P S61 02 P
Write EE Data High S60 5D 2C P
Write EE Data Low S60 5C 2C P
Write EE Adress S60 5E Register P Beispiel: S60 5E 7F P
EECtrl Write Word S60 5F 52 P
EECtrl Write Byte S60 5F 5B P
EECtrl Read Word S60 5F 55 P

Viel Spass.
 
jjj

jjj

Mitglied seit
02.08.2009
Beiträge
186
Ort
Hegau
Details E-Antrieb
elfKW HR 28" Bulls Crossflyer, 50xV3 in 1.5l Sigg
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Ahh,
endlich hat das jemand mit dem ELV Kit 'rausgekriegt. Dannggeeh :dafuer:
Ok, die I2C Anschlüsse habe ich gefunden. Was ist mit den Pull up's, hast Du die im ELV Adapter oder sind da welche im BMS ? Ist die I2C Schnittstelle 3.3V oder 5V ?

viele Grüße
Jo
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

ELV USB-I2C Interface hat intern Pullups gegen 5 V . Am smartBMS sind keine pullups.

I2C Geschwindigkeit 100kbit hat nicht zuverlässig funktioniert. Nachdem ich auf 50kbit umgestellt habe, lief die Kommunikation stabil.
 
H

hirnfurz

AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Ich kann auch noch eine Lösung mit einem Atmega8 und serieller (Bluetooth-)Schnittstelle anbieten.
Das Ganze hat eine einfache "Text"-Oberfläche für einige Einstellungen (ist leider nie ganz fertig geworden).

Man kann sich z.B. die Spannungen und den aktuellen Status ausgeben lassen, oder z.B. auch den Akkutyp und die Zellenzahl verändern.

Falls also Interesse besteht, dann könnte ich die C++ Quellcodes und eine Schaltplanskizze online stellen.
Es muss natürlich noch einiges gemacht werden, bis daraus ein richtiges Konfigurationstool wird...
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Hallo Hirnfurz, dann lass mal raus !

Ich wollte mir ein 2004- Display ans Ladegerät dranbauen. Atmega ist ok.

Wenns Probleme mit dem Anhang gibt schicke ich mal ne PN mit richtiger mail-adresse.

Henry
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Hier noch ein paar Erkenntnisse zum smart BMS mit OZ890:

Wie in diversen Foren beschrieben, stimmt die Programmierung des OZ890 nicht mit dem überein, was bestellt wurde.
Will man hier was selber programmieren, ist das Datenblatt eine Pflichtlektüre.
Als erstes musste ich die Ladeschlussspannungen an meine Headway LiFePos anpasssen:
EE Adresse: Wert:
46/47 Cell Unbalance Threshold 51E8h
48/49 Bleeding Start 3,3V = 5489h
4A/4B OV Threshold 3,65V= 5D80h
4C/4D OV Release 3,5V = 59A6h
4E/4F UV Threshold 2,5V = 411Ah
50/51 UV Release 2,51V= 59A6h
52/53 Extr High V thresh 3,75V= 600Eh
54/55 Extr High V release 3,65V= 5D7Eh

Dann kommt der Ladestrom dran:
Der scheint von smartBMS immer zu niedrig eingestellt zu sein, so dass nur Lader bis 3A sauber durchlaufen. Mit meinem 5A Lader schaltetet das BMS wegen Überstrom immer an und aus. Manche behelfen sich mit einem 2 Mosfet parallel aber man kann das ja auch sauber programmieren.
Gemessen wird der Ladestrom und der Entladestrom immer über den/die Disscharge-
Mosfet(s) (3 Stück IR4410 bei der 40A Version) Hierüber muss der Spannungsabfall
gemessen werden zB. bei 1A Ladestrom. Mit R=U/I ergibt das den Shuntwiderstand Rs.
Weiterhin benötigt man die Werte COCO und DOCO aus den EE-Registern 03 und 04 die jeweils mit M bezeichnet werden und Korrekturfaktoren für Charge und Discharge sind.
Die Überstromschwellen sind in den EE-registern 28 und 29 codiert (jeweils als N bezeichnet).
Die tatsächlichen Stromwerte errechnen sich laut Datenblatt so:

Ladestrom(Charge) (+10..+105mV am Shunt) = (N+M-4)*5mV / Rs
Entladestrom(DisCharge) (-285..-30mV am Shunt) = (N+M)*5mV / Rs

Für den Ladestrom war bei mir M=10, N=6. Zur Verdoppelung der Ladestromabschaltschwelle habe ich den Wert n von 6 auf 18 geändert. Die Ladung wird nun nicht mehr unterbrochen.
Interessanterweise war Rs im EE-register 34 10-mal grösser als der tatsächliche Wert (20mOhm statt 2 mOhm). Vermutlich, damit der Wertebereich von N besser skaliert ist.

Die Zellenanzahl ist sehr einfach zu ändern: Einfach den neuen Wert mit dem Batterietyp LiFEPo:10 oder LiMn:11 binär verknüpfen und das Ergebnis in EE-Register 26 schreiben (Alle Register auf S46-S48 im Datenblatt).
Die nicht benötigten Balancereingänge müssen kurzgeschlossen werden !!!!!
Hierzu kann man auf die Kondensatoren auf der Platine einen dünnen Draht drüberlöten. Wenn man also 12 statt 13 Zellen hat, muss der Balancer 13 gebrückt werden.

Zum Schluss noch zwei wichtige Hinweise:
1. Die EEprom Werte stehen nach dem Schreiben nur im EEPROM aber noch nicht im Operation Register. Zur Übernahme der Werte muss ein Hardreset durch Trennen der Batterieleitung (Abschrauben an der letzen Zelle) durchgeführt werden, damit das BMS komplett stromlos wird.
2. Beim Wiedereinschalten ist zuerst die Batteriespannung wieder anzuklemmen und erst dann!!!! die Balancerkabel. Beim Abschalten(Hardreset) zuerst Balancerkabel ziehen und erst dann das Batteriekabel abschrauben.
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Hallo Hirnfurz , danke für den Source.

Aktuelle kämpfe ich mit dem WinAVR GCC der mir immer Fehlermeldungen rausspuckt. Mit C habe ich schon einige Projekte gemacht.

Mit C++ hakelt es noch:

f:\avr tools\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:149:42: error: 'fabs' was not declared in this scope
f:\avr tools\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:149:43: error: 'ceil' was not declared in this scope

Habe schon #define F_CPU 8000000UL angepasst aber irgendwas ist noch faul.

Hast Du eine Idee , woher die Fehlermeldungen rühren ?
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Ich habe WinAVR 20100110. Ist also die neueste Version.
AS4 und AS6 habe ich auch probiert aber das ändert nichts. Ist ja auch der gleiche AVRGCC.

Das mit der math.h probiere ich mal morgen aus.

Danke.
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

mit math.h gehts jetzt!

Danke
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
AW: smartBMS OZ890 mit ELV i2c-Interface ansprechen

Hier eine komplette Codiersequenz für den OZ890 mit dem ELV I2C Interface
für 12 Zellen LIFEPO; 40 A Entladestrom; 3,65V Ladeschluss; 2,5V Entladeschluss.

Etwas Ärger hatte ich noch mit dem ext Temperaturfühler, dessen Wertebereich komplett anders als der interne Fühler ist.
Und noch eine Fehlerkorrektur : Oben hatte ich für die Adresse 54/55 Extr High V release 3,65V= 5D7Eh genannt.
54h/55h ist aber Extrem low Voltage Threshold und sollte bei Lifepo 2V sein also 333A hex.


OZ890 Konfigurationssequenz einfach ins Terminalprogramm kopieren und an das smartBMS senden.

Code:
     Address      Byte       Ctrl

S60 5E 26 P S60 5C 2C P S60 5F 5B P 
S60 5E 27 P S60 5C 00 P S60 5F 5B P 
S60 5E 28 P S60 5C 9F P S60 5F 5B P 
S60 5E 29 P S60 5C 90 P S60 5F 5B P 
S60 5E 2A P S60 5C FC P S60 5F 5B P 
S60 5E 2B P S60 5C 5D P S60 5F 5B P 
S60 5E 2C P S60 5C F1 P S60 5F 5B P 
S60 5E 2D P S60 5C 24 P S60 5F 5B P 
S60 5E 2E P S60 5C 50 P S60 5F 5B P 
S60 5E 2F P S60 5C 05 P S60 5F 5B P 
S60 5E 30 P S60 5C 00 P S60 5F 5B P 
S60 5E 31 P S60 5C 02 P S60 5F 5B P 
S60 5E 32 P S60 5C 61 P S60 5F 5B P 
S60 5E 33 P S60 5C 6F P S60 5F 5B P 
S60 5E 34 P S60 5C 14 P S60 5F 5B P 
S60 5E 46 P S60 5C 00 P S60 5D FF P S60 5F 52 P 
S60 5E 48 P S60 5C 89 P S60 5D 54 P S60 5F 52 P 
S60 5E 4A P S60 5C 7E P S60 5D 5D P S60 5F 52 P 
S60 5E 4C P S60 5C A6 P S60 5D 59 P S60 5F 52 P 
S60 5E 4E P S60 5C 09 P S60 5D 40 P S60 5F 52 P 
S60 5E 50 P S60 5C 99 P S60 5D 42 P S60 5F 52 P 
S60 5E 52 P S60 5C 0E P S60 5D 60 P S60 5F 52 P 
S60 5E 54 P S60 5C 3A P S60 5D 33 P S60 5F 52 P 
S60 5E 56 P S60 5C E8 P S60 5D 01 P S60 5F 52 P 
S60 5E 58 P S60 5C 88 P S60 5D 03 P S60 5F 52 P 
S60 5E 5A P S60 5C B0 P S60 5D AF P S60 5F 52 P 
S60 5E 5C P S60 5C 10 P S60 5D AF P S60 5F 52 P 
S60 5E 5E P S60 5C E8 P S60 5D 22 P S60 5F 52 P 
S60 5E 60 P S60 5C D8 P S60 5D 21 P S60 5F 52 P 
S60 5E 62 P S60 5C 98 P S60 5D 17 P S60 5F 52 P 
S60 5E 64 P S60 5C B0 P S60 5D 18 P S60 5F 52 P
 
e-doc

e-doc

Mitglied seit
21.05.2012
Beiträge
2.549
Ort
DE
Hallo Henry,
ich versuche seit einiger Zeit meine OZ890-Leiterplatten zu programmieren, was mir aber mit der O2Micro-Software (Cowboy v.0.75) über Parallelschnittstelle und 74LS05 (Open Collector Inverter) Pegelwandler zu I²C nicht gelungen ist.
(siehe auch hier https://www.pedelecforum.de/forum/index.php?threads/oz890-smart-bms-5-13s-programmierbar-ein-paar-fragen.31576/ )

Hast Du (oder jemand anderes) vielleicht eine Idee, wie man vom PC aus über serielle- oder Parallel-Schnittstelle (mit Pegelwandler) auf den OZ890 zugreifen könnte?
Eine teure USB-zu-I²C-Lösung möchte ich nicht unbedingt noch kaufen.
Die Hardware Parallel/Seriell-Port -> I²C ist wahrscheinlich nicht das Problem (nur Open-Collector-Treiber und Pull-Up-Widerstände), eine passende Software zu finden, die das ganze ansteuert ist da schon schwieriger (bin leider kein Programmierer, des sich dan mal schnell selbst schnitzt).

Diese Hex-Hackerei ist zwar auch nicht das, was ich mir ursprünglich dachte, notfalls ginge es aber.
Prinzipell muß ich erst mal auch gar nicht viel umprogrammieren, hauptsächlich stimmt die Zellenzahl im Moment nicht (13 Zellen voll bestückt bestellt, nutze jetzt aber doch nur 10 oder 12 Zellen) oder es müßte viellecht mall die Zellchemie geändert werden (LiFePO4/LiMn).

Die O2Micro-Software (auch die aktuelle 0.87) kann mit Deinem ELV-I²C-Adapter nichts anfangen?
 
Zuletzt bearbeitet:
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
Die O2Micro Software habe ich auch bislang nicht zum laufen bekommen. Im Ami-Forum wird zwar über Erfolge über die Parallelschnittstelle berichtet aber das habe ich jetzt nicht weiter verfolgt. BMS bei mir ist verbaut und läuft. Habe dahe
r seit 1 Jahr nichts mehr dran gemacht.
Prinzipiell geht die Hirnfurzlösung mit AVR aber auch die ELV I2C Schnittstelle. Bei Hirnfurz sind aber nicht alle Befehle möglich. Auslesen geht gut.
Hier wird eine I2C schnittstelle für den PC beschrieben. : http://www.avrfreaks.net/forum/i2c-master-using-pcs-parallel-port

Wenns Geld knapp ist, würde ich trotzdem die I2C Lösung von elv empfehlen.
 
e-doc

e-doc

Mitglied seit
21.05.2012
Beiträge
2.549
Ort
DE
Danke für den Hinweis zu avrfreaks.net, werde mir das mal ensehen.

Hast Du von ELV den Bausatz für 25€ oder das Fertiggerät für 35€ ? Sonst sind beide identisch?

Habe heute nochmal die PonyProg-Lösung zur Programmierung serieller-EEPROMs (z.B. 24C02) aufgebaut, und am EEPROM mit Erfolg getestet.
Jetzt weiß ich allerdings nicht, ob ich da einfach den OZ890 dranhängen soll, und mit z.B. 24Cxx-Protokoll auslesen und beschreiben kann, oder ob ein falscher Leseversuch vielleicht bereits irgend etwas unabsichtlich beschreiben oder löschen kann (ohne vorher eine funktionierende Konfiguration ausgelesen zu haben, wäre das nicht so toll).
PonyProg ist scheinbar mit seinen Macros eine Ebene zu hoch, als daß sich da I²C direkt ansprechen ließe (keine Start-/Stopp-Sequenzen und Bitfolgen etc.).

Inzwischen habe ich noch eine andere I²C-Selbstbaulösung bei roboternetz.de gefunden.
Im Prinzip ist es immer eine ähnliche Hardware (Pegelwandler/Open-Collector-Stufen mal mehr mal weniger aufwändig).
Woran es bis jetzt mangelt, ist eine geeignete Software, wobei die Roboternetz-Software schon fast brauchbar aussieht, um Roh-Daten lesen und schreiben zu können, und dazu noch als open-source den Quelltext zur Verfügung stellt.



Das Prinzip des I²C-Bus ist hier ganz gut beschrieben:
http://rn-wissen.de/wiki/index.php/I2C

BTW: Weißt Du ob der Kollege Hirnfurz noch aktiv ist? Er hat seit über einem Jahr hier nichts mehr gepostet...
 
e-doc

e-doc

Mitglied seit
21.05.2012
Beiträge
2.549
Ort
DE
Die "S60" aus Deinen Sequenzen ergeben sich aus Slave-Adresse 0x30 um das R/W-Bit nach links versetzt?

(Bild gefunden bei Roboternetz.de)
 
e-doc

e-doc

Mitglied seit
21.05.2012
Beiträge
2.549
Ort
DE
So, ich habe nun doch Kommunikation mit dem OZ890 über Parallelport :D:

OZ890_LiFePO_readout.PNG


Mit den Hieroglyphen kann ich zwar noch nicht viel anfangen, aber das wird noch...

Die Syntax zur Ansteuerung des I²C-Bus ist übrigens sehr ähnlich der des ELV-Adapters:


Code:
Syntax der I2C-Kommandofolgen:
------------------------------

Startbedingung                          's'
zu sendende hex Bytes                   'a0'
zu empfangende Bytes                    'x' oder 'r'
Stopbedingung                           'p'
Abtrennung einzelner Kommandofolgen     ',' oder neue Zeile
Abtrennung eines folgenden Kommentars   ';'
Am Anfang und am Ende einer Kommandofolge können 's' und 'p' weggelassen werden.

zusätzliche Editorkommandos:
Einfügen einer neuen Zeile              Ctrl-Enter
Absenden der aktuellen Zeile            Enter

zusätzliche Zeichen im unteren Editorfeld ('Empfang'):
acknowledged                            '+'
not acknowledged                        '-'

Beispiele:
...
Lesen eines Bytes aus einem I2C-Bus EEPROM mit 'repeated start'
Eingabe:
a0 00 s a1 x ;Lesen eines Bytes
         A0 ist Deviceadresse (zum Schreiben)
         00 Subadresse (Byte-Adresse)
         s  neue Startbedingung (so called repeated start)
         A1 ist die Deviceadresse (zum Lesen)
         x  Platzhalter fuer zu lesendes byte
         ;  ein Kommentar folgt
Ausgabe:
sA0+ 00+ sA1+ r55-p
         r55- not ackowledge vom Master
        entsprechend der I2C-Busspezifikation gibt der Master (der PC)
        nach dem letzten gelesenen Byte ein nAck aus
(Zitat aus der Programmbeschreibung)

Demnach liegt es an der original O2Micro Cowboy-0.75-Software, die die identische Schnittstellenbeschaltung benutzt, daß es damit nicht funktioniert!
Oder Cowboy erwartet eine andere Schnittstellenbeschaltung(?)
 
Zuletzt bearbeitet von einem Moderator:
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
Hast Du jetzt mal Deine Hexwerte in Klartext übersetzt?
 
e-doc

e-doc

Mitglied seit
21.05.2012
Beiträge
2.549
Ort
DE
Nein, ich hatte Probleme überhaupt nochmal eine Kommunikation zustande zu bekommen.
Gestern habe ich aber die Ursache gefunden (einige Default-Werte des verwendeten Programms hatten sich verstellt) und werde jetzt versuchen sinnvolle Daten herauszulesen.

Welche Deiner Sequenzen kann ich gefahrlos zum auslesen und ändern (z.B. der Zellenzahl) verwenden?
 
H

henry-n

Mitglied seit
08.12.2011
Beiträge
503
Ort
Schwarzwald
Details E-Antrieb
V-Power DD, Cyclone Mittelmotor, Bagier DD
Lies doch mal Register 6 aus:

S60 06 P S61 01 P Auslesen Register 6
upload_2015-1-30_13-42-15.png

upload_2015-1-30_13-41-17.png

Wichtig ist auch noch das Register 13h, da hier UC1 und UC0 festlegen, ob man auf den EEprom-Bereich oder die Userdaten zugreift. (S.44 im Datasheet)
upload_2015-1-30_13-45-15.png


Wie Gesagt: Das Datasheet ist die Bibel. Ohne das zu lesen und zu verstehen gehts nicht weiter. Ich kann das hier nicht alles runterbeten.
Dann gibts noch eine sehr hilfreiche "OZ890 App Note collection" Google mal danach.

Von einer gefahrlosen Änderung der Zellenzahl würde ich nicht reden, da ja auch alle Einzel-Parameter der Zellen passen müssen. Ohne die zu prüfen, würde ich nicht einfach die Zellenzahl erhöhen.
 
Thema:

smartBMS OZ890 mit ELV i2c-Interface ansprechen

Oben