MPP-Tracker

 Oktober 2012


-----

Ausgangssituation
Solar-Wechselrichter
Solar-Batterielader
MPP-Tracking
Aller Anfang ist schwer
Verbesserungspotential
Meine Lösung
Betrieb an anderen Modulen
Mehr Strom!
Und sonst
Download
Links


-----
 

Ausgangssituation

Solarstrom ist was feines. Für kleinere Solaranlagen z.B. zum Batterieladen lohnt die Anschaffung eines fetten Umrichters nicht. Der Betrieb bei konstanter Modulspannung ist aber nicht so optimal - da geht viel Energie verloren.  

  Eigentlich muss man einen sogenannten MPP-Tracker benutzen. Das ist eine Schaltung, welche den Max-Power-Point (MPP) des Solarmoduls findet und das Modul dann in diesem Arbeitspunkt betreibt. Der MPP verschiebt sich blöderweise mit der Modultemperatur und der Einstrahlung. Daher muss er dauernd nachgeregelt werden.  

  Zu diesem Zweck existieren diverse Algorithmen. Die meisten haben den Nachteil, dass sie nicht zuverlässig funktionieren und insbesondere bei wechselnder Einstrahlung den Arbeitspunkt weit weg vom eigentlichen MPP verschieben.  

   

Solar-Wechselrichter

Um so einen Tracker zu verstehen beschreibe ich kurz den prinzipiellen Aufbau eines Wechselrichters  

[Bild(30.6k)]

 

  Die Eingangsspannung (Panel-Spannung, Up) wird von einen Hochsetzsteller (Step-Up Wandler, DC-DC Wandler) auf Zwischenkreisspannung Uzk hochgesetzt. Die dargestellten Schalter sind in Wirklichkeit natürlich Halbleiter (MosFet oder IGBT).
Durch den Step-Up-Wandler entsteht ein Spannungsripple auf Up. Daher ist ein Kondensator am Eingang erforderlich, um diesen Ripple möglichst klein zu halten.
Der Step-Up Wandler regelt seinen Stromfluss in den Zwischenkreis-Elko so, dass ein vom MPP-Tracker vorgegebener Sollwert der Panelspannung Umpp eingehalten wird (Up=Umpp). Außerdem achtet er darauf, dass sein Maximalstrom nicht überschritten und Uzw nicht über die Maximalspannung der Elkos (z.B. 500V) geschoben wird.  

  Der eigentliche Umrichter ist eine H-Vollbrücke, die von einem Modulator angesteuert wird. Sie wandelt die Zwischenkreisspannung nun in einen Wechselstrom um. Dabei wird der Stromfluss so geregelt, dass die Zwischenkreisspannung auf z.B. 360V heruntergezogen wird. Ein Filter am Ausgang sorgt für ein sauberes Sinus-Signal.
Der Modulator folgt beim Einspeise-Betrieb dem Sinusverlauf des Netzes (und versucht dessen Frequenz zu erhöhen) oder beim Insel-Betrieb dem Sinusverlauf eines intern generierten 50Hz Signals.  

  Sobald also der Step-Up Wandler den Zwischenkreis auf über 360V angehoben hat, wird der Modulator die Energie ins Netz schieben.  

Solar-Batterielader

So ein Laderegler ist etwas simpler aufgebaut: er besteht im wesentlichen aus einem Tiefsetzsteller (Step-Down Wandler).  

[Bild(11.3k)]

Bei diesem Schema gehe ich davon aus, dass die Solarmodulspannung deutlich höher als die Akkuspannung ist.  

  Auch der Tiefsetzsteller muss seinen Strom so einstellen, dass sicht die Panelspannung auf die gewünschte MPP-Spannung einstellt. Dabei darf jedoch die maximale Ladespannung und der maximale Ladestrom des Akkus nicht überschritten werden.  

   

MPP-Tracking

Dem MPP-Tracker stehen als Messwerte die Panel Spannung Up und der in den Hochsetzsteller fließende Strom Ip zur Verfügung. An seinem Ausgang liefert er Umpp. Intern errechnet er aus Up und Ip die momentane Panelleistung Pp.
Die Aufgabe des MPP-Trackers ist, Umpp so einzustellen, dass Pp maximal wird. Das Problem dabei ist, dass der Tracker nicht weiß, ob ein Pp Wert sich geändert hat, weil er Umpp verändert hat, oder weil sich Einstrahlung oder Modultemperatur geändert haben. Mit klassischer Regelungstechnik kann man dieses Probem daher nicht lösen.  

  Hier mal die simulierten Kennlinien eines Solarmoduls mit etwa 160W Maximalleistung, 10A Kurzschlussstrom und 22.5V Leerlaufspannung bei 10%, 30% und 100% Einstrahlung:  

[Bild(33.2k)] [Bild(35.8k)] [Bild(40.6k)]


Die grüne Linie ist die Strom-Spannungskennlinie des Moduls. Die blaue Linie zeigt die Leistung in Abhängigkeit der Modulspannung. Das Maximum der blauen Linie ist der Max-Power-Point (MPP), welcher durch die rote Linie markiert ist.
Ich habe die Kennlinien mit einen Simulationsprogramm erzeugt. Er ist in Javascript programmiert (mit Hilfe von Highcharts) und läuft direkt im Browser. Klicke auf den Simulator und spiele an den Schiebereglern rum. Man kann dabei erkennen, dass sich der MPP hauptsächlich durch die Temperaturänderung verschiebt und nur geringfügig durch die Einstrahlung, sofern die Einstrahlung mindestens 40% beträgt.  

  Wie man gut sieht, hat die Leistungskennlinie bei steigender Einstrahlung ein ausgeprägteres Maximum. Bei geringer Einstrahlung ist dagegen das Maximum kaum erkennbar.  

  Ein simpler MPP-Tracker macht folgendes: Er erhöht oder senkt periodisch die Modulspannung (Umpp), beobachtet dabei die Leistung Pp und kehrt die Suchrichtung um, sobald Pp sinkt. Das klingt zwar logisch, funktioniert aber nur mäßig.
Ein Problem dabei ist die Strommessung, die aus schaltungstechnischen Gründen meist am Eingang des Hochsetzstellers angeordnet ist um seinen Maximalstrom regelungstechnisch zu begrenzen. Damit erfolgt die Messung also hinter dem Eingangselko.
Das führt zu folgendem Effekt:
Senkt man Umpp, so wird erstmal Strom aus dem Elko gezogen, bis Up=Umpp. Der Mpp-Tracker bekommt daher einen erhöhten Ip Wert geliefert und glaubt, Pp währe jetzt höher.  

  Umgekehrt muss bei Erhöhung von Umpp der Eingangselko vom Panel erstmal aufgeladen werden und Pp erscheint virtuell niedriger.
Man muss also nach einer Umpp Änderung warten, bis sich Umpp=Up eingestellt hat, bevor man Pp bewerten darf.  

  Das zweite Problem ist die Einstrahlungsänderung: Nimmt die Einstrahlung langsam zu (Himmel klart auf), so wird der Tracker permanent weiter in die grade gewählte Suchrichtung laufen und sich dabei unter Umständen weit vom eigentlichen MPP entfernen. Der umgekehrte Fall der sinkenden Einstrahlung führt dagegen nur dazu, dass der Tracker auf dem momentanen Wert stehen bleibt und bei jedem Schritt die Suchrichtung ändert.  

  Es ist klar, dass der MPP-Tracker den MPP verlassen muss um ihn zu finden. Aber wenn der MPP verlassen wird, geht Leistung verloren, die sich nie mehr wiederholen läßt. Je länger der MPP velassen wurde und je weiter der Arbeitspunkt vom eigentlichen Mpp entfernt ist, desto größer ist der Verlust.  

  Der gerade beschriebene simple Tracker verwendet dabei einen pessimistischen Ansatz: er vermutet, dass er den MPP nicht gefunden hat und sucht ihn permanent an einer anderen Stelle. Dabei schwingt er fröhlich zwischen der oberen und unteren gefundenen Grenze hin und her und ist fast nie am wirklichen MPP.  

  Ich habe nun einen MPP-Tracker mit einem optimistischen Ansatz implementiert. Dieser Tracker geht erstmal davon aus, dass er den MPP exakt gefunden hat. Er sucht den MPP nur, wenn eine bestimmte Zeit vergangen ist oder sich Pp signifikant geändert hat. Dadurch verbleibt er prinzipiell länger auf dem eigentlichen MPP.  

  Mein Tracker sucht immer in beide Richtungen, bevor er das Ergebnis bewertet. Dabei ist die Suchweite begrenzt. Um abzuschätzen, ob sich die Einstrahlung gerade ändert, wird am Ende der MPP-Suche nochmals die Spannung von vor der Suche eingestellt und die gemessenen Leistungen von vor und nach der Suche miteinander verglichen. Sind sie annähernd gleich, dann hat sich die Einstrahlung nicht geändert.  

  Der Algorithmus ist relativ einfach, aber sehr wirkungsvoll. Ich habe ihn hier mal sehr detailliert in einzelnen Schritten dargestellt:  

----------------------------------------------------------------------
1) Merke Umpp (Umpp1=Umpp) und Pp (PpVorher=Pp)
2) erhöhe Umpp in kleinen Schritten, bis Pp unter PpVorher sinkt oder die maximale Schrittzahl erreicht ist. 
    Nach jedem Schritt warte bis Up=Umpp
3) Merke die Spannung (UmppOben=Umpp)
4) Springe zurück auf Umpp1
5) vermindere Umpp in kleinen Schritten, bis Pp unter PpVorher sinkt oder die maximale Schrittzahl erreicht ist. 
    Nach jedem Schritt warte bis Up=Umpp
6) Merke die Spannung (UmppUnten=Umpp)
7) Springe zurück auf Umpp1 und messe Pp (PpNachher=Pp)
8) Werte das Ergebnis aus
9) stelle neuen Umpp ein, setzte Dauer bis zur nächsten Suche und Schrittgröße der nächsten Suche.
----------------------------------------------------------------------

Damit ergeben sich zum Beispiel folgende Szenarien:  

[Bild(6.7k)] [Bild(7.2k)] [Bild(6.0k)]

Links: Maximale Schrittzahl auf beiden Seiten erreicht
Mitte: Maximale Schrittzahl auf Unterseite erreicht
Rechts: Maximale Schrittzahl auf keiner Seite erreicht  

  Die neue MPP-Spannung ist der Mittelwert aus der oberen und der unteren gefundenen Grenze Umpp=(UmppOben+UmppUnten)/2. Der zeitliche Abstand T und die Schrittgröße für die nächste Mpp-Suche wird wie folgt bestimmt:  

----------------------------------------------------------------------
1) PpVorher und PpNachher unterscheiden sich stark. 
    Also Einstrahlungsänderung. Wir suchen gleich nochmal. T=5s.
2) Die maximale Schrittzahl wurde auf beiden Seiten erreicht. 
    Also Einstrahlungserhöhung oder sehr breiter MPP. Wir suchen gleich nochmal. T=10s. Schrittgröße=groß.
3) Die maximale Schrittzahl wurde auf einer Seite erreicht. 
    MPP-Verschiebung oder Einstrahlungserhöhung. Wir suchen sofort nochmal T=1s. Schrittgröße=mittel.
4) Die maximale Schrittzahl wurde auf keiner Seite erreicht und es wurden nur 1-2 Schritte gegangen. 
    Fallende Einstrahlung. Wir suchen gleich nochmal. T=10s.
5) Die maximale Schrittzahl wurde auf keiner Seite erreicht und es wurden mehr ans 2 Schritte gegangen. 
    Also MPP gefunden. Wir suchen erst später nochmal. T=30s. Schrittgröße=klein.
5) Ändert sich Pp um mehr als z.B. 10% so wird sofort eine MPP-Suche gestartet.
6) Solange der DC/DC Wandler den Strom nicht loswerden kann, wird keine Suche gemacht.
    Erkennen kann das der Tracker daran, dass Up höher als der Sollwert Umpp ist.
----------------------------------------------------------------------

Der Clou dieses Trackers ist, dass er nach der Suche nach oben auf die Mitte zurückspringt, dann direkt nach unten sucht und die Ergebnisse in Relation zueinander setzt.
Die Änderung von Umpp auf den Mittelwert der gefundenen Grenzen bewirkt, dass Umpp genau in die Mitte zwischen den gefundenen Grenzen gesetzt wird. Gerade bei geringer Einstrahlung ist der MPP aufgrund der beschränkten Meßauflösung relativ breit. Statt nun dauernd zwischen oberer und unterer Grenze hin und her zu pendeln, setzt der Tracker Umpp in die Mitte und bleibt dort für einige Zeit.  

  Dadurch, dass immer in beide Richtungen gesucht wird, verläuft sich der Tracker bei sich ändernder Einstrahlung nicht oder nur ganz wenig. Bei steigender Einstrahlung wird in jeder Richtung die maximale Schrittzahl erreicht und der Mittelwert ergibt eine unveränderte MPP-Spannung. Bei fallender Einstrahlung wird die Suche in beide Richtungen sofort abgebrochen und Umpp bleibt ebenfalls unverändert.
Wenn sich die Einstrahlung nur während der Suche in eine Richtung verändert, dann verschiebt der Tracker Umpp. Aber durch die Mittelwertbildung halt nur halb so weit wie ein simpler MPP-Tracker.  

  Wenn mein Tracker festgestellt hat, dass der MPP verschoben werden muss, so bewirkt die Mittelwertbildung aus UmppOben und UmppUnten, dass der MPP nur halb so weit verschoben wird wie die Suche ergeben hat. Dafür wird die Suche aber auch gleich nochmal gemacht. Das ist halt der optimistische Ansatz: der Tracker geht davon aus, dass er den MPP gefunden hat und will ihn nur ungern verschieben.  

Aller Anfang ist schwer

Beim Start des Trackers muss er ja mit irgendeinem Umpp Wert beginnen. Dabei mache ich mir zu Nutze, dass es eine Relation zwischen der Leerlaufspannung und dem MPP gibt. Bei den meisten Zellen liegt die MPP-Spannung so ganz grob bei 80% der Leerlaufspannung.  

  Nach dem Einschalten und auch, wenn der Tracker längere Zeit keinen MPP gefunden hat, wird der Step-Up-Wandler abgeschaltet indem Umpp auf seinen Maximalwert gesetzt wird. Sobald sich die Eingangsspannung Up am Elko nicht mehr erhöht ist die Leerlaufspannung erreicht. Nun wird Umpp = 4/5*Up gesetzt und dann mit dem Tracking begonnen.  

   

Verbesserungspotential

Die Einstrahlung kann sich recht schnell um große Beträge ändern. Wenn bei Südwind eine Wolke über die Solaranlage getrieben wird, sind in weniger als 1s schon mal Änderungen von 20-30% drin. Und solange sich die Einstrahlung ändert kann der Tracker nicht arbeiten.
Der Tracker könnte sich aber einen gefundenen MPP Wert zusammen mit der Momentanleistung eine Zeit lang merken (z.B. eine Stunde). Wird nun ein Sprung in der Leistung festgestellt, könnte er in seinem Gedächtnis nach einer ähnlichen Leistung suchen und den damals gefundenen MPP Wert benutzen (ggf. interpolieren). Das Problem ist, dass dabei die Modultemperatur nicht berücksichtigt wird. Die hat jedoch erheblichen Einfluss auf den MPP.
Es wäre also wünschenswert, dem MPP-Tracker zusätzlich zu Up und Ip auch die Modultemperatur und optimalerweise auch die momentane Einstrahlung über einen Einstrahlungssensor bereit zu stellen. So ausgerüstet könnte der Tracker mit der Zeit die gesamte Modulkennlinie lernen und bei Änderungen von Pp sofort den erwarteten MPP einstellen um erst danach das Feintuning durch Tracking anzugehen. Die Messwerte dürfen aber nicht auf ewig gespeichert werden, da sich die Kennlinie des Panels durch Alterung und Verschmutzung mit der Zeit ändert.  

  Hat man die Möglichkeit, Ip vor dem Eingangselko zu messen, so könnte man relativ schnell (z.B. 2s) die gesamte Kennlinie vom Kurzschluss bis zum Leerlauf durchlaufen, vorausgesetzt die Abtastrate der Messung ist hoch genug. Gerade bei geringer Einstrahlung ist die Schätzung Umpp = 80% ULeerlauf nicht besonders gut. Der eigentliche MPP liegt meist deutlich darunter.
Wartet man in der Dämmerung auf ausreichend Leistung bis sich eine Einspeisung lohnt, so verliert man ja nichts, wenn man die Kennlinie andauernd komplett durchläuft. Reicht die Leistung irgendwann, beginnt man dann wenigstens direkt mit dem richtigen MPP.  

Meine Lösung

Ich habe eine simple Schaltung entwickelt, die ein kleines Solarmodul im MPP betreibt um damit z.B. einen Akku zu laden. Daher ist ein Tiefsetzsteller statt eines Hochsetzstellers verbaut, da die MPP-Spannung des Moduls höher ist als die Akkuspannung.  

  Die Schaltung basiert im wesentlichen auf dem Prozessor ATtiny44. Um die Funktion möglichst einfach testen zu können habe ich den vom Prozessor geregelten Tiefsetzsteller und eine simple 5V Versorgung als Drahtverhau aufgebaut. In der Software habe ich den oben beschriebenen MPP-Tracker implementiert. Der arbeitet recht zuverlässig, ist aber relativ langsam. In kommerziellen Wechselrichtern wird da erheblich mehr Aufwand getrieben um noch ein paar Prozent mehr rauszuholen. Auch wird da der Algorithmus speziell auf die Geräte abgestimmt.
Zum Batterieladen interessiert das letzte Prozent aber nicht - und daher kann dieser Prozessor recht universell eingesetzt werden.  

   

  Der Versuchsaufbau:  

[Bild(51.3k)]

 

  Der Tiefsetzsteller-Prototyp mit grenzwertiger Drossel:  

[Bild(42.2k)]

 

  Platinenrückseite mit Spannungsregler und Spannungsteilern:  

[Bild(119.5k)]

 

  Die gesamte Schaltung ist recht simpel:  

[Bild(74.3k)]

 

  Hier ein paar Meßkurven:
Modulspannungsverlauf beim Einschalten. Die MPP-Suche ist gut zu erkennen.  

[Bild(75.1k)]

 

  Die Sonne schaut hinter einer Wolke hervor und der Regler passt den MPP an.
Die türkise Kurve zeigt die Spannung über dem Lastwiderstand (also den abgegebenen Strom)  

[Bild(28.3k)] [Bild(79.4k)]

 

  Mit Verbesserung der Software habe ich auch die Hardware überarbeitet. Der Tiefsetzsteller ist nun mit auf der Platine gebracht, der Shunt ebenso. Der besteht aus zwei simplen parallelgeschalteten 1-Ohm Widerständen.
Zum testen des 2W Moduls bei wenig Licht habe ich den Spannungsregler nicht mehr an das Solarmodul sondern an eine 9V Batterie geklemmt.
Die Platine sieht nun so aus:  

[Bild(51.7k)] [Bild(59.9k)]


 

  Mit Anschlußkabeln und 100Ohm Lastwiderstand:  

[Bild(52.0k)]

 

  Mit sinkender Leistung kommt der Regler auch gut klar (oben Modulspannung, unten Leistung):  

[Bild(62.8k)]

 

  Bei beginnender Dämmerung funktioniert die Regelung zwar noch, eiert aber total rum.  

[Bild(63.0k)]


Kein Wunder: der Modulstrom war mit rund 3mA echt nicht mehr der Rede wert - das waren ca. 0,05W Leistung.  

[Bild(7.5k)]

 

 
-----
 

  Der Schaltplan: (auch im Archiv unten auf der Seite):  

[Bild(114.0k)]

Die Bauteile sind nicht nach Zweckmäßigkeit ausgewählt, sondern nach dem was in meiner Bastelkiste vorrätig war und halbwegs geeignet schien. Das gilt insbesondere für die Teile im Tiefsetzsteller. Der Spannungsregler ist Klasse, es tut aber auch der 3-beinige Typ.  

   

Betrieb an anderen Modulen

Um den Prozessor als MPP-Tracker zu benutzen muss man ihm mit Spannungsteilern Modulspannung und -strom zuführen.  

[Bild(17.4k)]


Der Spannungsteiler muss so ausgelegt sein, dass der Prozessor an Pin 12 bei der maximalen Leerlaufspannung des Moduls 1,1V bekommt. In meinem Beispielaufbau hat das Modul 24V Leerlaufspannung.
Der Strom wird über einem Shunt-Widerstand gemessen. Der muss so ausgelegt sein, dass beim maximalen Kurzschlussstrom des Moduls 55mV über ihm abfallen. (Bei mir: 110mA Kurzschlusstrom) .  

  Eine externe Schaltung muss die Modulspannung auf einen bestimmten Wert runterziehen indem sie Strom zur Last fließen läßt. Die Modulsollspannung wird durch den 15KHz PWM-Ausgang (mit 9 Bit Genauigkeit) an Pin7 des Prozessors ausgegeben. 100% Pulsbreite entsprechen der Leerlaufspannung, 0% entsprechen 0V. Ich habe dort einen R-C Tiefpass und einen Spannungsteiler angebracht, so dass dort eine Spannung von 0..1,1V ausgegeben wird. Das korrespondiert damit exakt zur Modulspannung.  

  Mittels des im Prozessor eingebauten Komparators habe ich einen sehr primitiven Schaltwandler aufgebaut. Der schaltet den FET ein, wenn die Modulspannung zu hoch ist. Sonst aus. Der Zustand wird alle 16µs bewertet.
Das ergibt sowas ähnliches wie einen Hysteretic-Schaltwandler. Nur ohne Hysterese, dafür mit Mindestpulslängen. Die sind mit 16µs verflixt lang, aber für erste Versuche an dem 2Watt-Modul ist das ziemlich egal.
 

   

Mehr Strom!

Für den Betrieb an leistungsfähigeren Modulen sollte man den Wandler aber mit einem externen Komparator und kleiner Hysterese aufbauen. Die Schaltfrequenz sollte erheblich höher ausgelegt werden und eine FET-Treiberstufe könnte auch angebracht sein. Oder man bedient sich eines Schaltregler-Chips wie dem LM2576 oder dem TL494 oder noch besser einem Current-Mode Controller (UC3843) und läßt ihn nicht wie üblich die Ausgangsspannung sondern die Eingangsspannung auf den von Pin7 vorgegebenen Wert regeln.
 

   

Und sonst

Die abgebildete Schaltung braucht ca. 7mA für Spannungsregler, Prozessor und FET-Ansteuerung.
Der Rest geht in die angeschlossene Last.  

  Zu Debugzwecken wird die gemessene Modulleistung, der gemessene Strom und der eingestellte PWM-Wert etwa alle 400ms seriell mit 9600Baud (ohne Parity) im Klartext auf Pin3 ausgegeben. Dabei entspricht P=16352 der Maximalleistung (1,1V an Pin12 und 55mV an Pin13), I=16368 den 55mV und S=511 einem PWM von 100% (also maximalem Sollwert).  

  Was fehlt ist eine Spannungsbegrenzung für die Ladeschlußspannung des Akkus. Die muss überflüssigen Strom wegbraten um den Akku nicht zu überladen. Je nach Schaltungstyp muss auch eine Diode vor den Akku damit der Akku keinen Strom in die Schaltung treiben kann.  

   

Download


-----
Software und Schaltplan meines Versuchsaufbaus: 133mpptracker.zip
-----
 

Links

Hier einige hilfreiche Links:  

  Zur Auslegung des Spannungsteilers benutze ich mein Tool: [Spannungsteilertool]
Und für den Shunt, der meist aus mehreren parallelen Widerständen aufgebaut wird, nutze ich zur Widerstandsauswahl mein Online-Tool: [R gesucht]
Eine tolle Seite zur Auslegung von Schaltnetzteilen: [Schaltnetzteile] Hier gibt's ein Tool zur Auswahl einer geeigneten Speicherdrossel: [Drossel]
Ein Schaltwandlersimulator zum rumspielen: [Fun]  

Kommentieren
   
Startseite

Diese Seiten sind darauf optimiert mit möglichst jedem Browser zu funktionieren.

Aber der Seitenquelltext (strg-U) sieht auch interessant aus, zumindest wenn man ihn mit einem Monospace Font in sehr kleiner Schriftgröße betrachtet.

Valid HTML 4.01! CSS ist valide!