Forum: Mikrocontroller und Digitale Elektronik Daisy Chain System für Lithium BMS


von Florian (Gast)


Lesenswert?

Hallo,

ich muss mal bei den Experten nachfragen, ob jemand eine gute Idee hat.

Undzwar würde ich gerne für mein Lithium BMS in Zukunft auf daisy chain, 
das heißt die Cell Boards alle mit einem Kabel vom nächsten Cell Board 
beschalten.

Aktuell sind alle "Parallel" per Optokoppler anzusprechen.

Hat jemand eine Idee wie man das implementieren könnte?

Man könnte natürlich einen Level Shifter bauen, damit der nächste das 
Signal bekommt, aber meine Frage zielt eher auf das Problem ab, dass bei 
einer Reihenschaltung von zb. 40 Zellen das 1. Cell Board die Daten 
rausschieben muss, und durch alle Cell Boards "durchwandern" muss, bis 
ans letzte, welches dann wieder mit der Main Unit verbunden ist.

Oder wäre es sinnvoll die Schaltung so auszulegen, dass bei anlegen 
eines Signals an der Leitung, automatisch alle Cell Boards das selbe 
Signal bekommen, natürlich gäbe es da einige ns - µs Zeitunterschiede, 
aber zumindest wäre das Signal, relativ schnell auch vom 1. Board am 
Ende.

Danke schonmal an alle die sich meinem Problem annehmen wollen :)

Lg
Florian

von MaWin (Gast)


Lesenswert?

Als ob ich das nicht schon in einem anderen Thread gesagt hätte:

Einfache Koppelkondensatoren (wie für Audio) reichen, wenn man kurze 
Impulse überträgt. Kondensatoren wirken sogar bidirektional.

Optokoppler fressen viel zu viel Strom., Transformatoren sind zu 
aufwändig, Basis-Transistorschaltung ist aufwändiger und braucht auch im 
Strom.

von Florian (Gast)


Lesenswert?

Hallo MaWin

Danke für deine Antwort.

Du hast natürlich recht, Kondensatoren bieten sich dafür ideal an.

Aber meine Frage zielt ja auch auf das System ab, wie ich sie 
verschalten soll. Das heißt echt in Serie, sodass die Daten durch jedes 
Board durch müssen, oder eben mehr oder weniger parallel, wo jedes Board 
die selben Daten zum "selben" Zeitpunkt bekommt.

Bei zweiterem ist das Problem, dass ich die Zelladressen vorher 
einprogrammieren muss, da sie sich ja zu beginn komplett ident 
verhalten, und ich nicht unterscheiden kann ob es Cell Board 1 oder Cell 
Board 40 ist.

Grüße
Florian

von MaWin (Gast)


Lesenswert?

Bei Kondensatoren kann man einen BUS aufbauen, ähnlich I2C,
in dem zwar zu einer Zeit nur einer Senden kann, aber alle hören.

Damit ist es nicht nötig, eine Daisy-Chain mit getrennten Ein-Ausgängen 
für den Anschluss nach "unten" und den Anschluss nach "oben" zu haben, 
und den Prozessor eine Weiterleitung machen zu lassen für Daten/Befehle 
die ihn nicht interessieren, aber die weiter "oben" interessieren 
könnten.

Da aber die Daisy Chain es erlaubt, daß ein Prozessor nicht seine 
Adresse / Position im Akku kennen muss, weil beispielsweise als Adresse 
ein Byte im Kommando verwendet wird, das bei Weiterleitung immer um 1 
dekrementiert wird, und bei 0 fühlt sich dann der Prozessor 
angesprochen, habe ich das als Daisy-Chain mit "interception" aufgebaut.

Ist einfacher als ein DIP-Schalter oder unterschiedlich geflashte 
Prozessoren pro PCB.

von Florian (Gast)


Lesenswert?

Das hört sich sehr interessant an, hast du zufällig genauere 
Informationen, über dein BMS?

Das Bus System - einer sendet alle lauschen, war schon so geplant, deine 
Ausführung zu folgendem ist mir allerdings noch nicht 100%ig klar.

[quote]
Da aber die Daisy Chain es erlaubt, daß ein Prozessor nicht seine
Adresse / Position im Akku kennen muss, weil beispielsweise als Adresse
ein Byte im Kommando verwendet wird, das bei Weiterleitung immer um 1
dekrementiert wird, und bei 0 fühlt sich dann der Prozessor
angesprochen, habe ich das als Daisy-Chain mit "interception" aufgebaut.
[/quote]

Angenommen, der Master sendet ein Byte aus, dieses Byte bestimmt die 
Adresse des Cell Moduls.

Sendet nun der Master zu beginn, wenn jeder Flash gleich programmiert 
ist, das Byte "1", so würden alle dem Master lauschen ( alle bekommen 
die Daten gleichzeitig ) und jeder würde antworten, bzw. dekrementieren.

Diese "Weiterleitung" funktioniert doch mit dem BUS System via 
Kondensator nicht, oder habe ich deine Ausführung hierzu falsch 
aufgefasst?

Danke für deine Hilfe

Florian

von MaWin (Gast)


Lesenswert?

Master sendet "Spannung Akku 2" an den "downward" Eingang
an ersten uC (der an Akku 1 sitzt)
der decrementiert die Adresse (aus 2 wird 1) vergleicht auf 0 (nein)
also sendet er es (mit Adresse 1) über den "upward Ausgang"
an den "downward" Eingang des nächsten uC (der an Akku 2 sitzt)
der decrementiert die Adresse (aus 1 wird 0) vergleicht mit 0 (ja)
du fühlt sich angesprochen die Spannung zurückzusenden,
über den "downward " Ausgang an den uC am Akku 1,
der er weitersendet an den Master.
Dadurch reicht dasselbe Programm für alle Zellen,
und wenn "Spannung Akku 4" nicht antwortet,
gibt es eben nur 3 Zellen.
Der letzte uC kann sogar durch eine Kurzschlussbrücke
statt einem Verbindungskabel feststellen, daß er der
letzte ist und mit "no more cells" antworten.

von Florian (Gast)


Lesenswert?

Hallo,

ja dann habe ich dich vorher falsch verstanden.
So ergibt das Sinn :)

Aber das hieße ja, eine Anfrage vom Master muss durch alle unteren Cell 
Boards durch, bevor es beim angesprochenen ankommt,
das heißt Master sendet Anfrage an Zelle 40.

Zelle 1 - Zelle 39 lesen ein, dekrementieren, und geben wieder aus.
Das heißt um die Zelle 40 abzufragen, braucht es die 40 - fache Zeit als 
wenn ich Zelle 1 abfragen möchte.

Insgesamt hieße das, für eine Komplettabfrage, brauche ich die 800-fache 
Zeit, wie wenn ich nur Zelle 1 abfrage.

Wird das System dadurch nicht etwas sehr träge?

Gruß
Florian

von MaWin (Gast)


Lesenswert?

Florian schrieb:
> Wird das System dadurch nicht etwas sehr träge?

SPI ist ziemlich schnell, und es kann ein Byte schon gesendet werden 
bevor die ganze Botschaft angekommen jst.
Schlimmer ist, dass man alle uC aufwecken muss, um eine Anfrsge an den 
letzten stellen zu können.
Aber wenn man sekündlich abfragt, sind die uC immer noch 99.9% der Zeit 
im Sleep Modus, und sekündlich ist unnötig schnell.

von Florian (Gast)


Lesenswert?

Hallo, da hast du natürlich recht.

SPI wäre mir zwar sehr recht, da es zumeist schon in Hardware vorhanden 
ist, allerdings müsste ich das ganze ja synchron machen, das heißt den 
Takt müsste ich mitübertragen, was ich eigentlich nicht will, dann 
bräuchte ich schon 2 Leitungen.

Hast du es per SPI gelöst?

von MaWin (Gast)


Lesenswert?

Florian schrieb:
> Hast du es per SPI gelöst?

Nein, Software-seriell da ich 2 brauchte und der Pin auch als wake-up 
dienen konnte.
Zudem gab es ein Kommando das ganz nach oben gereicht wurde und dann die 
ganze Kette von Spannungswerten lieferte.

von Florian (Gast)


Lesenswert?

Hallo,

das hört sich interessant an,
mit welcher Datenrate verwendest du die Übertragung?

von MaWin (Gast)


Lesenswert?

Um 60kbps waren das.

von Florian (Gast)


Lesenswert?

Hallo MaWin,

ja es ist etwas Zeit vergangen, allerdings hatte ich einiges zu tun und 
bin nicht zum weiterarbeiten gekommen.

Ich wollte dich nochmal auf dein serielles Protokoll ansprechen, bzw. 
die Hardware realisierung.

Hast du eventuell einen Schaltplan für mich?

Du sagtest du kannst bereits Daten rausschicken, während du noch nicht 
das komplette Datenpaket empfangen hast, wie genau realisierst du das 
denn ?

Darf ich dich auch eventuell nach dem Protokoll dahinter fragen? Wie 
unterschiedest du 0/1, über die Zeit?

Danke

Grüße
Florian

von Florian (Gast)


Lesenswert?

Oder hat sonst jemand von euch Ideen dazu?

Florian

von Stampede (Gast)


Lesenswert?

ISOSPI mit LTC6820

von Stampede (Gast)


Lesenswert?

bzw. LTC6804

von Florian (Gast)


Lesenswert?

Hallo,

der LTC6820 hört sich zwar gut an, aber mit knapp 10€ für 2 Stück pro 
Platine ist der auch reichlich teuer.

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.