Jump to content

Recommended Posts

 Am luat un controller MPPT  chinezesc si merge destul de bine cred ca mai iau unul si il implantez pe sursa mea, divizez citirile de tensiuni cu 10 curentul ramine asa, ca se incadreaza si alimentez cu un 12v electronica sper sa ma descurc, ala scoate tot un PWM.

Share this post


Link to post
Share on other sites

La partea de mppt pana acum sunt cam asa:

 

#include <PWM.h>
//#include "font.h" lcd fonts
int32_t frequency = 31000; //frequency (in Hz)
float temp;
float sum;
float volti_temp;
float volti;
float sum1;
float tempamp;
float panel1Watts;
float lastpanel1Watts;
int pulseWidth = 0;

void perturb(boolean init=false){
  //static byte pulseWidth = 0;
  static boolean trackDirection = false; //counts down / pwm increases
  // static int loopCounter = 0;
  if (init) {
    pulseWidth = 255;
    trackDirection = false;
  }
  else {
    if (!trackDirection) {
    if (pulseWidth != 0) {pulseWidth --;} else {trackDirection = true;}
  }
  else {
    if (pulseWidth != 255) {pulseWidth++;} else {trackDirection = false;}
    }
  }
  pwmWrite(3, pulseWidth); //write perturbed PWM value to PWM hardware
  if ((panel1Watts - lastpanel1Watts) < -0.1) trackDirection = !trackDirection;
 
  Serial.println("Modulatie:");
  Serial.println(pulseWidth /2.5);
 // Serial.print(pulseWidth);
}

 

 

void setup(){
  Serial.begin(9600);
   InitTimersSafe();
   bool success = SetPinFrequencySafe(3, frequency);
   if(success){
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);
    pwmWrite(3,127);
   }
}

void loop(){
  for(int i=0; i<50; i++)
  {
   temp = analogRead(A0);
   sum += temp;
   delay(2);
  }
  sum = sum/50;
  //convertire in zecimal
  //volti_temp = (5/1023) * (38/2);
  //volti = volti_temp * sum;
  sum = round((sum *100.0/1023)*10)/10.0;
  Serial.println(sum);
  //amperi
  for(int i=0; i<50; i++)
  {
    tempamp = analogRead(A2);
    sum1 += tempamp;
    delay(2);
  }
  sum1 = sum1/50;
  sum1 =round((sum1*12.5/1023)*10)/10.0;
  Serial.println(sum1);
  //actrivare mpppt
  panel1Watts = sum * sum1; //calculeaza puterea extrasa din panou
  Serial.println(panel1Watts);
   perturb();
   lastpanel1Watts = panel1Watts;
}

Edited by Mihai_Hd

Share this post


Link to post
Share on other sites

 ai MPPT-ul si afisarea, vad ca sunt biblioteci, habar n-am, cum il scoate el in asamblare, dar dupe mine ar trebui cu intreruperi, nu ar trebui rulata tota bucla aia ca e lunga, numai subrutina cu MPPT si afisarea mai rar o data pe secunda.

 Ai mai luat pe undeva sau ai facut tot de la zero"? din cate vad eu face cate o medie la fiecare rulare. nu ma pricep la progamare mai cu seama in C ce am mai facut am facut ajutat, in asamblor pe pic si atmega.

 nu stiu cu e ARM-ul, poate gasesc ceva gata ca nu ma pricep sa il scriu, sa mai ajstez pe unde am nevoie.

.

Share this post


Link to post
Share on other sites

este o librarie folosita pentru ca din fabrica arduino scoate pwm la 500hz si 1 khz. Se pot modifica timerii si obtine 31khz sau 62khz insa e mai comod sa iti setezi frecventa dupa bunul plac.

 

Codul din loop() se repeta.

Initial nu foloseam o librarie dar nu ocupa foarte mult spatiu din memorie si e mai comod sa te poti juca in limite fine cu frecventa de pwm.

Nu cred ca mai gasesti ceva original in ziua de astazi, codul este parte inspiratie proprie, parte inspiratie din munca altora, pe http://www.256.co.uk ai sa gasesti foarte multechestii interesante despre cum sa ataci un lcd si masuratori cu arduino.

Share this post


Link to post
Share on other sites

M am uitat acolo e mai multa teorie dar inpricipiu stim ce sa facem dar nu prea stim cum, am partea de forta, in proncipiu orice sursa PWM proiectata sa se potriveasca cu parametrii sistemului poate fi comandata in asa fel incat sa se asigure functia de MPPT si alte functii specifice unui charger.

 in pricipiu maximum powr point tracking asta presupune masurarea puterii furnizate de un generator si optimizarea paramtrilor pentru aobtine putrea maxima, de obicei prin intermediul unui pwm agotrimul de baza asta e se masoara tensinea si curentul produse de generator si se incrementeaza PWM dupa care cireste iar daca creste se continua incrementarea da ca nu se inverseasa si se cauta invers, cans e ajunge in maxim se urmareste acel punct prin incercari intru-sens si in celalt e bine casetarea sa fie pastrata pana se face compararea pentru a nu iesi brutal din bucla mai ales pentru sitemele lente.

 DE regula la itialializare se preaca cu factorul de umplere din zero si se incrementeaza pana ajunge in maxim, multe din cele industriale nu conserva starea si ies din bucla in caz de variatii ale iluminarii de exemplu fapt care duce la pierderi importante de putere.

 conform definitiei asta este, masori puterea si urmaresti punctul de maxim, pentru sisteme fotovoltaice mai este insa si un alt algoritm de MPPT, INC MPPT care urmareste incremetarea conductatei panourilor adica inversul rezistentei, curentul impartit la tensiune, aceasta creste pana ajunge intru-n punct de inflexiune punctul asta il cauta acesti algoritmi, este o relatie indirecta cu MPP, noi nu abordam asta acum, varianta conform definitiei.

 INC mppt merge cam asa: plecand de la o tensiune data incrementezi MPPT si masori conductanta in noul punct dupa care il decrementzi si masori iara, algorimul ajusteaza succsiv in directia in care modificarile de conductanta tind sa scada pana cand gaseste punctul de inflexiune, dar e lent si nu face mare brinza in cunditii de vreme variabila, insa are si un avantaj conductanta se modifica putin cu variatia iluminarii deci a curentului.

 

 Deci raminem la P mppt cum este asta din acest post, acesta se poate utiliza cu orice fel de generator,: solar eolian sau hidro.

 

 problema cu aceste MPPT e urmatoarea, ori le faci sufient de rapide sa poata urmari toate variatiile puterii furnizate de panou ori le faci sa conserve o stare care nu il indepateaza pre a mult de MPP daca iese din bucla, in pricipiu poate conserva setarea PWM, pentru sisstemele cu plaja extinsa de functionare cum am eu un invertor ongrid asta poate sa nu fie suficient, al meu merge de la 90 la 450v MPP range dar cand iese din bucla reintra greu, poate daca ar fi cu autivatare sa invete si sa memoreze domeniul util al ariei PV cu care merge ar fi mult mai bine, astfel s-ar reitializa in zona MPP teortic al ariei cu care functioneaza si ar conserva setarile in acel domeniu.

 La cele industriale din dorinta de a asigura un domeniu extins pentru mai multa flexibilitate sunt foarte lente si cand ies din bucla reintra foarte greu.

 

 Cat priveste MPPT-ul nostu ma gandeam la un moment dat sa pornesc de la rutinele de citit curent si tensiune de la un invertor pentru motor pe DSP, un astfel de soft si platforma pe care ruleaza, mi se pare totusi nelalocul lui sa nu folosim procesare rapida daca tot ne lovim de problema cu viteza.

 Din cate am masurat eu lumina soarelui nu e modulata cu vreo frecventa mare care ar putea interfera cu bucla de reglaj, are doar variatille date de trecerea norilor, astea sunt cele mai rapide.

 

 Acum suntem la arduino, daca gasesc pe cineva dispus sa-mi modifice pornind de la un invertor vom discuta si despre asta.

Share this post


Link to post
Share on other sites

Pai codul pentru a gasi mppt si pentru a scoate pwm in functie de asta e descris mai sus. Codul scris de mine e suficient sa fie incarcat intr-un arduino, atasate divizoare rezistive, un sunt pe partea de - si un amplificator operational si va scoate factorul de umplere pe pinul 5 in functie de puterea pe care o masoara de la panouri.

 

E functional, se descurca si pe soare si pe nori.

 

In functie de divizorul rezistiv de pe intrare si iesire il putem pune la orice sistem.

 

Si cred ca daca pe pinul 5 unde vine optocuplorul intre pin si masa printr-o reizstenta de 330ohmi punem inca un optocuplor intre pinul 5 si +5v avem si redresare sincrona. Ca in controllerul lui matache. Din cate am vazut acolo nici la el pt a deschide fet-ul low side nu se foloseste o iesire separata a microcontrollerului, doar micro montat invers.

 

Eu acum lucrez la partea de afisaj. Imi cer scuze daca postez mai rar dar azi pe ploaie toata ziua sudam si m-am chinuit sa trag 2 cabluri de 4 de la un set de 2 panouri pe care l-am montat pe un tracker (ma rog, e in constructie si trackerul) si dispun de timp destul de limitat.

Share this post


Link to post
Share on other sites

cavit exact la fel functioneaza si portiunea de cod pe care am prezentat-o mai sus.

 

Am montat 2 panouri pe un tracker artizanal, inca nu am facut partea de miscare stanga dreapta, doar in sus si jos si am tras cablurile de la panouri in casa

 

Am reusit sa fac meniul sa il afiseze, au sosit tlp250-urile din china si sper ca maine sa fie senin pentru a putea incerca controllerul cu ambele intrari conectate.

Din cate am observat alogirtmul gaseste mppt-ul cam in 10 secunde, cu toate ca atmega32 functioneaza la 16mhz, toate instructiunile de masurare, afisare mananca destul de mult timp de procesor.

Share this post


Link to post
Share on other sites

Pentru a creste viteza (substantial) recomand ca citirea analogica si calculul legat de MPPT sa le faci folosind intreruperi (de exemplu poti initia conversia ADC printr-o intrerupere de ceas, succesiv pe fiecare canal, iar calculul sa il faci in intreruperea ADC...). In programul principal te poti ocupa relaxat de afisare, de comanda PWM, etc.

Share this post


Link to post
Share on other sites

Flopi nu ma deranjeaza viteza scazuta neaparat pentru ca face caracterele de pe display afisate sa fie mai vizibile, ma refer la sutimile de volt sau de amper:).

 

Este interesant ce spui tu dar poate pui o bucatica de cod ca sa-mi pot face o idee despre cum se poate realiza asta in arduino ?

Share this post


Link to post
Share on other sites

Am montat un stabilizator de 5v pentru placuta cu arduino nano, am pus 2 optocuploare marcate tlp250, sosite din china si pe vremea asta sunt uimit ca tot ansamblul se alimenteaza cand panourile nu pot genera 30ma.

 

Este foarte tare optocuplorul chinezesc, am 2 de la cavit care par a fi originale, nu pornesc fara minim12v tensiune de alimentare, cele luate de pe ebay par sa functioneze cu o tensiune de intrare de sub 5volti.

 

Pe display am 3 pagini pe care le afisez : valori pentru o intrare, valori pentru cealalta si o pagina care monitorizeaza iesirea (tensiune de iesire si puterea obtinuta), la care ma gandesc sa ii mai pun si eficienta (puterea obtinuta la iesire fata de cea de la intrarea panourilor.

Share this post


Link to post
Share on other sites

Pe arduino nu am lucrat... eu m-am jucat cu uC-uri Atmel in C si asm folosind CVAVR. Trebuie sa fie ceva prin documentatia arduino dar nu am timp de sa ma apuc (si) de asta.Vad ca ai scri codul in C, daca gasesti cum se definesc intreruperile pentru arduino sau pentru compilatorul pe care il folosesti, te pot ajuta...

Share this post


Link to post
Share on other sites

 Asa ziceam si eu, sa fie folosite intreruperile, iar portiunea cu afisarea si altele sa fie rulata mai rar, poate ca Mihai nu stie cum se definesc intreruperile la arduino, eu nici atit, ideea ca bucla trebuie sa fie cat mai scurta doar rutina pentru MPPT, am gasit undeva un algoritm de evolutie diferentiala care gaseste multiplele MPP in situatie de umbrire partiala si alege pe cel mai mai mare, in articol zice ca il gaseste in 1 secunda pe un controller atmega ca cel de pe arduino.

 am gasit insa MPPT care il face in 10ms. nu stiu cum merge, era o cutiuta made in USA.

Share this post


Link to post
Share on other sites

pai daca algoritmul e foarte simplu, cutiuta avea o tensiune de referinta foarte stabila teoretic i-ar fi ajuns cateva masuratori. Daca si microcontrollerul e pe la 20 30 mhz si nu executa decat mppt-ul, nu pierde timpi comandand displayuri si alte prostii presupun ca e realizabil in 10ms.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We use cookies and related technologies to improve your experience on this website to give you personalized content and ads, and to analyze the traffic and audience of your website. Before continuing to browse www.tehnium-azi.ro, please agree to: Terms of Use.