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..)
Alles anzeigen
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
- '***SLAVE***
- 'OptokopplerLED an PB2
- 'Balancer an PB4+PB3
- $regfile = "attiny25.dat"
- $crystal = 1000000 '16000
- $hwstack = 32
- $swstack = 10
- $framesize = 10
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- Config Watchdog = 8192
- Dim Adc_result As Word
- Dim Vcc as single
- Dim U_Lowcutoff as Single
- Dim U_Highcutoff as Single
- Dim U_Lowcutoffhyst as Single
- U_Lowcutoff=2.8
- U_Highcutoff=4.1
- U_Lowcutoffhyst=2.95
- Ddrb = &B00011111
- Stop Ac
- Start Adc
- Enable Interrupts
- Start Watchdog
- 'Start Programm
- sbi adcsra,7
- Adc_result = Getadc(12) 'Dummy Messung auf MUX Kanal 14, der internen
- Bandgap Referenzspannung (1.1V)
- Waitms 2 'Stabilisierungszeit für Bandgap Spannung
- Adc_result = Getadc(12)
- cbi adcsra,7
- Vcc = 1.1*1024
- Vcc = Vcc / Adc_result 'VCC = 1,1V * 1024 / ADC
- If Vcc < U_Lowcutoffhyst Or Vcc = U_Lowcutoffhyst Then
- Portb = &B00000000
- Reset Watchdog
- Powerdown
- else
- '####################### Messschleife START ##########################
- Messschleife:
- Do
- Reset Watchdog
- sbi adcsra,7
- Adc_result = Getadc(12) 'Dummy Messung auf MUX Kanal 14
- Waitms 2 'Stabilisierungszeit für Bandgap Spannung
- Adc_result = Getadc(12)
- cbi adcsra,7
- 'VCC = 1,1V * 1024 / ADC
- Vcc = 1.1*1024
- Vcc = Vcc / Adc_result
- If Vcc > U_Lowcutoff And Vcc < U_Highcutoff Then
- Goto Normalbetrieb
- Else
- If Vcc > U_Highcutoff Or Vcc = U_Highcutoff Then
- Goto Ueberspannung
- Else
- If Vcc < U_Lowcutoff Or Vcc = U_Lowcutoff Then
- Goto Unterspannung
- Else
- End If
- End if
- End if
- Loop
- End if
- '####################### Messschleife ENDE ##########################
- Normalbetrieb: ' BUS AN, Balancer AUS
- Portb = &B00000100
- Waitms 2000
- Goto Messschleife
- Ueberspannung: ' BUS AUS, Balancer AN
- Portb = &B00011000
- Waitms 5000
- Goto Messschleife
- Unterspannung: ' BUS AUS, Balancer AUS
- Portb = &B00000000
- Reset Watchdog
- Powerdown
- End