Forum: Mikrocontroller und Digitale Elektronik MPPT (Maximum Power Point Tracker) für Solarmodule


von Sören R. (iopodx)


Lesenswert?

Hiho liebe Mikrocontroller,

ich stehe vor folgendem Problem: Ich habe eine Versuchsanordnung mit 4 
verschiedenen Solarmodulen, aber nur einen Laderegler. Meine Solarmodule 
sind denkbar schlecht für diesen geeignet, haben sie doch 
Ausgangsspannungen zwischen 50 und 20 Volt, und Leistungen zwischen 60 
und 10 Watt. Geladen werden soll ein Blei-Gel Akku, über die 
Ladeschlussspannung von 13,9 Volt. (Laut Datenblatt die beste Methode).

Wichtig ist dabei für mich, dass ich die Leistung jedes einzelnen Moduls 
über beispielsweise RS232 auslesen möchte.

So, jetzt kommt der Punkt, für derart hohe Spannungen ist ein MMPT 
Laderegler am besten geeignet. Jedoch sind die Laderegler hier recht 
teuer.

Was machen wir also? Ich habe vor 4 MPPT Tracker relativ kostengünstig 
selber zu bauen. Da ich die Leistung sowieso messen muss, kann ich auch 
beim maximalen Punkt einregeln.

Doch wie mache ich das? Ein Schaltregler auf 13,9 Volt einzustellen ist 
keine große Sache, der LM2670 wäre hierfür ein geeignater Kandidat, wenn 
auch mit 3A * 13,9V = 41,7W recht klein dimensioniert.

Was ich mir vorstelle ist eine PWM (via Atmega) die erst einmal den MPPT 
sucht, und danach ein geeigneter Schaltregler, eventuell auch wieder per 
PWM realisiert.

Doch wie stelle ich das nun am besten an?

Beitrag "Maximum power tracking für 200mW solarzelle MPP" diesen sowie 
Beitrag "Beitreiben einer Solarzelle im Leistungsmaximum" diesen Thread habe ich mir 
bereits durchgelesen, doch alles konnte ich mir daraus noch nicht 
erschließen.

Konkret will mir im Moment noch nicht richtig in den Kopf, wie ich die 
PWM dann auf dem Leistungsmaximum einregle. Entsprechende iterarive 
Algorithmen kann ich mir ausdenken, doch welchen Parameter ändere ich 
dann wie?

Längere ONs = Größerer Strom, Geringere Spannung
Längere OFFs = Kleinerer Strom, Größere Spannung

???

Danke,

Liebe Grüße Sören

Edit://

Etwas Pseudocode
1
richtung=1;
2
while(1) {
3
  Leistung=U_in * I_in;
4
  if (Leistung < Letzte_Leistung) {
5
     richtung=-richtung;
6
  }
7
  if (U_in <= 13.9V + 2V){
8
     // U ist unter der Minimalspannung fuer den Buck-Regler... Fahre Konstantspannung
9
     PWM_taktverhaeltnis = 100%;
10
  }else{
11
     PWM_taktverhaeltnis += richtung;
12
  }
13
  Letzte_Leistung=Leistung;
14
  // vor der naechsten Iteration mindestens einige PWM-Zyklen warten
15
}

von ?? (Gast)


Lesenswert?

Nein. Der MPPT ist ein PWM der direkt vom Solarpanel auf den 
Verbraucher, hier die Batterie wandelt. Es genuegt dabei, der 
EingangsStrom und -spannung, sowie die Ausgangsspannung zu wandeln. Die 
Letztere dient nur der Kontrolle, ist Regelungstechnisch weniger 
wichtig.

von ?? (Gast)


Lesenswert?

Es gibt offensichtlich genau ein regelbarer Parameter : Die An-Zeit des 
PWM bei fester frequenz.

von Sören R. (iopodx)


Lesenswert?

Aber wie wandel ich denn mittels PWM den Eingangsstrom/-spannung bei 
konstanter Ausgangsspannung? Wenn ich nur die High-Länge regeln kann, 
regel ich doch maximal den Ausgang, nicht den Eingang?!

von ?? (Gast)


Lesenswert?

Der PWM macht die Impedanzanpassung im weitesten Sinne. Du beginnst mit 
einem PWM Wert, misst die Spannung und den Strom, multiplizieren und 
speichern. Dann den PWM Wert um eins erhoehen, multiplizieren und 
vergleichen. Wenn's mehr ist, in dieser Richtung weiter erhoehen, sonst 
verkleinern. Dann soweit verkleinern bis wieder weniger kommt, dann 
wieder erhoehen.

von Sören R. (iopodx)


Lesenswert?

Das ist mir soweit, denke ich, klar nur ändert sich doch auch U_aus bei 
einer Änderung des PWM-Wertes!?

von ?? (Gast)


Lesenswert?

Natuerlich nicht. Denn die Ausgangsspannung ist die Batteriespannung, 
und die ist fest. Was sich aendert ist der Strom.

von Sören R. (iopodx)


Lesenswert?

Okay, da hast du natürlich recht... ;)

Bin jetzt über diesen Schaltplan gestolpert:
http://www.timnolan.com/uploads/Arduino%20Solar/ArduinoSolar.pdf

Habe ich mir soweit zu Gemüte geführt und werde den auch ähnlich 
nachbauen (den MAX4173H werde ich ersetzen).

Einzig die Funktion von Q1 und Q2 leuchtet mir noch nicht ganz ein, kann 
mir da kurz wer auf die Sprünge helfen?

von Anon Y. (avion23)


Lesenswert?

Q1 ist IMO überflüssig.

Q2 und Q3 bilden eine Gegentaktstufe. Mit Q2 wird die 
Versorgungsspannung auf die Spule geschickt --> Step down wandler. Q3 
ist für die synchrone Gleichrichtung zuständig: Sobald die Diode leiten 
sollte wird sie durch den fet überbrückt. D.h. nicht mehr die 0,7V 
Spannungsabfall sondern nur noch R_DS_on.

War das die Antwort auf deine Frage?
Kannst du deine Ergebnisse hier einstellen, falls es funktioniert? Ich 
habe vor so etwas in klein für die Solarlämpchen im Garten zu machen :)

EDIT: Ich habe es mir nochmal angesehen. Q1 ist ein pfet. R3 bildet 
einen Pullup und sorgt dafür, dass der fet normalerweise ausgeschaltet 
ist. Da habe ich auch Verpolschutz getippt. Nur wie wird das Ding 
eingeschaltet? Über die Diode nicht, die kann die Spannung am Gate nur 
erhöhen und wir brauchen etwas negatives. Also kann das so nicht 
funktionieren?

von Sören R. (iopodx)


Lesenswert?

Danke für deine Erklärung von Q2 und Q3, so macht das natürlich Sinn 
(... ich weiß, stop making sense...)

Q1 ist doch ein nFet, oder täusche ich mich da? Der IRZI44 ist 
jedenfalls so einer, und das Schaltbild ist doch nur gespiegelt!?

Dennoch erscheint mir dessen Sinn immernoch fragwürdig...

Ich halte dich gerne auf dem Laufenden was diese Schaltung betrifft, 
werde sobald ich sie komplett verstanden habe in dreifacher Ausführung 
auf eine Platine quetschen und mit einem Mega32 ansteuern...

Liebe Grüße
Sören

von Axel R. (Gast)


Lesenswert?

Der soll dafür sorgen, das die interne Bodydiode keinen Stromfluß in 
Richtung Solarpanel ermöglicht. Da beide MOSFETs "antiseriell" 
geschaltet sind, kann in Ruhe kein Strom fliessen.

Gruß
Axelr.

von Sören R. (iopodx)


Lesenswert?

Ahh okay. Das ergibt natürlich wiederum Sinn! Ähnliche habe ich mir das 
auch gedacht. Gut, dann werde ich mal fix meine Version fertig machen 
und euch vorstellen, zum absegnen.

Danke euch allen nochmal!

von Anon Y. (avion23)


Lesenswert?

Oh Stimmmt, ist gespiegelt und der selbe nfet wie die anderen auch.

Das was Axel sagt sehe ich jetzt auch. Ich würde den fet aber nicht 
ständig über den treiber ein-ausschalten sondern statisch über einen 
portpin.

von Sören R. (iopodx)


Angehängte Dateien:

Lesenswert?

So sieht der Schaltplan jetzt aus. ISP fehlt noch... Sonst hoffentlich 
nichts (?!)

X1-1 bis X1-3 sind die V+ der Solarmodule, X1-4 ist Ground

Danke :)

Kann ich btw. die Formel Leiterplanbreite [mm] = max. Strom [A] für 
~100W, also ca.  8.5 A Dauerstrom noch verwenden (35µ Cu)

von Sören R. (iopodx)


Angehängte Dateien:

Lesenswert?

So obiger Schaltplan war wirklich 'ne Zumutung ;)

Hab mich entschieden, jeden Leistungsteil auf eine eigene Platine zu 
setzen, diese per 9 pol SUB-D dann mit dem Atmega zu verbinden.

Vielleicht kann da ja mal kurz jemand drüber schauen, und gucken ob das 
so funktionuddeln kann. Ich hoffe ich habe nichts vergessen.

von Sören R. (iopodx)


Angehängte Dateien:

Lesenswert?

Und noch fix das Board dazu... Hat jedenfalls den Design Check 
überstanden, und sieht an sich auch ganz funktionell aus. Sollte halt 
klein sein, da ich das Board ätzen lassen werde.

Liebe Grüße und besten Dank,
Sören

Edit://

Was mir gerade so einfällt: Meine Ebenenwechsel ohne Vias dürften 
relativ schwer zu löten sein, oder?

von Anselm (Gast)


Lesenswert?

Jetzt fehlt dir nurnoch die Massefläche(n).
Denke ich mal so...
mit dem Befehl Polygon 'Massename' ein Viereck um die ganze Platine 
Ober- und Unterseite. (ist doch Eagle, oder?)

Anselm

von Sören R. (iopodx)


Lesenswert?

Ja, Eagle.

Massefläche - ja klar. Bohrungen fehlen auch noch, fällt mir gerade auf! 
Was ist da gängig? M3 dürfte doch klargehen, oder?

Aber leider komm ich mit deiner Anleitung nur zu gestrichelten Linien 
schäm

Sören

Edit:// Ahh, alles klar. Ratsnet hilft.

von Anon Y. (avion23)


Lesenswert?

Ich mach's so:
Polygon
"GND" eingeben, enter drücken
Umrisse um die Platine ziehen --> gestrichelte Linie
Ratsnest drücken

In den DRU stelle ich noch isolate auf 24 oder 32. Erleichtert das Löten 
sehr.

von Sören R. (iopodx)


Lesenswert?

Ah, okay. So kommen auch vernünftige Abstände zu den Pads raus.

Wie bekomme ich eigentlich diese (Masse-)Flächen wie man sie von 
Platinen kennt um Bohrlöcher?

Und noch 'ne Frage: Ich find bei Digikey nur Doppel TO-220 Kühlkörper... 
Ich habe aber drei die relativ dicht beieinander sind. Somit wäre ein 
Triple KüKö das Beste, kennt da wer einen?

Danke!

von Sören R. (iopodx)


Lesenswert?

Okay Kühlkörper habe ich gefunden.

294-1086-ND [Digikey]... Ist zwar eigentlich für eine horizontale 
Montage und ohne Lötnasen aber sollte wohl auch so halten... 9W @ 40K 
sollten auch klargehen... Bei Maximal 60Watt Modulleistung können somit 
15% verheizt werden bei 40K Erwärmung.

Ich werde wohl noch einen Temperaturfühler an den Akku klemmen um bei zu 
stärker Erwärmung dessen die Ladung zu unterbrechen (wie viel °C bieten 
sich da an?)

Danke nochmal.

von Sören R. (iopodx)


Angehängte Dateien:

Lesenswert?

Anhang editieren geht gar nicht?

von Sören R. (iopodx)


Lesenswert?

Okay eine letzte Frage:

Kann es nicht passieren, dass bei unterschiedlichen PWM Frequenzen die 
einzelnen MPP-Tracker gegeneinander arbeiten?

mfG
Iopodx

von /devnull (Gast)


Lesenswert?

Die Fets sind doch geschaltet ? Dann kann man sie nicht absetzen mit den 
Gatesignalen ueber n'Stecker. Und was soll die Heizerei ?

Natuerlich sollten die PWM dieselbe Frequenz haben.

von Sören R. (iopodx)


Lesenswert?

[quote]Dann kann man sie nicht absetzen mit den
Gatesignalen ueber n'Stecker.[/quote]

Wie meinen?

Die Heizerei war nur rechnerisch gemeint, so viel verheizen will ich 
beim besten Willen nicht.

Das Problem sind aber unterschiedliche Module, die in unterschiedlichen 
Spannungen arbeiten. Somit sind auch die Frequenzen unterschiedlich, 
dennoch soll aber ein Akku geladen werden. Wie stell ich das nun am 
Besten an?

von Harald G. (Firma: nee) (ba0547)


Lesenswert?

hallo,

hoffe das das hier irgendwer bald liest und auch bald beantworten wird.
habe mir die sache mit dem lader angeschaut und nachgebaut. scheint 
einigermassen zu funktionieren. was mir nicht klar ist, bei welcher max 
spannung und welchem max. strom kann man die schaltung verwenden.
für die 12 volt bleibatterie scheint das ohne modifikation bis max 3 a 
zu funktionieren. habe allerdings 48 volt nominale akkuspannung bei 85 
volt solarmodulspannung mit max ca. 7 A. das das mit den fets nicht mehr 
geht ist klar. auch der texas instruments ina 169 stromsensor scheint da 
nicht mehr der richtige zu sein, die elkos auch nicht mehr. spule hab 
ich bereits gegen eine mit max 11 a ausgewechselt. vielleicht schreib 
ich mal alles zusammen was ich bisher schon getauscht habe, max 
stromsensor scheint zu gehen, allerdings bekommt man das ding in de 
nicht her. gibt es nur bei digikey in usa oder? warum nimmt man nicht 
einen operationsverstärker oder einen anderen stromsensor, z.b. allegro 
acs711? oder hallsensor acs756, acs758 oder änliches?
bin leider wiedereinsteiger in elektronik, damit alles andere als auf 
dem neuestem stand. hoffe allerdings das ich hier einige tips bekommen 
werde.

servus, harald.

von Joachim M. (Firma: ---) (joachim1253)


Lesenswert?

Hallo,
auch wenn dieser Beitrag schon etwas älter ist, habe ich im Netz keine 
bessere Schaltung gefunden, und so gehe ich davon aus, dass es anderen 
Interessenten auch so geht. Aber es gibt da ein Problem, das offenbar 
noch niemandem aufgefallen ist: Im Schaltplan des Dreifachwandlers liegt 
der "VS" - PIN des IR2104 an der Verbindung der beiden 
Schalttransistoren mit der Drossel. (Dies ist richtig).
In der Schaltung für einen einzelnen Wandler aber an der Verbindung 
zwischen dem Rückstromschutz - Transistor Q1 und dem Schalttransistor 
Q2.
 "VS" - PIN also an Source von Q2 statt an Drain, daher stimmt hier das 
Bezugspotenzial des Q2 - Gates nicht mehr.
Bevor also jemand diese Schaltung nachbaut und Transistoren schrottet 
unbedingt ändern!

Viele Grüße, Joachim

von Ralf (Gast)


Lesenswert?

Hallo!

Bin auch gerade auf der suche nach einen Code, den ich auf Atmega328p 
betreiben kann.
Hast du schon eine Lösung dazu?

Lg

von Olaf (Gast)


Lesenswert?

Der IR2104 braucht deutlich mehr als 5 Volt an VCC, um die Gates an 
deinen nMOS sicher durchzusteuern.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Bin auch gerade auf der suche nach einen Code, den ich auf Atmega328p
> betreiben kann.
> Hast du schon eine Lösung dazu?

Nö, da jeder seinen Arduino anders anschliesst und eine andere Schaltung 
verwendet, muss jeder sich den code selbst schreiben.

Das Grundprinzip, die Akkuspannung als nur langsam veränderlichen Wert 
als konstant anzunehmen, nur den Ladestrom in den Akku zu messen, und 
alle Nase lang das PWM Tastverhältnis des step down Buck 
Tiefsetzstellers zu verändern, und wenn eine verkleinerung des 
Tastverhältnisses zu einer Verklinerung des Stroms führt beim nächsten 
Mal das Tastverhältnis eben nicht zu verkleinern sondern zu vergrössern.
1
int lastanalog=0,direction=1,pwm=512;
2
void loop(void)
3
{
4
  int currentvoltage=analogRead(1);
5
  if(currentvoltage>138) // Akku voll
6
  {
7
    digitalWrite(3,0);
8
  }
9
  else if(currentvoltage<135) // Hysterese
10
  {
11
    int analogcurrent=analogRead(0);
12
    if(analogcurrent<lastanalog) direction=1-direction;
13
    lastanalog=anlogcurrent;
14
    pwm+=direction;
15
    analogWrite(3,pwm);
16
  }
17
  delay(25);
18
}
ist das simple Prinzip. Der Trick liegt darin, wie man am Anfang 
hochkommt in den Bereich, in dem die Solarzelle überhaupt Strom liefert.

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.