Inhoudsopgave:

Arduino - PV MPPT zonnelader - Ajarnpa
Arduino - PV MPPT zonnelader - Ajarnpa

Video: Arduino - PV MPPT zonnelader - Ajarnpa

Video: Arduino - PV MPPT zonnelader - Ajarnpa
Video: DIY MPPT Solar Charge Controller using Arduino | 24V Solar Panel, 12V Battery, 50 Watt 2024, November
Anonim
Image
Image
Buck-omzetter
Buck-omzetter

Er zijn veel laadregelaars op de markt. gewone goedkope laadregelaars zijn niet efficiënt om het maximale vermogen van zonnepanelen te gebruiken. Degenen die efficiënt zijn, zijn erg duur.

Dus besloot ik om mijn eigen laadregelaar te maken die efficiënt en slim genoeg is om de batterijbehoeften en zonne-omstandigheden te begrijpen. het neemt passende maatregelen om het maximale beschikbare vermogen uit zonne-energie te halen en dit zeer efficiënt in de batterij te plaatsen.

ALS JE VAN MIJN INSPANNING HOUDT, STEM DAN DIT INSTRUCTABLES.

Stap 1: Wat is MPPT en waarom hebben we het nodig?

Onze zonnepanelen zijn dom en niet slim om de batterijcondities te begrijpen. Stel dat we een 12v/100 watt zonnepaneel hebben en het zal een output geven tussen 18V-21V, afhankelijk van de fabrikant, maar batterijen hebben een nominale spanning van 12v, bij volledige lading zullen ze 13,6v zijn en 11,0v op vol vermogen afvoer. laten we nu aannemen dat onze batterijen op 13v worden opgeladen, panelen geven 18v, 5,5A bij 100% werkefficiëntie (niet mogelijk om 100% te hebben, maar laten we aannemen). gewone controllers hebben een PWM-spanningsregelaar ckt die de spanning verlaagt tot 13,6, maar geen stroomwinst. het biedt alleen bescherming tegen overladen en lekstroom naar panelen tijdens de nacht.

Dus we hebben 13.6v*5.5A = 74,8 watt.

We verliezen ongeveer 25 watt.

Om dit probleem tegen te komen, heb ik smps buck-converter gebruikt. dit soort conversies hebben een efficiëntie van meer dan 90%.

Het tweede probleem dat we hebben is de niet-lineaire output van zonnepanelen. ze moeten op een bepaald voltage worden gebruikt om het maximale beschikbare vermogen te oogsten. Hun output varieert gedurende de dag.

Om dit probleem op te lossen worden MPPT-algoritmen gebruikt. MPPT (Maximum Power Point Tracking) zoals de naam al doet vermoeden, volgt dit algoritme het maximaal beschikbare vermogen van panelen en varieert de uitgangsparameters om de toestand te ondersteunen.

Dus door MPPT te gebruiken, zullen onze panelen het maximale beschikbare vermogen genereren en de buck-converter zal deze lading efficiënt in batterijen stoppen.

Stap 2: HOE WERKT MPPT?

Ik ga dit niet in detail bespreken. dus als je het wilt begrijpen, kijk dan eens naar deze link -Wat is MPPT?

In dit project heb ik de input V-I-kenmerken en output V-I ook gevolgd. door de input V-I en output V-I te vermenigvuldigen, kunnen we het vermogen in watt hebben.

laten we zeggen dat we op elk moment van de dag 17 V, 5 A hebben, d.w.z. 17x5 = 85 watt. tegelijkertijd is onze output 13 V, 6A, d.w.z. 13x6 = 78 Watt.

Nu zal MPPT de uitgangsspanning verhogen of verlagen door deze te vergelijken met het vorige ingangs-/uitgangsvermogen.

als het vorige ingangsvermogen hoog was en de uitgangsspanning lager was dan aanwezig, dan zal de uitgangsspanning weer lager zijn om terug te keren naar het hoge vermogen en als de uitgangsspanning hoog was, wordt de huidige spanning verhoogd naar het vorige niveau. dus het blijft oscilleren rond het maximale vermogenspunt. deze oscillaties worden geminimaliseerd door efficiënte MPPT-algoritmen.

Stap 3: MPPT implementeren op Arduino

Dit is het brein van deze oplader. Hieronder staat de Arduino-code om de uitvoer te regelen en MPPT in een enkel codeblok te implementeren.

// Iout = uitgangsstroom

// Vout = uitgangsspanning

// Vin = ingangsspanning

// Pin = ingangsvermogen, Pin_previous = laatste ingangsvermogen

// Vout_last = laatste uitgangsspanning, Vout_sense = huidige uitgangsspanning

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

{

if(duty_cycle>0)

{

duty_cycle -=1;

}

analogWrite(buck_pin, duty_cycle);

}

anders als ((VoutVout_last) || (Pi

{

if(duty_cycle<240)

{ duty_cycle+=1;

}

analogWrite(buck_pin, duty_cycle);

}

Pin_vorige = Pin;

Vin_last = Vin;

Vout_last = Vout;

}

Stap 4: Buck-converter

Ik heb N-channel mosfet gebruikt om de buck-converter te maken. meestal kiezen mensen P-channel mosfet voor high side switching en als ze N-channel mosfet voor hetzelfde doel kiezen, dan is een driver-IC vereist of boot strapping ckt.

maar ik heb de buck-converter ckt aangepast om een low-side-switching te hebben met behulp van N-kanaals mosfet. i, m gebruik van N-kanaal omdat dit lage kosten, hoge vermogens en lagere vermogensdissipatie is. dit project maakt gebruik van IRFz44n mosfet op logisch niveau, dus het kan direct worden aangestuurd door een arduino PWM-pin.

voor een hogere belastingsstroom moet men een transistor gebruiken om 10V aan de poort toe te passen om de mosfet volledig in verzadiging te krijgen en de vermogensdissipatie te minimaliseren, ik heb ook hetzelfde gedaan.

zoals je kunt zien in ckt hierboven, heb ik de mosfet op -ve spanning geplaatst, dus gebruik +12v van het paneel als aarde. met deze configuratie kan ik een N-kanaals mosfet voor buck-converter gebruiken met minimale componenten.

maar het heeft ook enkele nadelen. omdat je beide kanten hebt -ve spanning gescheiden, heb je geen gemeenschappelijke referentiegrond meer. dus het meten van spanningen is erg lastig.

ik heb de Arduino aangesloten op de Solar-ingangsterminals en de -ve-lijn gebruikt als aarde voor Arduino. we kunnen de ingangsvolateg op dit punt gemakkelijk meten door een spanningsdeler ckt te gebruiken volgens onze vereisten. maar kan de uitgangsspanning niet zo gemakkelijk meten omdat we geen gemeenschappelijke aarde hebben.

Om dit te doen is er een truc. in plaats van de spanning over de uitgangscondensator te meten, heb ik de spanning tussen twee -ve lijnen gemeten. met behulp van solar -ve als aarde voor arduino en output -ve als het te meten signaal/voltage. waarde die u met deze meting heeft, moet worden afgetrokken van de gemeten ingangsspanning en u krijgt de echte uitgangsspanning over de uitgangscondensator.

Vout_sense_temp=Vout_sense_temp*0.92+float(raw_vout)*volt_factor*0.08; // meet de volatge over input gnd en output gnd.

Vout_sense=Vin_sense-Vout_sense_temp-diode_volt; // verander spanningsverschil tussen twee gronden om spanning uit te voeren..

Voor stroommetingen heb ik ACS-712 stroomdetectiemodules gebruikt. Ze zijn aangedreven door arduino en aangesloten op input gnd.

interne timers zijn aangepast om 62,5 Khz PWM te krijgen op pin D6. die wordt gebruikt om de mosfet aan te drijven. een uitgangsblokkeringsdiode is vereist om omgekeerde lekkage en bescherming tegen omgekeerde polariteit te bieden. Gebruik hiervoor een schottky-diode met de gewenste stroomsterkte. De waarde van de inductor hangt af van de frequentie en uitgangsstroomvereisten. u kunt online beschikbare rekenmachines voor buck-converter gebruiken of 100uH 5A-10A belasting gebruiken. overschrijd nooit de maximale uitgangsstroom van de spoel met 80% -90%.

Stap 5: Laatste bijwerking -

Image
Image

u kunt ook extra functies aan uw oplader toevoegen. zoals de mijne hebben ook LCD om de parameters en 2 schakelaars weer te geven om input van de gebruiker te krijgen.

Ik zal de definitieve code en het ckt-diagram zeer binnenkort bijwerken.

Stap 6: UPDATE: - Werkelijk schakelschema, stuklijst en code

Lichtenwedstrijd 2017
Lichtenwedstrijd 2017

UPDATE:-

Ik heb de code, bom en circuit geüpload. het is iets anders dan het mijne, omdat het gemakkelijker is om deze te maken.

Aanbevolen: