EnergiAlternativa

Page Index Toggle Pages: 1 [2]  Send TopicPrint
Normal Topic Pilotare l'inverter grid tie (Read 14912 times)
danye
Global Moderator
*****
Offline


--------

Posts: 360
Location: Roma
Gender: Male
Zodiac sign: Moonchild
Re: Pilotare l'inverter grid tie
Reply #15 - 02.09.15 at 20:40:32
Print Post  
Bene ho buttato giu il codice per gestire l'inverter sul pin di uscita pwm 9.
La logica è quella di controllare se la potenza acea è maggiore della potenza inverter e di incrementare il pwm se è vero altrimenti decrementa. Ho inserito un tempo di attesa dopo ogni regolazione per dare il tempo  all'inverter di adeguarsi alla richiesta, ma in caso di decremento della potenza questo tempo diminuisce di 5 volte, per avere una reattività maggiore e non correre il rischio di immettere potenza in rete. In tutti i casi se la potenza acea fosse minore di 0 il pwm si porterebbe immediatamente a 0.
Ho aggiunto anche un tempo di refresh del display per evitare di visualizzare fluttuazioni sui valori.
Che ne dici può andare?

Code (C++)
Select All
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//ASSEGNAZIONE PIN  LCD
const int BACKLIGH_PIN = 10;
const int INVERTER_PIN = 9;

int OffsetPin = A4;
int TensionePin = A1;
int CorrentePin_Acea = A2;
int CorrentePin_Inverter = A3;
int pwm = 0;
int Potenza_Delta = 10; // potenza di sicurezza massima tra l'acea e l'inverter in watt
float Fattore_Conversione_Tensione = 0.623; //da calcolare
float Fattore_Conversione_Corrente_Acea = 0.073; //da calcolare
float Fattore_Conversione_Corrente_Inverter = 0.073; //da calcolare
float TensioneRMS ;
float CorrenteRMS_Acea ;
float CorrenteRMS_Inverter ;
float PotenzaAttiva_Acea;
float PotenzaAttiva_Inverter;
float PotenzaApparente_Acea;
float PotenzaApparente_Inverter;
float FattorediPotenza_Acea;
float FattorediPotenza_Inverter;
float TensioneRMS_display ;
float CorrenteRMS_Acea_display ;
float CorrenteRMS_Inverter_display;
float PotenzaAttiva_Acea_display;
float PotenzaAttiva_Inverter_display;
unsigned int MediaLetture = 0;
unsigned int disp_refresh = 1000; //tempo di refresh del display
unsigned long ultimo_refresh = 0;//variabile di temporizzazione
unsigned long Ultima_Regolazione_Inverter;// variabile di temporizzazione
unsigned int Regolazione_Refresh = 250;//tempo di attesa prima del prossimo aumento di potenza dell'inverter
unsigned int Nuova_Regolazione_Refresh = Regolazione_Refresh;

void setup() {
  //pinMode(BACKLIGH_PIN, OUTPUT);
  //digitalWrite(BACKLIGH_PIN, HIGH);
    Serial.begin(9600);
  pinMode(INVERTER_PIN, OUTPUT);
  analogWrite(INVERTER_PIN, pwm);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("PowerMeter");
  lcd.setCursor(0,1);
  lcd.print("Enhanced");
  delay(2000);
  lcd.clear();
ADCSRA&=0X90+ 0b101; //Setta ADC prescaler a 32   
}

void loop() {
float SommaV=0;
float SommaI_Acea=0;
float SommaI_Inverter=0;
float SommaP_Acea=0;
float SommaP_Inverter=0;
int NumCampionamenti = 0;
int Offset = analogRead(OffsetPin);
unsigned long start = micros();
while (micros() < (start + 20000)){
float Tensioneinst = (analogRead(TensionePin)-Offset)*Fattore_Conversione_Tensione;
float Correnteinst_Acea = (analogRead(CorrentePin_Acea)-Offset)*Fattore_Conversione_Corrente_Acea;
float Correnteinst_Inverter = (analogRead(CorrentePin_Inverter)-Offset)*Fattore_Conversione_Corrente_Inverter;


SommaV += pow(Tensioneinst,2);
SommaI_Acea += pow(Correnteinst_Acea,2);
SommaI_Inverter += pow(Correnteinst_Inverter,2);
SommaP_Acea += (Tensioneinst*Correnteinst_Acea);
SommaP_Inverter += (Tensioneinst*Correnteinst_Inverter);
NumCampionamenti++;
}

TensioneRMS = sqrt(SommaV / NumCampionamenti);
CorrenteRMS_Acea = sqrt(SommaI_Acea / NumCampionamenti);
CorrenteRMS_Inverter = sqrt(SommaI_Inverter / NumCampionamenti);
if (CorrenteRMS_Acea < 0.10) {//soglia minima
CorrenteRMS_Acea=0;
SommaP_Acea=0;}
if (CorrenteRMS_Inverter < 0.10) {//soglia minima
CorrenteRMS_Inverter=0;
SommaP_Inverter=0;}
PotenzaAttiva_Acea = SommaP_Acea/ NumCampionamenti;
PotenzaAttiva_Inverter = SommaP_Inverter/ NumCampionamenti;
PotenzaApparente_Acea = TensioneRMS * CorrenteRMS_Acea;
PotenzaApparente_Acea = TensioneRMS * CorrenteRMS_Acea;
FattorediPotenza_Acea = PotenzaAttiva_Acea/PotenzaApparente_Acea;
FattorediPotenza_Inverter = PotenzaAttiva_Inverter/PotenzaApparente_Inverter;

//blocco che pilota l'inverter
if(millis() - Ultima_Regolazione_Inverter >= Nuova_Regolazione_Refresh){
  if(PotenzaAttiva_Acea  >  Potenza_Delta{
    if(pwm < 255){ 
      pwm++;
      Nuova_Regolazione_Refresh = Regolazione_Refresh;
    }
    }else{
    if(pwm > 0){
      pwm--;
      Nuova_Regolazione_Refresh = Regolazione_Refresh / 5;
    }
   }
  Ultima_Regolazione_Inverter = millis();
}
if(PotenzaAttiva_Acea <= 0){
  pwm = 0;
}
analogWrite(INVERTER_PIN, pwm);
/*debug
Serial.print(PotenzaAttiva_Acea);
Serial.print("----");
Serial.print(PotenzaAttiva_Inverter);
Serial.print("----");
Serial.println(pwm);
*/
//****************************


//visualizzo i dati sul display
if(millis() - ultimo_refresh <= disp_refresh){
TensioneRMS_display += TensioneRMS;
CorrenteRMS_Acea_display += CorrenteRMS_Acea;
CorrenteRMS_Inverter_display += CorrenteRMS_Inverter;
PotenzaAttiva_Acea_display += PotenzaAttiva_Acea;
PotenzaAttiva_Inverter_display += PotenzaAttiva_Inverter;
MediaLetture++;
}
else{
TensioneRMS_display = (TensioneRMS_display / MediaLetture);
CorrenteRMS_Acea_display = (CorrenteRMS_Acea_display / MediaLetture);
CorrenteRMS_Inverter_display = (CorrenteRMS_Inverter_display / MediaLetture);
PotenzaAttiva_Acea_display = (PotenzaAttiva_Acea_display / MediaLetture);
PotenzaAttiva_Inverter_display = (PotenzaAttiva_Inverter_display / MediaLetture);
lcd.setCursor(0, 0);
lcd.print(TensioneRMS_display,0);
lcd.print("V                     ");
lcd.setCursor(5, 0);
lcd.print(CorrenteRMS_Acea_display,1);
lcd.print("A                     ");
lcd.setCursor(11, 0);
lcd.print(CorrenteRMS_Inverter_display,1);
lcd.print("A                     ");
lcd.setCursor(0,1);
lcd.print(PotenzaAttiva_Acea_display,0);
lcd.print("W                     ");
lcd.setCursor(6,1);
lcd.print(PotenzaAttiva_Inverter_display,0);
lcd.print("W                     ");
lcd.setCursor(12,1);
lcd.print(FattorediPotenza_Acea,2);
lcd.print("                      ");
MediaLetture = 0;
TensioneRMS_display = 0;
CorrenteRMS_Acea_display = 0;
CorrenteRMS_Inverter_display = 0;
PotenzaAttiva_Acea_display = 0;
PotenzaAttiva_Inverter_display = 0;
ultimo_refresh = millis();
}
}
//***************************************************
 

« Last Edit: 12.09.15 at 23:54:00 by danye »  

1x185Wp  + 1x225Wp in serie poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015RN
7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici
Sistema 12 volt che alimenta le luci a led di tutto l'appartamento
monitoraggio impianto www.solare.altervista.org
Back to top
 
IP Logged
 
danye
Global Moderator
*****
Offline


--------

Posts: 360
Location: Roma
Gender: Male
Zodiac sign: Moonchild
Re: Pilotare l'inverter grid tie
Reply #16 - 12.09.15 at 22:49:55
Print Post  
Fatte le prime prove, esito GO! (come dice il grande  Wink).
  

1x185Wp  + 1x225Wp in serie poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015RN
7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici
Sistema 12 volt che alimenta le luci a led di tutto l'appartamento
monitoraggio impianto www.solare.altervista.org
Back to top
 
IP Logged
 
ElettroshockNow
Forum Administrator
*****
Offline


yottawatt

Posts: 3920
Location: Roma
Gender: Male
Zodiac sign: Gemini
Re: Pilotare l'inverter grid tie
Reply #17 - 13.09.15 at 02:33:16
Print Post  
Roll Eyes Shocked ..uao
Bello bello ,aiutami a dire bello

Belloooooooo

Un piccolo ibrido per contenere i consumi recuperando l'energia di scarto dell'impianto ad isola è un'ottima scelta.

Complimenti   Wink
  

Il Tempo non lo vede nessuno,il lavoro lo vedono tutti (Mamma)
Impara a rubare con gli occhi (Papà)
Back to top
YouTube  
IP Logged
 
danye
Global Moderator
*****
Offline


--------

Posts: 360
Location: Roma
Gender: Male
Zodiac sign: Moonchild
Re: Pilotare l'inverter grid tie
Reply #18 - 20.09.15 at 22:03:22
Print Post  
Cominciato il montaggio definitivo dell' impianto.  Smiley
  

20150920_220923.jpg ( 970 KB | Downloads )
20150920_220923.jpg

1x185Wp  + 1x225Wp in serie poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015RN
7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici
Sistema 12 volt che alimenta le luci a led di tutto l'appartamento
monitoraggio impianto www.solare.altervista.org
Back to top
 
IP Logged
 
ronwal
Junior Member
**
Offline


--------

Posts: 90
Gender: Male
Re: Pilotare l'inverter grid tie
Reply #19 - 08.12.15 at 10:41:18
Print Post  
Ciao ragazzi....ho provato a realizzare il circuito e dopo alcune regolazioni funziona tutto egregiamente....
Ho in mente di gestire con questo circuito un sunny boy 1200 tl
variando in pwm la stringa di 7 pannelli 60 celle con un mosfeet 500 v e circa 40A....direttamente dai 500 hz di arduino...pensate sia possibile?
  
Back to top
 
IP Logged
 
ronwal
Junior Member
**
Offline


--------

Posts: 90
Gender: Male
Re: Pilotare l'inverter grid tie
Reply #20 - 08.12.15 at 10:44:31
Print Post  
Ho usato lo sketc di elettro, ma vorrei implementare anche la modifica fatta da danye...ma non ho capito molto, sono state cambiate alcune diciture e sono andato in palla.....come faccio a integrare un uscita pwm allo sketc di elettro?
  
Back to top
 
IP Logged
 
danye
Global Moderator
*****
Offline


--------

Posts: 360
Location: Roma
Gender: Male
Zodiac sign: Moonchild
Re: Pilotare l'inverter grid tie
Reply #21 - 09.12.15 at 13:39:10
Print Post  
Ciao lo sketch che ho postato piu in alto implementa già l'uscita in pwm sul pin 9. L' arduino varierà il pwm in base alla richiesta di corrente del carico. Secondo me dovresti usare un igbt al posto del mosfet, in base anche alle esperienze fatte da Elettro. Wink
  

1x185Wp  + 1x225Wp in serie poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015RN
7x batterie auto da recupero in parallelo 12volt 400 Ah molto teorici
Sistema 12 volt che alimenta le luci a led di tutto l'appartamento
monitoraggio impianto www.solare.altervista.org
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1 [2] 
Send TopicPrint
 

TOP100-SOLAR Galleria Immagini EnergiAlternativa