bonjour
pour mon chargeur solaire j'ai utilisé le code mppt suivant
mais la puissance n'atteint jamais la puissance max
et le rapport cyclique converge tjr ver la valeur max (limité a 0.9)
si vous aves une idée!
**********************
************Code:#include <LiquidCrystal.h> int pwmpin=11; float capteur_tensionpv; float capteur_courantpv; float volt_pv; float volt_pv_old=0; float cour_pv; float cour_pv_old=0; float puissance_pv; float puissance_pv_old=0; //static byte d=127; int d=127; float pui=0; float cu=0; float vol=0; int k=0; //float ton=50; //float toff=100-to; //float delta=0.1; const unsigned long BLINK_INTERVAL = 1000; unsigned long previousMillis = 0; LiquidCrystal lcd(2,9,4,5,6,7); void setup() { Serial.begin(9600); // put your setup code here, to run once: TCCR1B = TCCR1B & B11111000 | B00000010;//por d11,d12 f=3900h lcd.begin(16,4); pinMode(pwmpin, OUTPUT); lcd.setCursor(0,0); lcd.print("initialisation..."); delay(1000); lcd.clear(); } void loop() { // put your main code here, to run repeatedly: //calcul v,i,etp unsigned long currentMillis = millis(); for(k=0;k<50;k++){ volt_pv=(analogRead(A0))*5.0/1023.0*9800.0/2.5/110.0; cour_pv=(analogRead(A1))*5.0/1023.0*2000.0/2.0/110.0; //puissance_pv=volt_pv*cour_pv; vol=vol+volt_pv; cu=cu+cour_pv; //pui=pui+puissance_pv; } //puissance_pv_old=volt_pv_old*cour_pv_old; volt_pv=vol/50.0; cour_pv=cu/50.0; puissance_pv=volt_pv*cour_pv; //affichage if(currentMillis - previousMillis >= BLINK_INTERVAL){ previousMillis = currentMillis; lcd.setCursor(0,0); lcd.print("v(pv)"); //lcd.setCursor(8,0); lcd.print(volt_pv,2); lcd.print("v"); lcd.setCursor(0,1); lcd.print("i(pv)"); //lcd.setCursor(8,1); lcd.print(cour_pv,2); lcd.print("A"); lcd.setCursor(0,2); lcd.print("p(pv)"); lcd.setCursor(8,2); lcd.print(puissance_pv); lcd.print("w"); } if(puissance_pv==puissance_pv_old){ volt_pv_old=volt_pv; cour_pv_old=cour_pv;} else{ if(puissance_pv>puissance_pv_old){ if(volt_pv>volt_pv_old){ d=d+3; } else{ d=d-3; } } else{ if(volt_pv<volt_pv_old){ d=d+3; } else{ d=d-3; } }} if(d>250){d=250;} if(d<3){d=3;} volt_pv_old=volt_pv; cour_pv_old=cour_pv; puissance_pv_old=puissance_pv; vol=0.0; pui=0.0; cu=0.0; delay(5); //d=255-d; //pwm*/d=(d-1.0)/d; //Serial.print(volt_pv); analogWrite(11,d); Serial.println(d); }
-----