Arduino - Încărcător solar PV MPPT: 6 pași (cu imagini)
Arduino - Încărcător solar PV MPPT: 6 pași (cu imagini)
Anonim
Image
Image
Convertor Buck
Convertor Buck

Există multe controlere de încărcare disponibile pe piață. regulatoarele obișnuite de încărcare ieftine nu sunt eficiente pentru a utiliza puterea maximă de la panourile solare. Cele care sunt eficiente sunt foarte costisitoare.

Așa că am decis să-mi fac propriul controler de încărcare, care să fie eficient și suficient de inteligent pentru a înțelege nevoile bateriei și condițiile solare. ia măsuri adecvate pentru a extrage puterea maximă disponibilă din energie solară și a o introduce în baterie foarte eficient.

DACĂ ÎȚI PLACE EFORTUL MEU DECÂT VĂ RUGĂM VOTA ACEST INSTRUCTABIL.

Pasul 1: Ce este MPPT și de ce avem nevoie de el?

Panourile noastre solare sunt stupide și nu sunt inteligente pentru a înțelege condițiile bateriei. Să presupunem că avem un panou solar de 12v / 100 wați și va oferi o ieșire între 18V-21V depinde de producători, dar bateriile sunt evaluate pentru tensiunea nominală de 12v, în condiții de încărcare completă vor fi 13,6v și vor fi de 11,0v la maxim descărcare. acum presupunem că bateriile noastre se încarcă la 13v, panourile oferă 18v, 5,5A cu o eficiență de lucru de 100% (nu este posibil să avem 100%, dar să presupunem). controlerele obișnuite au un regulator de tensiune PWM ckt care scade tensiunea la 13,6, dar nu are câștig de curent. oferă protecție numai împotriva supraîncărcării și curentului de scurgere la panouri în timpul nopților.

Deci avem 13,6v * 5,5A = 74,8 wați.

Pierdem aproximativ 25 de wați.

Pentru a întâmpina această problemă, am folosit convertorul SMPS Buck. acest tip de conversii au o eficiență de peste 90%.

A doua problemă pe care o avem este ieșirea neliniară a panourilor solare. trebuie să fie acționate la o anumită tensiune pentru a recolta puterea maximă disponibilă. Producția lor variază pe parcursul zilei.

Pentru a rezolva această problemă se utilizează algoritmi MPPT. MPPT (Maximum Power Point Tracking), după cum sugerează și numele, acest algoritm urmărește puterea maximă disponibilă de la panouri și variază parametrii de ieșire pentru a susține starea.

Prin urmare, prin utilizarea MPPT, panourile noastre vor genera puterea maximă disponibilă, iar convertorul Buck va pune această încărcare eficient în baterii.

Pasul 2: CUM FUNCȚIONEAZĂ MPPT?

Nu voi discuta în detaliu despre asta. deci, dacă doriți să înțelegeți, aruncați o privire la acest link-Ce este MPPT?

În acest proiect am urmărit și caracteristicile de intrare V-I și ieșirea V-I. înmulțind intrarea V-I și ieșirea V-I putem avea puterea în wați.

să spunem că avem 17 V, 5 A, adică 17x5 = 85 wați în orice moment al zilei. în același timp, ieșirea noastră este de 13 V, 6A, adică 13x6 = 78 wați.

Acum MPPT va crește sau micșora tensiunea de ieșire până la compararea cu puterea de intrare / ieșire anterioară.

dacă puterea de intrare anterioară a fost ridicată și tensiunea de ieșire a fost mai mică decât cea prezentă, atunci tensiunea de ieșire va fi din nou mai mică pentru a reveni la puterea mare și dacă tensiunea de ieșire a fost ridicată, atunci tensiunea actuală va crește la nivelul anterior. astfel continuă să oscileze în jurul punctului de putere maxim. aceste oscilații sunt minimizate de algoritmi MPPT eficienți.

Pasul 3: Implementarea MPPT pe Arduino

Acesta este creierul acestui încărcător. Mai jos este codul Arduino pentru a regla ieșirea și implementarea MPPT într-un singur bloc de cod.

// Iout = curent de ieșire

// Vout = tensiunea de ieșire

// Vin = tensiunea de intrare

// Pin = putere de intrare, Pin_previous = ultima putere de intrare

// Vout_last = ultima tensiune de ieșire, Vout_sense = tensiunea de ieșire actuală

void regulate (float Iout, float Vin, float Vout) {if ((Vout> Vout_max) || (Iout> Iout_max) || ((Pin> Pin_previous && Vout_sense <Vout_last) || (PinVout_last)))

{

if (duty_cycle> 0)

{

duty_cycle - = 1;

}

analogWrite (buck_pin, duty_cycle);

}

altfel if ((VoutVout_last) || (Pi

{

if (duty_cycle <240)

{duty_cycle + = 1;

}

analogWrite (buck_pin, duty_cycle);

}

Pin_previous = Pin;

Vin_last = Vin;

Vout_last = Vout;

}

Pasul 4: Convertor Buck

Am folosit MOSFET pe canalul N pentru a face convertorul Buck. de obicei, oamenii aleg MOSFET cu canal P pentru comutare laterală înaltă și dacă aleg MOSFET cu canal N în același scop decât va fi necesar un driver IC sau ckt boot-ul de legare.

dar am modificat ckt convertor Buck pentru a avea o comutare laterală joasă folosind MOSFET N-canal. Folosesc canalul N, deoarece acestea sunt costuri reduse, puteri ridicate și o disipare mai mică a puterii. acest proiect folosește un mosfet IRFz44n la nivel logic, deci poate fi condus direct de un pin arduino PWM.

pentru curent de sarcină mai mare, ar trebui să folosiți un tranzistor pentru a aplica 10V la poartă pentru a obține MOSFET în saturație completă și pentru a minimiza disiparea puterii, am făcut și eu același lucru.

după cum puteți vedea în ckt de mai sus, am plasat MOSFET pe tensiunea -ve, folosind astfel + 12V din panou ca la sol. această configurație îmi permite să folosesc un MOSFET cu canal N pentru convertorul Buck cu componente minime.

dar are și unele dezavantaje. deoarece aveți ambele părți cu tensiune separată, nu mai aveți o masă de referință comună. deci măsurarea tensiunilor este foarte dificilă.

Am conectat Arduino la terminalele de intrare Solar și folosind linia -ve ca masă pentru arduino. putem măsura cu ușurință volategul de intrare în acest moment utilizând un divizor de tensiune ckt conform cerințelor noastre. dar nu putem măsura tensiunea de ieșire atât de ușor, deoarece nu avem o bază comună.

Acum, pentru a face acest lucru, există un truc. în loc să măsoară tensiunea condensatorului de ieșire accros, am măsurat tensiunea între liniile cu două veți. folosind solar -ve ca sol pentru arduino și ieșire -ve ca semnal / tensiune care trebuie măsurată. valoarea obținută cu această măsurare ar trebui să fie scăzută din tensiunea de intrare măsurată și veți obține tensiunea reală de ieșire pe condensatorul de ieșire.

Vout_sense_temp = Vout_sense_temp * 0,92 + float (raw_vout) * volt_factor * 0,08; // măsurați volajul între gnd de intrare și gnd de ieșire.

Vout_sense = Vin_sense-Vout_sense_temp-diode_volt; // modificați diferența de tensiune între două motive la tensiunea de ieșire..

Pentru măsurători de curent am folosit module de detectare a curentului ACS-712. Au fost alimentate de arduino și conectate la intrarea gnd.

temporizatoarele interne sunt modificate pentru a câștiga 62,5 Khz PWM la pinul D6. care este folosit pentru a conduce mosfetul. va fi necesară o diodă de blocare a ieșirii pentru a asigura scurgerea inversă și protecția împotriva polarității inverse, utilizați dioda schottky cu curentul nominal dorit în acest scop. Valoarea inductorului depinde de frecvență și de cerințele curentului de ieșire. puteți utiliza calculatoare de conversie buck disponibile online sau puteți utiliza sarcină 100uH 5A-10A. nu depășiți niciodată curentul maxim de ieșire al inductorului cu 80% -90%.

Pasul 5: Retușare finală -

Image
Image

puteți adăuga, de asemenea, funcții suplimentare la încărcător. ca și al meu, au și LCD-ul afișează parametrii și 2 comutatoare pentru a prelua intrarea de la utilizator.

Voi actualiza codul final și voi completa diagrama ckt foarte curând.

Pasul 6: ACTUALIZARE: - Diagrama circuitului real, BOM & Code

Concurs de lumini 2017
Concurs de lumini 2017

ACTUALIZAȚI:-

Am încărcat codul, bom-ul și circuitul. este ușor diferit de al meu, pentru că este mai ușor să-l faci.