10 Zellen Spannungsüberwachung

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • 10 Zellen Spannungsüberwachung

      Hallo zusammen, und hallo Forum!

      Ich bin nun bereits seit mehreren Jahren Mitglied der Bascom-Jüngerschaft und habe alle meine bescheidenen Projekte damit bestritten. Großer Dank an das Forum, ich habe so einige Antworten auf meine Fragen bereits hier als Leser gefunden.

      Ich habe für ein Inkognito-E-Bike bereits einen 10s1p-Rahmenakku aus 10 Rundzellen entwickelt und seit 2 Jahren im Einsatz. Dessen Zellen werden bisher extern gebalanced (alle Balancingkabel mit D-SUB-Stecker nach Außen geführt) = nicht schön genug.
      Für eine Version 2 möchte ich nun ein simples Batteriemanagementsystem auf Basis von einem Attiny25/85 pro Zelle einsetzen.

      Lastenheft:
      - Master (Attiny auf Zelle 1) steuert den MOSFET für Ladespannung und Motor unter Beachtung von Unter- und Überspannung
      - möglichst niedriger Ruhestrombedarf, d.h. Master fragt Slaves nach Zellspannungen periodisch ab, kein dauerhaftes Senden
      - Kommunikation der Slaves zum Master (Attinys auf Zellen 2-10) potentialfrei
      - simples Widerstandsbalancing der Slaves, selbstgesteuert



      Meine Frage:

      Wie würdet Ihr die Kommunikation der Slaves zum Master angehen? Welches Protokoll würdet ihr nutzen?
      Ich habe mich bisher leider noch mit keinem Protokoll anfreunden können, da es meinen Horizont bis jetzt übersteigt. Über Meinungen und Gründe warum ihr ein Protokoll nutzen würdet, wäre ich dankbar! Oder hat jemand sogar einen Gedankenblitz, wie ich den Strombedarf meiner bisherigen Lösung, s.u., verringern kann? Wie auch immer, ich Danke Euch für Eure Antworten!


      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Mein bisheriger Versuchsaufbau am Slave, wenn es interessiert:
      (BUS ist einfach eine Kabelschleife vom Master+ in einen Masterpin, die durch jeden Slave-Optokoppler unterbrochen wird, wenn Unter- oder Überspannung. Der Master entscheidet dann anhand seiner eigenen Zellspannung, ob es sich um ein Unter-oder Überspannungsereignis handelt. So war mein Denken um ohne Kommunikation auszukommen. Nachteil: dauerhafter Betrieb der Optokoppler braucht viel zu viel Strom..)


      Quellcode

      1. '***SLAVE***
      2. 'OptokopplerLED an PB2
      3. 'Balancer an PB4+PB3
      4. $regfile = "attiny25.dat"
      5. $crystal = 1000000 '16000
      6. $hwstack = 32
      7. $swstack = 10
      8. $framesize = 10
      9. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      10. Config Watchdog = 8192
      11. Dim Adc_result As Word
      12. Dim Vcc as single
      13. Dim U_Lowcutoff as Single
      14. Dim U_Highcutoff as Single
      15. Dim U_Lowcutoffhyst as Single
      16. U_Lowcutoff=2.8
      17. U_Highcutoff=4.1
      18. U_Lowcutoffhyst=2.95
      19. Ddrb = &B00011111
      20. Stop Ac
      21. Start Adc
      22. Enable Interrupts
      23. Start Watchdog
      24. 'Start Programm
      25. sbi adcsra,7
      26. Adc_result = Getadc(12) 'Dummy Messung auf MUX Kanal 14, der internen
      27. Bandgap Referenzspannung (1.1V)
      28. Waitms 2 'Stabilisierungszeit für Bandgap Spannung
      29. Adc_result = Getadc(12)
      30. cbi adcsra,7
      31. Vcc = 1.1*1024
      32. Vcc = Vcc / Adc_result 'VCC = 1,1V * 1024 / ADC
      33. If Vcc < U_Lowcutoffhyst Or Vcc = U_Lowcutoffhyst Then
      34. Portb = &B00000000
      35. Reset Watchdog
      36. Powerdown
      37. else
      38. '####################### Messschleife START ##########################
      39. Messschleife:
      40. Do
      41. Reset Watchdog
      42. sbi adcsra,7
      43. Adc_result = Getadc(12) 'Dummy Messung auf MUX Kanal 14
      44. Waitms 2 'Stabilisierungszeit für Bandgap Spannung
      45. Adc_result = Getadc(12)
      46. cbi adcsra,7
      47. 'VCC = 1,1V * 1024 / ADC
      48. Vcc = 1.1*1024
      49. Vcc = Vcc / Adc_result
      50. If Vcc > U_Lowcutoff And Vcc < U_Highcutoff Then
      51. Goto Normalbetrieb
      52. Else
      53. If Vcc > U_Highcutoff Or Vcc = U_Highcutoff Then
      54. Goto Ueberspannung
      55. Else
      56. If Vcc < U_Lowcutoff Or Vcc = U_Lowcutoff Then
      57. Goto Unterspannung
      58. Else
      59. End If
      60. End if
      61. End if
      62. Loop
      63. End if
      64. '####################### Messschleife ENDE ##########################
      65. Normalbetrieb: ' BUS AN, Balancer AUS
      66. Portb = &B00000100
      67. Waitms 2000
      68. Goto Messschleife
      69. Ueberspannung: ' BUS AUS, Balancer AN
      70. Portb = &B00011000
      71. Waitms 5000
      72. Goto Messschleife
      73. Unterspannung: ' BUS AUS, Balancer AUS
      74. Portb = &B00000000
      75. Reset Watchdog
      76. Powerdown
      77. End
      Alles anzeigen
    • Interessantes Thema ;)

      Optokoppler sind in der Tat stromhungrig.

      Wie wäre es mit Kondensatoren?
      Beispiel 2 Zellen:
      Dein Master hängt an der unteren Zelle.
      Dein TX hat einen Kondensator mit 1µF und einen Widerstand 100k auf plus der 2. Zelle, also etwa 8 Volt.
      Zwischen Kondensator und Widerstand ist TX des oberen AVRs.

      Der Rückkanal geht genauso über einen Kondensator, nur dass der Widerstand an Masse des oberen, also plus des Masters liegt.
      Wenn deine Telegramme nicht zu lang sind, driftet der Kondensator nicht weit weg.
      Kann man ja mal simulieren.
    • Kennst du solche IC's:

      ti.com/power-management/batter…s-balancers/products.html

      ..
      oder beim Laden sowas parallel benutzen (gibt auch 5A Versionen)

      ebay.de/itm/Active-Equalizer-B…98a24d:g:qYEAAOSwsShdf5c7

      Gruß.

      ...eine CPU kannst du trotzdem noch benutzen. So ein BMS Chip möchte ausgelesen und visualisiert werden -> Display .

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Entry ()

    • Einen µC je Zelle empfinde ich als Overkill. Und obendrein störanfällig.
      Meine selbstgebauten BMS benutzen alle die Multiplexer DG409. Es wird ein Speicherkondensator aufgeladen (100nF) und dieser wird mit einem weiteren DG409 auf den AD-Eingang "weitergeschaltet". Mit vernünftigen Zeitkonstanten zwischen disablen und enablen klappt das sehr gut. Bei Deinen 10s1p kannst Du die Multiplexer gar ohne (Vor)Widerstandsteiler benutzen. Einen kleinen Vowiderstand in der Größenordnung von 1k würde ich aber trotzdem immer vorsehen, damit die EIngangsschutzbeschaltung die Chance hat, ggf. statische Entladungen abzufangen.
      Eine andere Möglichkeit sind OptoMOS-Relais. Die niederohmigen könnte man sogar zum Schalten der Balancing-Widerstände verwenden, wenn man dafür nicht die Ausgänge von konventionellen Optokopplern und ggf. eine nachgeschaltete Mosfet-Stufe nehmen möchte (so mache ich es).
      Am simplesten ist wohl die Verwendung von auf BMS spezialisierten IC's, von denen es für ("nur") 10s eine ganze Reihe gibt. Dem Hörensagen nach sind die BQ... etwas einfacher anzusteuern und die LTC68.. etwas schwieriger. Habe das aber selbst noch nicht probiert.
    • ups,
      darf ich dich mal fragen, was Du da für Zellen nimmst.
      Wenn ich jetzt mal von 4000mAH pro Zelle ausgehe dann komme ich auf 36 V und 14,4 W/h
      Da bedeutet nur knappe 9 Minuten 100 W Unterstützung.
      Habe ich jetzt einen Denkfehler oder hast Du viel bessere Zellen oder bist Du tatsächlich nur an
      ganz kurzer Unterstützungszeit interessiert.
      "Inkognito-E-Bike" könnte ja schon darauf hindeuten, dass Du das ganze nur nützt um kurz beim Anfahren zu glänzen.
      Interessieren würde mich natürlich auch noch der Antrieb.
      Optisch nicht auffallen tut z.B. der "Vivax Assist Motor".
      Den kenne ich zwar, habe ihn aber noch nie in der Praxis erlebt.
    • Climbi schrieb:

      Wenn ich jetzt mal von 4000mAH pro Zelle ausgehe dann komme ich auf 36 V und 14,4 W/h
      Da bedeutet nur knappe 9 Minuten 100 W Unterstützung.
      Bei 14,4W/h hast du 100 Watt in 7 Stunden?

      Die Einheit heißt Wattstunden -> Wh.
      Einfach Kapazität mAh (kleines h) mit der Spannung multiplizieren.
      Das sind dann 144 Wh.

      @Entry und @laase
      Fertige ICs gibt es für alles mögliche.
      Trotzdem wäre es doch interessant, sowas mal mit AVRs zu machen?
      Ist preislich bestimmt kein Beinbruch und man kann eine Menge lernen.
    • der von Dir berechnete Wert (knapp 9 Minuten lang 100W) stimmt schon! Ich frage mich auch immer, was man mit so wenig Energieinhalt beim Fahrrad anstellen will, aber manche fahren eben nicht so lange zur Arbeit bzw. nutzen die Unterstützung wirklich nur am Berg. Ich habe 1,2kWh drin (14s8p a 3Ah) und es könnte für meine 2x38km zur/von Arbeit auch gern noch etwas mehr sein ... ;)

      @Michael: habe ich doch! Ich schalte die DG409 Multiplexer mit einem Atmega328, wandle AD, sortiere höchste und niedrigste, zeige Balken an, schalte per Optokoppler Mosfet-Balancingstufen usw.
      Ist tatsächlich kein Hexenwerk, nur eben eine Menge Zeilen Code und viel SMD-Löterei. Mit dem 328 schaffe ich jetzt bis zu 20s. Das ist schon aus dem Grund grenzwertig, da die DG409 bei der hohen Spannung alle mit Vorteiler betrieben werden müssen (40 St 0.1% Präzwiderstände!) und die Zellen asymmetrisch mit "Ruhestrom" belastet werden. Macht nichts, wenn man den Pack täglich nutzt und immer ein paar Min balancieren lässt, macht aber schon was, wenn der Pack ein Jahr nur so herumsteht. Dann sind die untersten Zellen deutlich leerer als die oberste.
      Außerdem ist meine Schaltung längst nicht so schnell, wie BMS Chips: unter etwa 70ms pro Zelle kriege ich auch nach vielen Versuchen nicht hin, auch nicht mit besseren Multiplexern, die weniger Leckstrom haben (dort dann vll 50ms). Bin mit 20 Zellen also bei ca. 1.5s je komplettem Durchlauf. Mir reicht es, aber aus heutiger Sicht erscheint es deutlich zu langsam und Schnellladung usw. wäre damit auf keinen Fall möglich.
      Positiv ist natürlich, daß man eine Kalibrierroutine einbauen und die Messung bei jeder einzelnen Zelle von Zeit zu Zeit nachkalibrieren kann, Wenn die Präzwiderstände nach einiger Zeit driften (und das tun sie!!!), bedeutet das nicht gleich, die ganze Schaltung wegwerfen zu müssen, wie es zB bei billigen Modellbau-BMS der Fall ist (hatte hier schon 3 Stück anfänglich gute und komfortable "Chargery BM16s", die nach zwei bis drei Jahren einfach so dermaßen daneben lagen, daß man die nicht einmal mehr auf LFP Akkus hätte loslassen können).
    • laase schrieb:

      der von Dir berechnete Wert (knapp 9 Minuten lang 100W) stimmt schon!
      ich errechne 144Wh/100W = 1,44 Stunden

      laase schrieb:

      @Michael: habe ich doch! Ich schalte die DG409 Multiplexer mit einem Atmega328, wandle AD, sortiere höchste und niedrigste, zeige Balken an, schalte per Optokoppler Mosfet-Balancingstufen usw.
      Das war nicht das Thema und Optokoppler sind stromhungrig.
      Der OP wollte auch keine extra Multiplexer.
      Ich finde das Projekt mit einem simplen Attiny pro Zelle sehr interessant und halte es für durchführbar.
    • 1,44 Stunden: stimmt, ich hatte es nicht richtig gelesen und bin von den von Climbi genannten bzw gemeinten "14.4Wh" ausgegangen. Daher dann die "knapp 9 Min".

      @Pluto25: bei 1,5s Durchlaufzeit für eine 20s Zellkonfig bekommt man zB Probleme direkt beim Ladebeginn an LFP-Zellen, wenn eine/einige (nicht alle) Zellen schon voll sind: Die vollsten Zellen "schiessen" bei entsprechend hohem Strom in Nullkommanichts über die 3.65V hinaus (und auch noch über die von manchen genannte "Absolutobermaxgrenze" von 4.1V), bevor das langsame BMS es mitbekommt und das Ladegerät runterregelt/abschaltet. Wenn man das Problem aber kennt, kann man natürlich schon damit rechnen und läßt einen Lader immer entsprechend langsam hochlaufen und nicht gleich direkt von 0 auf 100%. Dann reicht es auch, wenn das BMS 1.5 oder gar 2s für einen Durchlauf braucht.
      Die lange Durchlaufzeit führt auch zu Problemen bei der Erkennung der niedrigsten und höchsten Zelle: in einem typischen Geländefahrbetrieb mit zB einem E-Motorrad könnte man nicht viel geben auf die von einem langsamen BMS ermittelte spannungsniedrigste Zelle. Das wird immer nur eine Momentaufnahme und mehr oder weniger ein Zufallsprodukt sein. Bei einer eher kontinuierlich-gleichmäßigen Entladung spielt die Durchlaufzeit dagegen wieder kaum eine Rolle.
      Die speziellen BMS Chips schaffen ihre zB 16 Zellen jedenfalls in deutlich unter 100ms ...
    • @Wiejo: uund, hast Du Michaels Tipp mit der Kommunikation über die Kondensatoren mal ausprobiert?

      Ich hätte zwar keine Nanoampere-Lösung zu bieten, aber dafür eine, die einen Portpin einspart: in meinem E-Auto kommuniziert der Master (Mega328) isoliert mit mehreren Slaves (Tiny25) zur Strom und Spannungsmessung für die Motorsteuerung, Ladung und für andere Aufgaben. An Stellen, wo diese Kommunikation nicht allzu schnell sein muß, habe ich eine solche Schaltung mit zwei Optokopplern, 2x2 Widerständen und je nur einem Portpin ersonnen (habe im Schaltplan schon ziemlich viel gelöscht, wollte aber nicht noch weitermachen; es geht jedenfalls um OK5 und 6 und um R23 und 24:
      serKommunikation_2xOpto_1Pin.jpg


      Auf der Master-Seite, die hier aus Übersichtlichkeitsgründen weggelassen wurde, gibt es auch noch einmal zwei solche 390 Ohm-Widerstände, jeweils einer von Anode und Kollektor zu Vcc und der andere über der Sendediode.
      Mit jeweils zwischen Senden und Empfangen umgeschalteter Soft-UART (Serin und Serout) kann man so recht gut kommunizieren und hat einen Portpin gespart:
      ...
      Serin Adcbyte , 1 , D , 7 , 19200 , 0 , 8 , 1 'SERIN var,bts,port,pin,baud,parity,dbits,sbits
      ...
      Serout Pwmvorgabebytezumsenden , 1 , D , 7 , 19200 , 0 , 8 , 1 'SEROUT var , bts , port , pin, baud , parity , dbits , sbits

      D.7 wurde in diesem Fall einmalig als Eingang deklariert und funktionierte beim Senden trotzdem aus Ausgang.
      Beim Wert 390 kann man bestimmt auch noch etwas optimieren, vieleicht funktionieren ja bei Optokopplern mit höherer CTR auch 470Ohm
    • bei dem in der E-Mobilszene relativ bekannten BMS der Firmen GKA/GfE, das mal für das E-Mobil City-El (produktionstechnisch in Kleinserie, aber trotzdem in vergleichsweise hoher Stückzahl) gebaut wurde (und von dem auch heute noch Ersatzteile vertrieben werden), sorgen auch zwei Optokoppler '817' für die Übertragung der Daten:
      SlaveModul.JPG
      Hier ist es allerdings eine konventionelle Schaltung: 1 Portpin am Pic fürs Senden und einer fürs Empfangen.
      Das Relais dient übrigens der völligen Trennung des Slave-Moduls von der Zelle, wenn nicht geladen oder gefahren wird. Die Relaisspulen aller Slavemodule sind parallel geschaltet, was bei 16 Zellen einen relativ hohen Strombedarf ergibt. Mit einem entsprechenden Ruhezustand des µC, einem hochohmigen Spannungsteiler und der Verwendung der interrnen Referenz anstelle der hier unten links im Bild sichtbaren Externen könnte man den Ruheverbrauch der Schaltung drastisch reduzieren und auf das Relais verzichten.