INHOUDSOPGAWE:

Arduino - PV MPPT Solar Charger: 6 stappe (met foto's)
Arduino - PV MPPT Solar Charger: 6 stappe (met foto's)

Video: Arduino - PV MPPT Solar Charger: 6 stappe (met foto's)

Video: Arduino - PV MPPT Solar Charger: 6 stappe (met foto's)
Video: home assistant solar monitoring - esphome solar monitoring 2024, November
Anonim
Image
Image
Bokomskakelaar
Bokomskakelaar

Daar is baie laai -beheerders in die mark beskikbaar. gewone goedkoop laadbeheerders is nie doeltreffend om maksimum krag van sonpanele te gebruik nie. Die wat doeltreffend is, is baie duur.

Daarom het ek besluit om my eie laaibestuurder te maak wat doeltreffend en slim genoeg is om die batterybehoeftes en sonkragomstandighede te verstaan. dit neem die nodige maatreëls om die maksimum beskikbare krag uit sonkrag te haal en dit baie doeltreffend in die battery te plaas.

AS U VAN MY POGING HOU AS STEM HIERDIE INSTRUKSIES.

Stap 1: Wat is MPPT en waarom het ons dit nodig?

Ons sonpanele is dom en nie slim om die batterytoestande te verstaan nie. Veronderstel ons het 'n 12v/100 watt sonpaneel en dit lewer 'n uitset tussen 18V-21V hang af van die vervaardiging, maar die batterye word gegradeer vir die nominale spanning van 12v, by volle laai toestande is dit 13.6v en sal dit 11.0v vol wees ontslag. laat ons nou aanvaar dat ons batterye 13V laai, panele gee 18V, 5.5A teen 100% werkdoeltreffendheid (dit is nie moontlik om 100% te hê nie, maar neem aan). gewone beheerders het 'n PWM spanningsreguleerder ckt wat die spanning tot 13,6 laat sak, maar geen toename in stroom nie. dit bied slegs beskerming teen oormatige laai en lekstroom na panele gedurende die nag.

Ons het dus 13.6v*5.5A = 74.8 watt.

Ons verloor ongeveer 25 watt.

Om hierdie probleem te ondervind, het ek smps buck converter gebruik. hierdie soort omskakelings het 'n doeltreffendheid van meer as 90%.

Ons tweede probleem is nie-lineêre uitset van sonpanele. hulle moet teen 'n sekere spanning bedryf word om die maksimum beskikbare krag te verkry. Hulle uitset wissel deur die dag.

Om hierdie probleem op te los, word MPPT -algoritmes gebruik. MPPT (Maximum Power Point Tracking), soos die naam aandui, volg hierdie algoritme die maksimum beskikbare krag vanaf panele en wissel die uitsetparameters om die toestand te handhaaf.

Dus, deur MPPT te gebruik, lewer ons panele maksimum beskikbare krag, en 'n boksomskakelaar sal hierdie lading doeltreffend in batterye plaas.

Stap 2: HOE WERK MPPT?

Ek sal dit nie in detail bespreek nie. so as u dit wil verstaan, kyk na hierdie skakel -wat is MPPT?

In hierdie projek het ek die invoer V-I-eienskappe en uitvoer V-I ook opgespoor. deur die invoer V-I en uitgang V-I te vermenigvuldig, kan ons die krag in watt hê.

laat ons sê ons het 17 V, 5 A, dit wil sê 17x5 = 85 watt op enige tyd van die dag. terselfdertyd is ons krag 13 V, 6A, d.w.z. 13x6 = 78 Watt.

Nou sal MPPT die uitsetspanning verhoog of verlaag deur te vergelyk met vorige inset-/uitsetkrag.

as die vorige insetkrag hoog was en die uitgangsspanning laer was as die huidige, dan sal die uitsetspanning weer laer wees om terug te keer na die hoë krag, en as die uitsetspanning hoog was, sal die huidige spanning na die vorige vlak verhoog word. dit hou dus aan om te pendel rondom die maksimum kragpunt. hierdie ossillasies word tot 'n minimum beperk deur doeltreffende MPPT -algoritmes.

Stap 3: Implementering van MPPT op Arduino

Dit is die brein van hierdie laaier. Hieronder is die Arduino -kode om die uitset en implementering van MPPT in 'n enkele kodeblok te reguleer.

// Iout = uitsetstroom

// Vout = uitgangsspanning

// Vin = insetspanning

// Pin = insetkrag, Pin_previous = laaste insetkrag

// Vout_last = laaste uitgangsspanning, Vout_sense = huidige uitgangsspanning

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

{

as (duty_cycle> 0)

{

duty_cycle -= 1;

}

analogWrite (buck_pin, duty_cycle);

}

anders as ((VoutVout_last) || (PI

{

as (duty_cycle <240)

{duty_cycle+= 1;

}

analogWrite (buck_pin, duty_cycle);

}

Pin_previous = Speld;

Vin_last = Vin;

Vout_last = Vout;

}

Stap 4: Buck -omskakelaar

Ek het 'n N-channel mosfet gebruik om die boksomskakelaar te maak. Gewoonlik kies mense P-kanaal mosfet vir hoë kantskakeling, en as hulle N-kanaal mosfet kies vir dieselfde doel as wat 'n bestuurder IC benodig, of 'n opstartband.

maar ek het die buck converter ckt aangepas om 'n lae syskakeling te hê met behulp van N-kanaal mosfet. Ek gebruik N-kanaal omdat dit lae koste, hoë kragwaardes en laer kragverlies is. hierdie projek gebruik IRFz44n logika -vlak mosfet, sodat dit direk deur 'n arduino PWM -pen bestuur kan word.

Vir 'n hoër lasstroom moet 'n transistor 10V by die hek gebruik word om die mosfet heeltemal versadig te kry en die kragverlies te verminder, ek het ook dieselfde gedoen.

soos u kan sien in ckt hierbo, het ek die mosfet op -ve spanning geplaas en dus +12v van die paneel as grond gebruik. Met hierdie opset kan ek 'n N-kanaal mosfet for buck-omskakelaar met minimum komponente gebruik.

maar dit het ook 'n paar nadele. aangesien u beide kante -ve spanning van mekaar geskei het, het u nie meer 'n gemeenskaplike verwysingsgrond nie. dus is die meting van spannings baie moeilik.

Ek het die Arduino by sonkrag -ingangsklemme verbind en sy -ve -lyn as grond vir arduino gebruik. ons kan die insetvolateg op hierdie punt maklik meet deur 'n spanningsverdeler ckt te gebruik volgens ons vereiste. maar ons kan die uitgangsspanning nie so maklik meet nie, aangesien ons nie 'n gemeenskaplike basis het nie.

Om dit te doen, is daar 'n truuk. in plaas daarvan om die spanning tussen die uitgangskondensator te meet, het ek die spanning tussen twee -veelyne gemeet. met son -ve as grond vir arduino en uitset -ve as die sein/spanning wat gemeet moet word. Die waarde wat u met hierdie meting gekry het, moet van die ingevoerde spanning afgetrek word, en u kry die werklike uitsetspanning oor die uitgangskondensator.

Vout_sense_temp = Vout_sense_temp*0,92+float (raw_vout)*volt_factor*0,08; // meet volatge oor invoer gnd en output gnd.

Vout_sense = Vin_sense-Vout_sense_temp-diode_volt; // verander die spanningsverskil tussen twee gronde na die uitgangsspanning.

Vir huidige metings het ek ACS-712 stroomwaarnemingsmodules gebruik. Hulle word aangedryf deur arduino en is gekoppel aan input gnd.

interne timers word aangepas om 62,5 Khz PWM te kry by pen D6. wat gebruik word om die mosfet te bestuur. 'n Uitgangsblokkende diode sal nodig wees om omgekeerde lekkasie en beskerming teen omgekeerde polariteit te bied, gebruik 'n skottky -diode met die gewenste stroomgradering vir hierdie doel. Die waarde van die induktor hang af van die frekwensie- en uitsetstroomvereistes. u kan aanlyn beskikbare geldrekenaarrekenaars gebruik of 100uH 5A-10A laai. moet nooit die maksimum uitsetstroom van die induktor met 80%-90%oorskry nie.

Stap 5: Final Touch Up -

Image
Image

u kan ook ekstra funksies by u laaier voeg. Soos myne, het die LCD ook die parameters en 2 skakelaars om die gebruiker se insette te ontvang.

Ek sal binnekort die finale kode opdateer en die ckt -diagram voltooi.

Stap 6: UPDATE:- Werklike stroomdiagram, stempel en kode

Lights Contest 2017
Lights Contest 2017

OPDATEER:-

Ek het die kode, bom en kring opgelaai. dit is effens anders as myne, want dit is makliker om hierdie een te maak.

Aanbeveel: