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
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.
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
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.
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
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.
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
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.
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?
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.
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