Ich versuche nochmal mein Glück...
Mein letztes Projekt ist ja etwas ins Stocken geraten, wird aber später noch weiter geführt.
Ich habe seit letztem Sommer auf dem Balkon eine Solarzelle installiert, und möchte dieser natürlich etwas Energie entlocken
Darum nun das Projekt eines MPPT Solarladereglers, um nichts der Wertvollen Energie zu verschenken
Der Regler soll Komplett selber gebaut werden. Also Klar die Chips und Transistoren stelle ich nicht selber her aber ich möchte keine Fertigen Spannungswander Module aus China o.Ä. Verwenden.
Der Arduino oder das D/A-Wandler PCB zählen für mich aber nicht. Also zunächst mal das Problem und die Gegebenheiten:
Der (M)aximum (P)ower (P)oint ist bei einer Solarzelle quasi konstant am wandern. Abhängig ist dieser von mehreren Faktoren: Temperatur, Einstrahlungsintensität und Laune der Solarzelle
Da ich nur eine Solarzelle (ca.50x 60cm / 50W / Monokristalin)habe vernachlässige ich die Möglichkeit der Teilbeschattung vorerst, da dabei mehrere Peaks in der Leistungskurve entstehen können und das zu tracken und den MPP zu finden bin ich zu doof zu. Zumindest vorerst.
Als Zwischenspeicher Akku wird vorerst ein 4s4p LiFePo4 Akku mit ca 150Wh geplant. Spannung ziemlich genau 12V. von diesem Werden dann alle weiteren Lasten gespeist.
Die Solarzelle ist eine Phaseun 50W Modul. https://www.reichelt.de/Module/PHAE-SP- ... stct=pol_8
Mit den Daten ist das vorgehen recht klar. Ein Linearregler macht wenig Sinn.
Ich habe mich hier für einen Stepdown schaltwandler entschieden. Ich könnte auch einen SEPIC Wandler oder sonstige tolle Schaltungsarten nutzen aber da ich allgemein aber noch keinen Schaltwander von Null auf Aufgebaut und geregelt habe habe möchte ich erstmal „einfach“ anfangen.
Also als dann die Marschrichtung klar war konnte ich also sogleich angangen diese wieder über den haufen zu werfen
Ich habe keine passenden Controller ICs für einen schaltwandler gehabt. einen LM2596 wollte ich nicht zweckentfremden und ein Arduino PWM ausgang geht auch mit Timer Anpassungen nicht über ca. 65kHz hinaus. Also fange ich nochmal eine stufe weiter unten an. Ich habe mir als eine Stromsenke gebaut und zuerst versucht diese so aufzubauen um die Solarzelle auf einer konstanten Spannung zu halten. Das war für leider schon leichter gesagt als getan. E-Technik im Studium war irgendwie verdammt lange her und jede blöde OpAmp Schaltung musste ich mir über Google wieder ins Gedächtnis rufen. Nach der erneuerung so mancher grauer Gehinzelle war diese schaltung dann aber auch vollbracht
Schaltbild: Aufgebaut habe ich hier eine Spannungssenke. Der OpAmp ist als nichtinvertierender Verstärker aufgebaut. Feedback gibt es über die Eingangsspannung die erstmal ungefiltert auf den opAmp geleitet wird. Nicht schön aber es funktioniert und ist simpel gehalten. Da die Eingangsspannung sowieso reguliert wird und ein OpAmp eine verstärkung der eingangsspannung auf den ausgang von ca. -80dB hat habe ich mir hierrum erstmal keine gedanken gemacht. Das ergebnis bestätigt mich. Die schaltung schwingt schnell ein und ist dann stabil.
Die Eingangsspannung kann über den Poti eingestellt werden. Die Z-Diode vor dem Gate verhindert, das die Schaltung bei Unterspannung zuschaltet. Da der Lm358 eine Ausgangsspannung von maximal Vcc - 1,5V hat kann dieser bis ca. 10V den Mosfet nicht durchschalten. Diese Spannung genügt um die RefSpannung sauber herzustellen, und dem OpAmp eine ausreichende Versorgungsspannung zu geben. Der Widerstand am Gate stellt zudem sicher, das dieser bei einem Spannungsverlust immer ausgeschaltet bleibt, damit sich eine Eingangsspannung aufbauen kann und der Mosfet beim einschalten einen definierten ausgescahlteten Zustand hat.
Die Limitierenden Faktoren sind hier ganz klar die Maximale Spannung die der OpAmp verträgt, ca 32V.
Die Maximale Gatespannung liegt im bereich +-20V diese wird aber nie erreicht, da der Mosfet nie ganz durchschalten wird. Sie bewegt sich im betrieb eher im bereich von 4-6V. Daher habe ich hier keine z-Doide vorgesehen für diesen Prototypen. Im fertigen laderegler werden diese feinheiten wieder mit eingebaut.
Ein erster test zeigte mir das die schaltung soweit ganz gut funktioniert. Der Kühlkörper war auch für 50W dauerleistung ausreichend dimensioniert und hat nicht überhizt. Auch ohne Lüfter. Daher habe ich bei dieser Schaltung der einfachheit halber auf eine Temperaturüberwachung verzichtet.
Also kann nun die erste Erweiterung kommen.
Die eingangsspannung als Regelgröße mit dem µC ändern.
Das ist eingentlich eine recht einfache Sache. Ich habe mir auf eBay mal ein DAC Board gekauft. Und nun ist der optimale Zeitpunkt dieses mal zu testen.
Also anstatt der RefSpannung den Ausgang vom Dac per Widerstand auf den invertierenden Eingang des OpAmps und tadaaa
Regelung per µC möglich.
Je nach richtung pendelt sich die Eingangsspannung in unter 2ms ein. Für einen nicht optmieterten Prototypen finde ich das ganz ansehnlich Rot ReferenzSpannung
Blau Eingangspannung
Also jetzt noch den µC seine Regelparameter zur verfügung stellen und ich kann mich schon an das Programmieren machen.
Für den anfang halte ich es alles wieder etwas einfacher.
Strom wird per OpAmp über einem 0,1Ohm Widerstand um den Fakt 10 Verstärkt gemessen. 1V = 1A.
Spannugn einfach per spannungsteiler 5V am µC = 25V Eingangsspannung. Somit sollte mir hier auch keine Überspannung dem µC zerstören da die Leerlaufspannung maximal 22V beträgt.
Genauigkeit ist erstmal nicht das Problem. Ich habe bisher ja noch nicht getestet ob ich dem µC das überhaupt beibringen kann den MPP zu finden. Rauschen ist ebenfalls unkritisch, da ich hier einfach über mehrere Messungen mitteln kann. Noch bin ich bei meiner Machbarkeitsstudie, da spielt Geschwindigkeit keine Rolle. Eher im Gegenteil. Meißt verlangsamt man den Ganzenvorgang ja eh wieder um fehler auszuschließen und Die Programmschritte zu kontrollieren.
Und nun zur Herausforderung das ganze zu Programmieren.
Ansätze gibt es 2 Stück, die meistens verwendet werden.
Perturb & Observe (P&O) Algorhitmus
Der P&O geht stets davon aus, das es immer einen Punkt größerer Leistung gibt und verschiebt stetig den Arbeitspunkt. Wenn die Leistung vor dem Verschieben größer war als anschließend wird die Richtung geändert. ansonsten wird in die gleiche Richtung wieder gegangen. Dieser Algorithmus ist sehr stabil und störungsunanfällig. Hat aber den Nachteil, das er immer um den MPP oszilliert und diesen nicht hält. man verschenkt also immer etwas an Potential. Das zweite Problem dieses Algorithmus ist, das die Sonne ihn austricksen kann. Da hier nur mit der Leistung gerechnet wird wird bei steigender intensität der Algorithmus immer seine Richtung bebehält wird er in solchen Fällen vom MPP wegdriften. Auch wenn er am ende, wenn die Intensität gleich bleibt wieder zum MPP findet hat man hier wieder Energie verschenkt. Diesen Algorithmus habe ich versucht und er führte mich nicht zum MPP. Vermutlich auch wegen dem noch beschriebenen Programmierfehlers. Er wird aber auch nicht weiter verfolgt, da ich eine bessere Lösung fand
Der zweite Ansatz den ich gefunden habe ist der Ansatz des Differentiellen Leitwertes.
Dafür gibt es ein schönes Ablaufbild in der Application Note von Microchip.
Das habe ich natürlich zuerst versucht umzusetzen, da es nur wenige If-Abfagen sind.
Das Ergebnis war leider sehr ernüchternd. Gefunden wurde irgendein Punkt. Der MPP War es aber definitiv nicht. Damit habe ich auch diese Idee verworfen, und mich nicht wieter damit beschäftigt warum der MPP nicht gefunden wurde und woran es lag.
Ich bin dann weiter gegangen und habe den Differentiellen und den reellen Leitwert normal bestimmt und damit weiter gerechnet.
Im Leistungsmaximum ist der Differentielle Leitwert gleich den negativen Realen Leitwert. Links vom Maximum ist der Differentielle kleiner, rechts ist er größer als der Reale Leitwert. Mit dieser Methode lässt sich das Leistungsmaximum bestimmen und es kann beispielsweise eine LED geschaltet werden,wenn der Algorithmus eingerastet ist.
Code: Alles auswählen
DeltaR = (Amps-altAmps) / (Volt-altVolt) + (Amps/Volt);
DeltaR<0: Oberhalb vom MPP
DeltaR>0: Unterhalb vom MPP
Zuerst hat dieser Algorithmus auch nicht funktioniert hier war aber definitiv der Herr vor dem Bildschirm schuld.
Die Messwerte der Spannung und des Stroms habe ich mir als Int werte abgespeichert (in mV).
Das Ergebnis der Berechnung habe ich in Float abspeichern wollen, da es sicherlich auch kam kleiner 1 sein wird. Da die einzelnen Komponenten der Rechnung aber als Int vorhanden waren Wurde die Division auch mit Int berechnet und dann erst in float umgewandelt. Dabei gehen natürlich alle Nachkommastellen verloren. Dies hat den Algorithmus immer nach Oben abdriften lassen.
Nachdem ich den Fehler beseitigt habe und Spannung und Strom beim abspeichern schon in Float umgewandelt habe hat der Algorithmus super Funktioniert.
natürlich kommen einem dabei gleich Überlegungen ob man die Sprungweite nicht von der Abweichung der Leitwerte Extrapolieren kann. Dies geht meines Erachtens nicht, da die Abweichung links und rechts vom Maxima nicht symmetrisch ist. außerdem wird der Algorithmus in der meisten Zeit sehr nah am MPP sein und keine Großen Sprünge benötigen. beim Zuschalten kann dafür eine klein wenig längere Einschwingzeit verkraftet werden.
Hier hat der µC nach 3 Tagen Try and Error zuverlässig den MPP gefunden und gehalten.
Falls es von Interesse ist kann ich auch meine Irrwege noch beschreiben ansonsten würde ich einfach bei dem richtige Weg bleiben.[/color]
Zur Verdeutlichung mal ein paar Diagramme. am einfachsten ist es mit der Leistungskurve im oberen Linken Diagram zu verstehen.
Im MPP Ist die stegung der Leistung = 0 links davon positiv rechts davon negativ.
Die Matematik dazu kann in folgender Applikation Note von Microchip nachgelesen werden. ich habe mir nicht die mühe gemacht das Rad neu zu erfinden und einfach die erkenntnisse daraus angewendet.
http://ww1.microchip.com/downloads/en/A ... 01521A.pdf und hier mein Aufbau mit µC Getestet habe ich den Algorhytmus mit meinem Labor NT mit Strombegrenzung. 18V 1A einstellen , 1Ohm widerstand in reihe und starten. wenn das Netzteil genau die eingestellten werte liefern muss ist der MPP erreicht.
wenn jetzt die Spannung hochgedreht wird muss der MPP entsprechend mitwandern und das Netzteil aus der Strombegrenzung herauskommen. das hat sehr gut funktioniert
Was mir bisher aufgefallen ist, bezüglich des Algorithmus.
Je höher die Leistung und je steiler das abfallen der P/U Kennlinie desto leichter lässt sich das Maximum bestimmen, da sich der Differentielle Leitwert um das Maximum stark ändert. Je geringer die Leistung desto geringer die Steigerungen und desto leichter lässt sich der Algorithmus durch Rauschen aus dem Takt bringen.
Bei meinem ersten Test an der richtigen Solarzelle bei bedecktem Wetter sind im Kurzschluss Fall gerade einmal 50mA (20mA benötigt der Arduino alleine schon) geflossen. Umso länger hat das findesn Des Maxima gedauert aber, trotzdem noch nichts Optimiert ist, hat die Schaltung das Maxima zuverlässig gefunden. Zumindest kamen nachvollziehbare Werte der Spannung heraus.
Mit dem Schaltwandler mache ich im nächsten Beitrag weiter.
Nun meine Frage mal ist es von interesse auch meine holzwege aufzuschreiben? oder interessieren nur die Erfolge?
Gruß Millivolt