Forum: Mikrocontroller und Digitale Elektronik Wir basteln einen arduino MPP lader.


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Pepe (Gast)


Angehängte Dateien:

Lesenswert?

Die pwm wird mit CT2 generiert, 100khz, 140 steps, Pin3, OC2B.
Die Vin und Vout werden über Pin A0 und A1 gelesen.
Pwm ist invertiert, 140 = null leistung, 10 = maximale leistung.

Die logik ist:
Wenn zuviel spannung am ausgang leistung zurück.
Wenn zuwenig spannung am eingang leistung zurück.
Sonst leistung etwas hochfahren.

Einen MPPT daraus zu machen ist nur software.
1
#define PWM_CT2_B   3 //OC2B
2
#define Vout  A0 
3
#define Vin   A1 
4
5
6
#define maxpwm 164
7
8
void ct2_init()
9
{
10
  pinMode(PWM_CT2_B,OUTPUT);
11
12
  TCCR2A = (1 << COM2B1) | (1 << WGM21) | (1 << WGM20);  //fast PWM
13
  TCCR2B = (1 << CS20) | (1 << WGM22);       // prescaler 0
14
  OCR2A = maxpwm;    // 100khz               // TOP overflow value (Hz)
15
  OCR2B = maxpwm-1;                          // pwm value  
16
}
17
18
void setup() 
19
{
20
  pinMode(LED_BUILTIN, OUTPUT);
21
  pinMode(Vout, INPUT);
22
  Serial.begin(115200);
23
24
  ct2_init();
25
}
26
27
int pwm = maxpwm-1;
28
int V_out, V_in;
29
int V_set_out = 160; // 140 = 4V
30
int V_set_in  = 240; // 160 = 10V
31
32
// out 12V -> 3V -> 1:4
33
// in  18V -> 3V -> 1:6
34
35
void loop() 
36
{ 
37
  int diff_out;
38
  int diff_in;
39
  
40
  V_in  = analogRead(Vin);
41
  V_out = analogRead(Vout);
42
43
  diff_out = V_out - V_set_out;
44
  diff_in  = V_in  - V_set_in;
45
46
  // check overvoltage at output   
47
  if (diff_out > 0) 
48
    pwm += diff_out/4;
49
  // check undervoltage at input   
50
  else if (diff_in < 0) 
51
    pwm -= diff_in/4;
52
  else
53
    pwm += diff_out/8 - diff_in/8;
54
  
55
  pwm = constrain(pwm,5,maxpwm-5);
56
  
57
  Serial.print(pwm);
58
  Serial.print(", ");
59
  Serial.print(V_in);
60
  Serial.print(", ");
61
  Serial.print(V_out);
62
  Serial.println();
63
64
  OCR2B = pwm;
65
  
66
  delay(100);
67
}

von Pepe (Gast)


Angehängte Dateien:

Lesenswert?

Falsches FET symbol. Das hier ist richtig.

von Andre G. (andgst01)


Lesenswert?

Und was ist das Problem oder die Frage?

Die Dimensionierung der Induktivität (XY µH)?

von Jochen Stromberg (Gast)


Lesenswert?

Wo ist der mpp Tracking Algorithmen?
Muss da nicht auch der Strom mit rein zwecks Leistungsberechnung?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Eigentlich interessiert nur das Produkt der Ausgangsstrom und die 
Ausgangsspannung. Diese Leistung soll maximal sein/bleiben. Wenn die 
Last ein Widerstand ist, dann reicht es, die Ausgangsspannungzu 
maximieren.

von Pepe (Gast)


Lesenswert?

Jochen Stromberg schrieb:
> Wo ist der mpp Tracking Algorithmen?

Noch nicht implementiert. Das ist MPP. Trackt nicht.

> Muss da nicht auch der Strom mit rein zwecks Leistungsberechnung?

Der strom ist die differenz aus vin und vout mal pwm verhältniss.

Als erstes plane ich aber die messung der leerlaufspannung und dann 
einstellen des MPP auf 80% der leerlaufspannung. Simpel, einfach, 
bewährt.

von MaWin (Gast)


Lesenswert?

Pepe schrieb:
> Die logik ist:
> Wenn zuviel spannung am ausgang leistung zurück.
> Wenn zuwenig spannung am eingang leistung zurück.
> Sonst leistung etwas hochfahren.

Ähm, das ist kein MPPT.

Richtig ist, das man den Ausgang begrenzen muss, für einen Bleiakku oder 
so, und dann abschaltet oder zumindest reduziert.

Die Eingangsspannung muss man nicht begrenzen, aber man sollte den Strom 
messen, tunlichst den Ausgangsstrom und ihn maximieren, da ein Akku eine 
hinreichend konstante Spannung hat.

Die Kopplung des high side MOSFET per Kondensator finde ich nett 
einfach, die Eingangsspannung sollte sich dank Elkopufferung nur langsam 
ändern. Aber sind 5uF nicht etwas gross bei einer Anpassung nur über 
100k ? Die Zeitkonstante liegt immerhin bei 0.5s.

von Pepe (Gast)


Lesenswert?

MaWin schrieb:
> Ähm, das ist kein MPPT.

Da steht MPP im titel.

> die Eingangsspannung sollte sich dank Elkopufferung nur langsam
> ändern.

Ja, da ist ein fetter elko drin. Nur nicht eingezeichnet.

> Aber sind 5uF nicht etwas gross bei einer Anpassung nur über
> 100k ? Die Zeitkonstante liegt immerhin bei 0.5s.

Richtig. Das ist eine "das teil war grad da" dimensionierung.

von s.c.n.r. (Gast)


Lesenswert?

Pepe schrieb:
> Das ist eine "das teil war grad da" dimensionierung.

5uF hört sich nach Überproduktion aus Sonderanfertigung an - ist mir 
noch nie begegnet ...

von Pepe (Gast)


Lesenswert?

s.c.n.r. schrieb:
> ist mir
> noch nie begegnet ...

Ist ein 4.7uF. Jetzt mit 4.7K drüber, der MaWin hat recht, 100k war 
zuviel.

Initilawert für die MPP zielspannung ist 80% der leerlaufspannung. Also 
pwm abstellen, Vin messen, mal 0.8 und als V_set_in speichern.
1
void getactmpp()
2
{
3
  int V_meas;
4
  OCR2B = maxpwm - 1;     // zero load
5
  delay(250);
6
  V_meas  = analogRead(Vin);
7
  V_set_in= 0.8 * V_meas; // MPP = 80% of open voltage
8
  OCR2B = pwm;
9
  delay(50);
10
}

Dies macht man am anfang und kann das in intervallen wiederholen, oder 
wenn grössere schwankungen im pwm wert festgestellt werden.
1
  if (millis() > nextmeasTime) 
2
  {
3
    getactmpp();
4
    nextmeasTime = measInterval + millis();
5
  }

Damit hat man einen leerlaufspannungsgesteuerten MPPT.

Der versuch den strom anhand in-out V differenz und pwm verhältniss zu 
berechen ist bisher fehlgeschlagen.

von Kevin M. (arduinolover)


Lesenswert?

Pepe schrieb:
> Der versuch den strom anhand in-out V differenz und pwm verhältniss zu
> berechen ist bisher fehlgeschlagen.

Wer hätte das gedacht....

von Pepe (Gast)


Angehängte Dateien:

Lesenswert?

Hab das heute RL ausprobiert an einem mini-panel.
Funktioniert.

Der regelkreis neigt an diesem 3W 15V panel zum schwingen. Denke das 
panel ist zu klein. Weil der NDP6020 FET nur 20V abkann kann ich die 34V 
300W panels nicht dranhängen. Neue 50V IRF4905 FET sind bestellt.

von MaWin (Gast)


Lesenswert?

Pepe schrieb:
> Initilawert für die MPP zielspannung ist 80% der leerlaufspannung.

Hallo, das ist immer noch kein MPP.

Miss den Ladestrom, und maximiere den. Geht mit einem shunt in der 
Masseleitung auch einfacher als die Solarspannung zu messen.

von Pepe (Gast)


Lesenswert?

MaWin schrieb:
> Hallo, das ist immer noch kein MPP.

80% der leerlaufspannung ist ziemlich genau die temperaturkompensierte 
MPP spannung.

MaWin schrieb:
> Miss den Ladestrom, und maximiere den. Geht mit einem shunt in der
> Masseleitung auch einfacher als die Solarspannung zu messen.

Ohne zusatz opamp?

von DANIEL D. (Gast)


Lesenswert?

https://www.zabex.de/site/mpptracker.html

Vielleicht findest du dort hilfreiche Informationen.

von Andreas M. (amesser)


Lesenswert?

Dein Arduino ist für eine vernünftige Regelung der Ausgangsspannung viel 
zu langsam. Da hilft auch der Spielzeugkondensator am Ausgang nicht. 
(Deswegen schwingt deine Regelung)

Das funktioniert mit einem Arduino nur, wenn da ein träger 
Energiespeicher mit ausreichend Kapazität wie z.B. Akku dran hängt. Wenn 
man direkt einen Bleiakku nimmt, dann brauchst keine Regelung des 
PWM-Duties. Du kannst den Duty-Cycle direkt aus der gemessenen 
Ausgangsspannung und der gewünschten Eingangs/modulspannung berechnen. 
Schau dir mal die Formel für den Duty-Cycle eines Buck im 
kontinuierlichen Betrieb an. (Nimm die Ausgangsspannung als konstant an) 
Den Rest besorgt die Physik. Wenn sich die Spannung nicht entsprechend 
einstellt, dann liegt das daran dass die Leerlaufspannung des Moduls 
unter der Zielspannung ist oder die Spule eine zu kleine Induktivität 
hat und damit der Regler im lückenden Betrieb arbeitet. Oder daran das 
der ATMega es nicht schafft den Mosfet schnell genug ein und 
auszuschalten. Hast du mal geschaut, ob die Schaltflanken sauber sind? 
Die paar mA die der ATMega schafft könnten etwas knapp sein. Aber das 
wirst Du dann beim IRF schon merken, wenn der Dir um die Ohren fliegt.

von MaWin (Gast)


Lesenswert?

Pepe schrieb:
> Ohne zusatz opamp?

Ja, der Arduino kann 1.1V Referenzspannung haben, legt man den shunt auf 
durchschnittlich 0.25V aus kommt er direkt an einen Analogeingang und es 
ergibt sich ausreichend Auflösung.

von Kevin M. (arduinolover)


Lesenswert?

Andreas M. schrieb:
> Dein Arduino ist für eine vernünftige Regelung der Ausgangsspannung viel
> zu langsam.

Viel wichtiger, sein Code ist viel zu scheiße. Es ist immer eine gute 
Idee, wenn der "Regler" (ich möchte das eigentlich gar nicht so nennen) 
einfach mal so durch einen 500ms Delay gestört wird. Auch wenn es nur 
einmal die Minute ist. Da muss man sich nicht wundern, wenn er Mist 
macht.

Lern anständigen Code zu schreiben!!!

von Dieter (Gast)


Lesenswert?

Das Problem ist, dass das Licht schwankt, d.h. dies unterliegt einem 
starken "Rauschen". Das stört solche Regelungen. Ein echter MPP-Regler 
schwingt auch. Allerdings können diese Schwankungen auch verwendet um 
beim Einspeisen zu erkennen, ob das Netz weg ist um dann abzuschalten.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

MaWin schrieb:
> Ja, der Arduino kann 1.1V Referenzspannung haben

Noch besser wäre einer der "neueren" AVRs, mit 20× Gain oder 32× Gain 
kann der Shunt schön klein werden.

Aber da gibt's bestimmt kein passendes Arduino-Core mit analogRead 
dafür...

von Uwe S. (bullshit-bingo)


Lesenswert?

Kevin M. schrieb:
> Viel wichtiger

Dieter schrieb:
> Das Problem ist

Das Problem ist ganz allgemein, daß der TO noch nie ein Bauteil in der 
Hand hatte, aber kürzlich wohl einen Programmier-Crashkurs abgeschlossen 
hat. Und nun glaubt er, dank Arduino und ein paar Codes keine 
Analogelektronik zu brauchen.
Es ist das Übliche hier (und anderswo), nur war es selten derart 
ausgeprägt.
Das Ergebnis ist immer dasselbe, es wird nichts, nichts und wieder 
nichts gebaut. Alles reine Theorie, und wir verschießen auch noch 
sinnlos jede Menge Pulver dazu.
Das ganze Vorhaben wird eigentlich schon zur Farce, seit man die 
Schottky sieht. Gerade in nem Abwärtsregler heizt die wunderbar, man 
kann eigentlich gleich auf MPP verzichten. Aber wie will man ihm zu 
einer realen Mosfet-Halbbrücke verhelfen, er zeichnet ja schon in dem 
einfachen Plan jede Menge schwere Fehler?
Da ist schnelle Hilfe einfach albern, der Mann steht ganz am Anfang, hat 
für einen sinnvollen Regler dieser Art mehrere Jahre hartem Lernens vor 
sich.

von MaWin (Gast)


Lesenswert?

Uwe S. schrieb:
> Das Problem ist ganz allgemein, daß der TO noch nie ein Bauteil in der
> Hand hatte,

Das andere Problem, dass wir noch immer auf das reale MPPT Regler 
Exemplar vom alles viel besser wissenden Uwe warten.

von Uwe S. (bullshit-bingo)


Angehängte Dateien:

Lesenswert?

MaWin schrieb:
> Das andere Problem, dass wir noch immer auf das reale MPPT Regler
> Exemplar vom alles viel besser wissenden Uwe warten.

Im Anhang. Step-Up, echtes MPPT, 150W. Von so ziemlich jeder 
Eingangsspannung auf 24-48V Akku. Selbstverständlich ohne Schottky. 
Superschnell und exakt, da rein analog, was sonst...

Und ich halte dich für realitätsnah genug, jetzt nicht nach Layout und 
Schaltplan zu fragen.

von Pepe (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab ein upgrade gemacht. Anstatt 328p einen china clone der 32mhz 
kann und 12bit AD kann. Damit ist PWM jetzt 125khz bei 256 steps 
auflösung, original war 100khz mit 160 steps.

Bild oben verhalten wenn solar einbricht. Soll solar ist 1200, soll out 
ist 800. Wie erwartet nimmt er V-out zurück bis V-in wider stimmt. Das 
sägezahnverhalten könnte messfehler bei aktivem pwmpuls sein, oder zu 
geringe pwm auflösung.

Der arduino ist für regler keinesfalls zu langsam, nur die pwm 
peripherie ist für diese anwendung etwas lahm.

von Pepe (Gast)


Lesenswert?

Pepe schrieb:
> Das
> sägezahnverhalten

War der regel-algo. Korrigiert. Da schwingt nix mehr.

Jetzt muss ich irgendwie den strom messen und "hill climb" versuchen.

von Pepe (Gast)


Lesenswert?

Uwe S. schrieb:
> echtes MPPT, 150W

Welchen strom jagst du denn durch diese induktivität?
Müssten ja fast 10A sein ...

von Uwe S. (bullshit-bingo)


Lesenswert?

Pepe schrieb:
> Müssten ja fast 10A sein

Ziemlich genau 10A sind es in meinem Fall, da die Zellen diesen Strom 
liefern. Muss von 12(17)V auf einen 48V-Akku. Bei z.B. 24 auf 48V hätte 
der Regler sogar noch mehr Leistung. Bei 15g Gewicht oder so...
Die Drossel ist eine IHLP5050. Deren Induktivität sinkt erst irgendwo 
bei 17A um 20% ab.
Der Regler ist auf sehr dünnem FR4 gebaut, so daß man ihn bei hoher Last 
einfach auf einen KK bzw. sogar den Rahmen der Zellen kleben kann. Also 
Kühlung durch die Platine hindurch.

von Andreas M. (amesser)


Lesenswert?

Pepe schrieb:
> War der regel-algo. Korrigiert. Da schwingt nix mehr.

Und die Ausgangsleistung verheizt Du in einem Widerstand?

An dem Diagramm ist was faul wenn Dein Vout-Soll wirklich 800 wäre, dann 
müsste Vin in dem ersten Bereich viel höher sein. Oder der Regler regelt 
dort gar nicht nach Vout-Soll? Kaum zu glauben, das der stabil an der 
Regelgrenze zwischen Vin und Vout Regelung hängt. Mach mal ein Diagramm 
mit Leerlauf am Anfang (Duty := 0), Aufdrehen des Reglers bis Uein-Soll, 
Abschattung und zum Schluss Lasttrennung. Danach können wir über das 
Schwingverhalten diskutieren. Übrigens sieht man in Deinem Diagramm sehr 
wohl eine Schwingung.

von Pepe (Gast)


Lesenswert?

Uwe S. schrieb:
> Ziemlich genau 10A

Hall current sensor?

von Uwe S. (bullshit-bingo)


Lesenswert?

Pepe schrieb:
> Hall current sensor?

Shunt 15mR. Es klappte dank Chopper-OP auch mit nur 1mR, aber die 
Genauigkeit war doch zu schlecht. Er muss ja nicht nur das eine Prozent 
Stromdifferenz verursacht durch die permanente Pulsweitenvariation 
sauber erkennen, sondern das auch noch bei niedriger Solarleistung, z.B. 
5W. In dem Moment hat man nur noch einstellige µV Differenz...

von Pepe (Gast)


Angehängte Dateien:

Lesenswert?


von Uwe S. (bullshit-bingo)


Lesenswert?

Pepe schrieb:
> Geeignet?

Mir wäre er zu langsam und hätte zu viel Eigenverbrauch.
Am Ende muss ein MPPT-Regler ja auch noch Sinn machen. Er bringt ja eh 
nur ein paar Watt mehr als ein Linearregler. Wenn man die durch 
ungeeignete Bauteile gleich wieder verheizt, wird alles schnell zur 
Farce.
Und der Eigenverbrauch ist 24/7 gegeben, die Sonne scheint im Winter 
aber gern mal nur 5h die Woche...

von Uwe S. (bullshit-bingo)


Lesenswert?

Wird denn nun wenigstens noch der Versuch unternommen, oder kann man es 
als ungelöste Schnapsidee Nr. 17.438 abhaken?
Falls du tatsächlich den Lötkolben schwingst, beachte, daß die Diode 
vorm Gate falsch gepolt ist. Da gehört ggf. eine Zener hin.
Und der Wandler hat wie hier gezeigt noch nicht mal die Möglichkeit der 
Nachtabschaltung. Die Zelle wird während der Dunkelheit also zur 
Heizung.

von Pepe (Gast)


Lesenswert?

Uwe S. schrieb:
> Wird denn nun wenigstens noch der Versuch unternommen

Augebaut und getestet.

> beachte, daß die Diode vorm Gate falsch gepolt ist.

Du hast die funktion dieser diode nicht begrifen.
Die sorgt dafür dass V-gate zwischen V-in und V-in minus 5V bleibt.

> Und der Wandler hat wie hier gezeigt noch nicht mal die Möglichkeit der
> Nachtabschaltung. Die Zelle wird während der Dunkelheit also zur
> Heizung.

Notfalls durch eine diode zu machen.
Aber ich denke die diode wird im betrieb mehr verluste verursachen als 
ein 17V panel eine nacht lang mit 12V zu bestromen.

von Helge (Gast)


Lesenswert?

Pepe schrieb:
> Notfalls durch eine diode zu machen.

Meine Billigregler schalten nachts einen Mosfet aus.

von Uwe S. (bullshit-bingo)


Lesenswert?

Pepe schrieb:
>> beachte, daß die Diode vorm Gate falsch gepolt ist.
>
> Du hast die funktion dieser diode nicht begrifen.

Ich sehe nur eine Diode, die das Gate des Mosfets gegen positive 
Spannungen kurzschließt. Keine Ahnung, wie der z.B. +5V oder mehr am 
Gate bekommen soll.

Pepe schrieb:
> Aber ich denke die diode wird im betrieb mehr verluste verursachen als
> ein 17V panel eine nacht lang mit 12V zu bestromen.

Käme auf den Zellentyp an. Aber selbst mit Monokristallinen macht der 
Rückstrom mehr aus als alles, was der MPP-Regler an Gewinn verzeichnen 
könnte.

Pepe schrieb:
> Augebaut und getestet.

Hättest du mal ein Bild?

von Pepe (Gast)


Lesenswert?

Uwe S. schrieb:
> Keine Ahnung, wie der z.B. +5V oder mehr am
> Gate bekommen soll.

Das ist der sinn. Der braucht -5V am gate um durchzuschalten.
https://www.farnell.com/datasheets/59594.pdf

> Aber selbst mit Monokristallinen macht der
> Rückstrom mehr aus als alles, was der MPP-Regler an Gewinn verzeichnen
> könnte.

Werden das mal ausmessen.

> Hättest du mal ein Bild?

Wenn ich dann wider in die werkstatt laufen kann.
Hab erst grad mit der lochrasterplatine angefangen, original ist 
steckbrett.

von Uwe S. (bullshit-bingo)


Lesenswert?

Pepe schrieb:
> Der braucht -5V am gate um durchzuschalten.

Na sag´ ich doch, du hast das erste Mal ein Bauteil in der Hand. Und 
auch ne Solarzelle.
Wo nimmst du nur den Mut her, einen getakteten MPP-Wandler bauen zu 
wollen? Ich bin damals sogar den ersten LED-Blinker ehrfürchtiger 
angegangen...

von Uwe D. (monkye)


Lesenswert?

Pepe schrieb:
> Uwe S. schrieb:
>> Keine Ahnung, wie der z.B. +5V oder mehr am
>> Gate bekommen soll.

In der Zeichnung ist ein P-Kanal zu sehen, da würden die -5V passen. 
Dein Link (und das genannte Bauteil) sind aber ein N-Kanal.

von Uwe S. (bullshit-bingo)


Lesenswert?

Uwe D. schrieb:
> In der Zeichnung ist ein P-Kanal zu sehen, da würden die -5V passen.

Stimmt, ich hatte gleich nach dem Bauteil-DB geschaut...

Mir ist dann aber spanisch, wie er bereits "Erfolge" gehabt haben will. 
Er schreibt oben, daß der NDP6020 wohl ungeeignet sei. Also muss er ja 
wohl diesen Mosfet auch genutzt haben. Nur passiert mit nem N-Kanaler in 
der Beschaltung rein gar nichts.

von Uwe D. (monkye)


Lesenswert?

Pepe schrieb:
> Jochen Stromberg schrieb:
>> Wo ist der mpp Tracking Algorithmen?
>
> Noch nicht implementiert. Das ist MPP. Trackt nicht.
>
>> Muss da nicht auch der Strom mit rein zwecks Leistungsberechnung?
>
> Der strom ist die differenz aus vin und vout mal pwm verhältniss.
>
> Als erstes plane ich aber die messung der leerlaufspannung und dann
> einstellen des MPP auf 80% der leerlaufspannung. Simpel, einfach,
> bewährt.

Das ist MPPT „light“ und sobald ein bissel Schatten auf das Modul kommt, 
dann ist es vorbei. Aber ja, besser als reines PWM-Laden.

Und die Diode im Ausgangskreis frisst weitere Prozente Deines 
MPP-Vorteils auf - bei Deinem 300W Modul, dass bei 34V fast 10A liefert 
und bei angenommenen 80% Wirkungsgrad (ja - bitte entspannt bleiben, es 
ist wahrscheinlich weniger) Deines MPP dann 240W bei 12V dann 20A 
liefert… Damit werden dann 20A x 0,45V = 9W verheizt.(SBX2540)
Bei der Diode sind es (hoch-optimistisch) 8K/W - also 9W x 8K/W = 72K + 
25C ==> mehr als 100C
Geht mit dem Teil nicht, denn ab 50C muss zwingend der Strom reduziert 
werden… Du musst dann schon einmal einen fetten Kühler vorsehen…

So, also brauchst Du etwas „dickes“ und schnelles an Diode - das Teil 
kostet dann mit Kühler mehr als die Masse der restlichen Bauteile…

Solange Du kleine Ströme hast, ist das für den Einstieg „beherrschbar“.

von Pepe (Gast)


Angehängte Dateien:

Lesenswert?

Uwe D. schrieb:
> Dein Link (und das genannte Bauteil) sind aber ein N-Kanal.

Stimmt. Da scheint es namenskonflikte zu geben. Ist der im bild oben.

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.