Forum: Haus & Smart Home Automatischer Generatorstart bei niedriger Batterie (LiFePo4)


von Stefan (der_dicke82)


Angehängte Dateien:

Lesenswert?

Moin moin,

erstmal ich bin absoluter Laie bei fast allem was ich tue, warum tue ich 
es trotzdem? Ich lebe in einem dritte Weltland und mein gefährliches 
Halbwissen erscheint mit fast immer solider als das örtliche 
Expertenwissen :-D

Damit sei auch noch kurz drauf hingewiesen, das es hier kein Problem 
darstellt alles an Installationen und Bauarbeiten selber durchzuführen 
und selber dran zu sterben ;-)

Jetzt zu meinem Problem:

Für meine Solaranlage habe ich eine LiFePo4 Batteriebank und insgesamt 6 
Wechselrichter im 3 Phasenbetrieb installiert. Gerade an bewölkten Tagen 
reicht manchmal die Sonne nicht aus um die Batterie am Abend wieder voll 
zu haben. Manchmal ist auch ein zu hoher Verbrauch das Problem.

Also habe ich mir eine kleine Schaltung gebaut um meinen 3 Phasen 
Generator zu starten, wenn die Batteriebank bei ca. 52 Volt ist.

Ich verwende dazu einen Arduino Uno. Die Stromversorgung kommt über die 
Generatorbatterie (12 V) und wird von einem Schaltregler auf 10 Volt 
begrenzt für den Hohlsteckereingang des Uno (Ich dachte es wäre 
vielleicht Sinnvoll über den Linearregler zu gehen.

Die Batteriebank ist über zwei Widerstände (R1: 1MOhm, R2 100kOhm) 
angeschlossen.
Außerdem gibt es zwei Schalter für den manuellen Start und Stop des 
ganzen. Wobei der Stopknopf im Moment deaktiviert ist, weil der immer 
wieder am "ghosten" war (besonders bei niedriger Spannung an der 
Generatorbatterie)

Hier der Arduinocode:
1
const int RelaisZuendpin = 19;
2
const int RelaisStartpin = 18;
3
const int Spannungspin = A0;
4
const int KnopfAn = 17;
5
const int KnopfAus = 2;
6
int Spannung;
7
8
volatile int KnopfAusStatus = 1;
9
10
void setup() {
11
  // put your setup code here, to run once:
12
  Serial.begin(9600);
13
  pinMode(RelaisZuendpin, OUTPUT);
14
  digitalWrite(RelaisZuendpin, HIGH);
15
  pinMode(RelaisStartpin, OUTPUT);
16
  digitalWrite(RelaisStartpin, HIGH);
17
  pinMode(KnopfAn, INPUT_PULLUP);
18
  pinMode(KnopfAus, INPUT_PULLUP);
19
//  attachInterrupt(0, pin_ISR, CHANGE);
20
}
21
22
void loop() {
23
  // put your main code here, to run repeatedly:
24
  // Spannung auslesen
25
  Spannung = analogRead(Spannungspin);
26
  // Spannung für debug and Serial
27
  Serial.print(Spannung);
28
  // Lesevorgänge minimieren um Fehler zu vermeiden
29
  delay(10000);
30
  // Vergleich der Spannung und Abfrage des Startknopfs
31
  if (((640 < Spannung) && (Spannung < 925)) || (digitalRead(KnopfAn)==0))
32
  {
33
    // Zündung an
34
    digitalWrite(RelaisZuendpin, LOW);
35
    delay(1000);
36
    // Anlasser an
37
    digitalWrite(RelaisStartpin, LOW);
38
    delay(2000);
39
    // Anlasser aus
40
    digitalWrite(RelaisStartpin, HIGH);
41
    delay(600000);
42
    // Prüfen ob Spannung angestiegen ist
43
   if (Spannung > analogRead(Spannungspin))
44
   {
45
    // alle Relais aus
46
   digitalWrite(RelaisStartpin, HIGH);
47
   digitalWrite(RelaisZuendpin, HIGH);
48
   }
49
   delay(3000000);
50
   // Zündung aus
51
   digitalWrite(RelaisZuendpin, HIGH);
52
  }
53
  
54
}
55
// Einbindung des Ausknopfes als Interrupt
56
// void pin_ISR(){
57
//    digitalWrite(RelaisStartpin, HIGH);
58
//    digitalWrite(RelaisZuendpin, HIGH);
59
//    delay(600000);
60
//}

Probleme:
Ghosting beim Interupt (Ausknopf) Im Moment wird dann halt der 
Stromausknopf betätigt um alles aus zu machen.
Starke Schwankungen bei dem Analogwert der Spannung, deswegen habe ich 
schon das Delay von 10 Sek. eingebaut, weil sonst doch immer wieder ein 
Wert innerhalb der Parameter auftaucht und das System den Generator 
startet.

Die Zuleitung von der Batterie ist ca. 10m lang und ich habe hier schon 
gelesen das diese eine Antennenfunktion haben kann und so hohe oder 
niedrige Werte in das System schiebt --> Lösung ein Kondensator, aber 
welcher?

Besser wäre es eins der Relais von den Wechselrichtern zu nutzen und das 
als Startsignal zu nutzen (Kein Analogwert mehr) aber die Wechselrichter 
sind direkt mit dem BMS der Batterie verbunden und dies überschreibt 
scheinbar alle Spannungseinstellungen an den Wechselrichtern.

Perfekt: Den Arduino per RS485 mit dem BMS verbinden und den Ladezustand 
der Batterie direkt auslesen. (Puh dafür bin ich doch zu sehr Laie, ich 
denke ich würde es packen, aber das bräuchte viel viel Zeit)

Ok, Ich freue mich über eure Ansätze und Ideen, vielleicht gibt es ja 
auch einen komplett anderen einfacheren Ansatz

Gruß, Stefan

von Michael B. (laberkopp)


Lesenswert?

Stefan schrieb:
> um die Batterie am Abend wieder voll zu haben.

Offenkundig Inselnetz.

Warum soll der Akku voll sein, du weisst doch noch nicht, wie viel du in 
der Nacht brauchst und wann die Sonne wieder kommt.

Generator starten wenn der Akku zu tief entladen wird, abschalten wenn 
die Generatorlaufzeit vertretbar ist und der Akku wieder voller wurde.

Ganz voll muss er nicht, er würde den Generator wieder einschalten wenn 
er wieder zu tief entladen wird.

Dazu tut es eine Tiefentladeschutzschaltung, die gibt es reihenweise für 
12V als Fertigplatine aber ich wüsste jetzt keinen Link auf eine 48V 
Version.

Die liefert ein Schaltsignal SO LANGE der Generator laufen sollte. Damit 
er am Anfang gestartet wird, braucht es noch ein Impulsrelais, das 
abschaltet wenn der Startversuch vergeblich war oder der Motor läuft.

Das alles kann man auch mit deiner schon vorhandenen Hardware des 
Arduino aufbauen, mit Spannungsteiler und Relais, aber man muss es unter 
Berücksichtigung von EMV Störungen bauen und dazu fehlen dir noch die 
Kenntnisse. EMV lernt man in längeren Ausbildungen und es gibt Gurus mit 
langjährigem Erfahrungsschatz, ist also nichts was du in 1 Absatz lernen 
kannst.

Vielleicht reicht aber schon Sternverdrahtung und im Arduino den 
Watchdog zu aktivieren

https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.25.2

von Stefan (der_dicke82)


Angehängte Dateien:

Lesenswert?

Michael B. schrieb:
> Warum soll der Akku voll sein, du weisst doch noch nicht, wie viel du in
> der Nacht brauchst und wann die Sonne wieder kommt.

Nein der Akku muss natürlich nicht immer voll sein und das wäre auch 
nicht die Aufgabe vom Generator. Auch eine Tiefentladung wird es nicht 
geben, vorher schaltet das BMS halt alles ab.

Aber genau so weit soll es nicht kommen, deswegen soll der Generator ja 
schon früher anspringen und die Batteriebank nachladen.
Er läuft dabei ungefähr eine Stunde und lädt ca. 7kWh in die 
Batteriebank, außerdem übernimmt er für die Zeit jeden Verbrauch.

Die meisten Schaltungen für einen Schutz vor Tiefentladung sind nicht 
vernünftig einstellbar, für einen Hinweis auf ein felxibles System wäre 
ich Dankbar.

Liebe Grüße
Stefan

Edit: Die Skizze nochmal als png und nicht nur pdf

: Bearbeitet durch User
von Rainer W. (rawi)


Angehängte Dateien:

Lesenswert?

Stefan schrieb:
> Skizze.png
> 1,5 MB

> Edit: Die Skizze nochmal als png und nicht nur pdf

Im Sinne der Forenregeln (vom Dateninhalt) ist das ein Photo - PNG ist 
dafür denkbar ungeeignet.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Aaaalso.

Da es ja mehrere Probleme gibt, einzeln aufteilen und nicht alles auf 
einmal.

Erstmal musst Du eine vernünftige Messung der Akkuspannung hinkriegen, 
eine Anbindung über 1M-Ohm erscheint mir dafür verdammt viel, die 
Störungen sind stärker.

Vielleicht auch die Steuereinheit nicht gerade in die Nähe der 
Zündanlage des Generators bauen, sondern eher in die Nähe der Batterie 
und den Generator von dort aus fernsteuern (Abschalteinrichtung am Ort 
des Generators nicht vergessen, damit man einen ungewollten Anlauf 
verhindern kann wenn man mal dran bauen muss).

Zweitens würde ich die Taster z.B. in Hardware entstören. Das bedeutet 
beim AVR-Controller (für den Ardummino) den internen Pullup-Widerstand 
nutzen und 100nF am Taster gegen Masse, Schalten ebenfalls gegen Masse.

Was ich noch Kacke finde: Die Relais-Ruhestellung mit High-Pegeln an den 
Ausgängen. Das ist nicht die Grundeinstellung des AVR, bei jedem Reset 
von dem Ding werden warscheinlich kurz die Relais anziehen bis das 
Programm gestartet wurde. Bau das so, daß die Relais bei High-Pegel am 
Pin aktiv sind.

von Udo S. (urschmitt)


Lesenswert?

Ben B. schrieb:
> Erstmal musst Du eine vernünftige Messung der Akkuspannung hinkriegen,
> eine Anbindung über 1M-Ohm erscheint mir dafür verdammt viel, die
> Störungen sind stärker.

Jepp, sehe ich auch so, Die Widerstände Faktor 10 kleiner. (also 100k 
und 10k)
Der Querstrom ist immer noch viel kleiner als die Selbstentladung der 
Akkus.
Und zusätzlich parallel zu R2 einen 100nF Kondensator.

Damit sollte die Spannungsmessung deutlich besser sein.

Wichtig:
Immer eine Sache ändern und dann schauen ob dich am System etwas ändert.
Schraubst du gleichzeitig an mehreren "Schrauben" weisst du nie was eine 
Änderung bewirkt hat.

Als zweites die Masseverdrahtung. Mach mal Bilder.
Wichtig ist dass die Masse sternförmig verdrahtet ist damit keine 
Brummschleifen entstehen können.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Was ich bei Messungen in störanfälligen Umgebungen auch immer gerne 
mache ist, die ADC-Messung nicht nur einmal auszuführen, sondern 
beispielsweise 16 Messungen zusammenaddieren und die unteren 4 Bits 
wegschmeißen. Man könnte es auch noch komplexer machen, z.B. 20 
Messergebnisse speichern, das höchste und niedrigste Ergebnis 
wegschmeißen und den Durchschnitt aus den verbliebenen errechnen.

von Stefan (der_dicke82)


Lesenswert?

Ben B. schrieb:
> Was ich noch Kacke finde: Die Relais-Ruhestellung mit High-Pegeln an den
> Ausgängen. Das ist nicht die Grundeinstellung des AVR, bei jedem Reset
> von dem Ding werden warscheinlich kurz die Relais anziehen bis das
> Programm gestartet wurde. Bau das so, daß die Relais bei High-Pegel am
> Pin aktiv sind.

Tatsächlich ziehen die Relais nicht an wenn der Uno resettet, aber ich 
weiss was du meinst und hatte mich da auch schon informiert, ich werde 
das auf die ToDoListe setzen.

Ben B. schrieb:
> Zweitens würde ich die Taster z.B. in Hardware entstören. Das bedeutet
> beim AVR-Controller (für den Ardummino) den internen Pullup-Widerstand
> nutzen und 100nF am Taster gegen Masse, Schalten ebenfalls gegen Masse.

Die Pullup habe ich ja im Code aktiviert, ich werde dann nun noch die 
Kondensatoren an den Tastern nachrüsten

Ben B. schrieb:
> Erstmal musst Du eine vernünftige Messung der Akkuspannung hinkriegen,
> eine Anbindung über 1M-Ohm erscheint mir dafür verdammt viel, die
> Störungen sind stärker.
Naja, die Empfehlung kam hier aus dem Forum bei einer Ähnlichen Frage zu 
einer 48 V Batterie, es sind ja immerhin fast 60 V (Hier genau 57,6 V). 
Klar kann ich die Aufteilung 1:11 auch mit kleineren Widerständen 
machen, die Empfehlung für 1MOhm kam aber mit dem Argument, das der 
Widerstand den Strom ausreichend begrenzt um im Fehlerfall den Uno zu 
schützen.

Udo S. schrieb:
> Jepp, sehe ich auch so, Die Widerstände Faktor 10 kleiner. (also 100k
> und 10k)
> Der Querstrom ist immer noch viel kleiner als die Selbstentladung der
> Akkus.
> Und zusätzlich parallel zu R2 einen 100nF Kondensator.

Danke für den Tipp! Zur Größe der Widerstände habe ich ja weiter oben 
schon was geschrieben. Da der Kondensator parallel zu R2 ist, reichen 
hier 25 V Festigkeit? Ist die Art des Kondensators hier egal, oder 
sollte es ein Kerko sein?

Udo S. schrieb:
> Als zweites die Masseverdrahtung. Mach mal Bilder.
> Wichtig ist dass die Masse sternförmig verdrahtet ist damit keine
> Brummschleifen entstehen können
Alle "Gnd" Verbindungen gehen direkt zum Uno, damit sind alle 
verfügbaren Pins ausgenutzt :-D Einzig die beiden Taster teilen sich 
einen GndPin

Wäre es besser nur von einem Pin Sternförmig zu verteilen?

Ben B. schrieb:
> Was ich bei Messungen in störanfälligen Umgebungen auch immer
> gerne
> mache ist, die ADC-Messung nicht nur einmal auszuführen, sondern
> beispielsweise 16 Messungen zusammenaddieren und die unteren 4 Bits
> wegschmeißen. Man könnte es auch noch komplexer machen, z.B. 20
> Messergebnisse speichern, das höchste und niedrigste Ergebnis
> wegschmeißen und den Durchschnitt aus den verbliebenen errechnen.

Ja super Tipp, darauf bin ich überhaupt noch nicht gekommen, aber das 
gefällt mir wirklich gut um stabilere "Messwerte" zu bekommen.


Vielen Dank für all eure Tipps, ich werde mich in der kommenden Woche 
mal dran machen und hier berichten.

Gruß, Stefan

Edit: Fix

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> Naja, die Empfehlung kam hier aus dem Forum bei einer Ähnlichen
> Frage zu einer 48 V Batterie, es sind ja immerhin fast 60 V
> (Hier genau 57,6 V). Klar kann ich die Aufteilung 1:11 auch mit
> kleineren Widerständen
Die Frage ist halt das Umfeld, hat man da viele Störungen durch einen 
leistungsstarken Wandler oder sogar eine Zündanlage, dann lege ich das 
gerne etwas "robuster" aus, heißt mit mehr Querstrom.

Was ich gerne als Basis nehme, 10k Ohm als unteren 
Spannungsteiler-Widerstand und die interne 2,56V Referenz des AVR. Gegen 
die Betriebsspannung messen ist immer die Frage wie genau die ist oder 
wie stabil, das führt nur zu Problemen wenn man hier "wird schon 
reichen" annimmt.

Heißt, es sind 256µA Messstrom bei Vollausschlag, sollte reichen. 60V 
maximale Messspannung (weiß nicht ob Dir das reicht, ist ziemlich nahe 
an der Ladeendspannung, aber die Genauigkeit des ADC wird nicht besser 
wenn man hier zuviel will, daher bleibe ich mal bei 60V... genaue 
Messwertausgabe machst Du ja auch nicht) beutet 256µA bei 60V, macht gut 
234kOhm Gesamtwiderstand, minus die 10k unten bleiben gut 224k für den 
oberen Teilerwiderstand. Der nächstgrößere aus der E-48 Reihe wären 
226k, das ist relativ dicht dran, heißt der 10k sollte nicht stark nach 
oben vom Sollwert abweichen (sonst wäre der nächste 237k oder man nimmt 
was aus E-96 oder baut sich ~230k aus 226k und 4,7k in Reihe). 236k 
Gesamtwiderstand wären 60,4V maximale Messspannung, passt. 
Verlustleistung bei 60,4V wären 15,5mW, das ist fernab von jedem 
Problem.

Als Kondensator reicht ein 100nF Folienkondensator, Keramik geht evtl. 
auch, nehme ich an der Stelle aber ungerne, weil Erschütterungen durch 
den Piezo-Effekt gerne mal die Spannung um einige 10mV verschieben 
können.

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.