MPPT CON MICROCONTROLLORE

Schema per Realizzare un MPPT con Microcontrollore utile a Massimizzare la Potenza Erogata dai Pannelli Fotovoltaici…

 

 

 
 



 

INTRO

MPPT significa Maximum Power Point Tracker ovvero tracciatore del massimo punto di potenza ed è un sistema che fa si che uno o più pannelli riescano ad erogare la massima potenza indipendentemente dal carico. Come tutti gli elementi circuitali anche la cella fotovoltaica ha una determinata caratteristica corrente tensione che fa si che la tensione sia più alta quando la corrente è piccola e va a 0 per un determinato valore di corrente, visto che la potenza è data dalla tensione moltiplicata la corrente vi sarà un determinato punto della caratteristica al quale vi sarà la massima potenza erogata.

Consideriamo la caratteristica di una cella solare:

Bisogna far lavorare la cella nel punto di ginocchio della caratteristica V-I (in rosso) visto che considerando la curva in blu che rappresenta la potenza è proprio nel punto di ginocchio che si ha la massima potenza. Per fare ciò si usa un circuito MPPT che tramite diversi algoritmi va a far lavorare la cella al punto di sua massima potenza. Sta poi ai circuiti che vengono dopo adattare la tensione per il carico.

Nel seguente articolo viene usato un microcontrollore che misura la potenza e tramite il più semplice degli algoritmi trova il punto di massima potenza grazie ad un convertitore SEPIC controllato dal microcontrollore.

 





 
CODICE

Il codice è il seguente:

char value = 0x01;                            //valore per variare il pwm
unsigned int Corrente, Tensione;              //valori convertito
unsigned long PotenzaT1, PotenzaT0;           //Valori Potenza
bit check;

void main() {

  TRISC.F2 = 0;                 //uscita pwm portc 2

  PR2 = 0x3F;                   //valore per garantire una frequenza di 31KHZ del pwm con quarzo da 8MHz
  T2CON = 0b00000100;           //setting tmr2: postascaler 1:1, tmr2 on, prescaler 1:1
  CCP1CON = 0b00001100;         //utilizza pwm e setta il valore di comparazione con i due lsb = 11
  CCPR1L = value;               //valore affinchè DC=1
  ADC_Init();                   //inizializza l'ADC
  check = 0;                    //Inizializzo le variabili a 0
  PotenzaT1 = 0;
  PotenzaT0 = 0;
  delay_ms(500);                //Delay assestamento

  while(1){
  
    Tensione = ADC_Get_Sample(0);                 //Leggi il valore di tensione
    Corrente = ADC_Get_Sample(1);                 //Leggi il valore di corrente
    PotenzaT1 = Tensione * Corrente;              //Ottieni valore potenza

    if (check){                                   //Se è stato effettuauo il primo controllo
      if (PotenzaT1 > PotenzaT0)                  //Se la potenza attuale è maggiore della precedente
        if(value < 0x3D) value ++;                //Incrementa valore

      else{                                       //Se invece la potenza è minore
        check = 0;                                //cambia ciclo controllo
        if(value > 0x03) value --;                //riduci il duty cycle
      }
    }
    else{                                         //ciclo di controllo inverso
      if (PotenzaT1 > PotenzaT0){                 //Se la potenza è maggiore
        if(value > 0x03) value --;                //Riduci il duty cycle
      else{                                       //Se la potenza è minore
        check = 1;                                //cambia ciclo di controllo
        if(value < 0x3D) value ++;                //incrementa valore DC
      }
      }
    }

    PotenzaT0 = PotenzaT1;                       //Salva valore di potenza
    CCPR1L = value;                              //Aggiorna DC
    delay_ms(100);                               //Delay di assestamento
 }
}

In questo codice si va semplicemente ad implementare il seguente algoritmo:

Nel codice si vanno ad inizializzare le variabili per la corrente, tensione e potenza e inoltre il valore “value” che contiene il valore del duty cycle.  Nel programma principale si va a settare il PWM in modo tale che con un quarzo da 8MHz vi sia una frequenza di 31KHz, poi si inizializza l’ADC, si inizializzano a 0 le variabili e si aspettano 500ms affinché finiscano i transistori e il circuito vada a regime. Nel ciclo infinito si legge il valore di tensione, il valore di corrente e si moltiplicano per ottenere la potenza.

Se il valore di “check” è 1, la potenza attuale maggiore della precedente e il duty cycle non è al massimo allora si va ad incrementare il valore del duty cycle, mentre se la potenza è minore si decrementa il duty cycle se non è al minimo e si cambia il valore di check in modo tale da cambiare il controllo.

Se “check” è zero se la potenza attuale è maggiore della precedente e se il valore del duty cycle non è già al minimo allora si decrementa il duty cycle. Se la potenza è minore invece si va ad incrementare il duty cycle e poi si cambia ciclo di comparazione come dall’immagine dell’algoritmo.

Finito il controllo si memorizza il valore della potenza, si cambia duty cycle e si va ad inserire un ritardo per far assestare il circuito al nuovo valore di duty cycle.

 

SCHEMA

Lo schema è il seguente:

La tensione del pannello solare entra dalle boccole “+” e “GND” e questa tensione viene ridotta a 5V con un regolatore lineare U3 7805 e questa tensione serve al alimentare il microcontrollore e il sensore di corrente. Il microcontrollore è alimentato dalla tensione a 5V con il positivo al pin 20 e il negativo o gnd ai pin 8 e 19. VDD inoltre è connesso al pin 1 tramite una resistenza R1 da 47K. Il sistema di oscillazione viene generato da X1, un quarzo da 8MHz, e due condensatori da 22pF C1 e C2.

La tensione del pannello solare, essendo al massimo 20V, viene divisa per un valore di 4 tramite R5 ed R6, prima di giungere all’ingresso AN0 del canale dell’ADC. C14 serve come filtro. Per la corrente invece si usa un sensore di corrente composto da U2 e la resistenza di sensing R3. Si può usare un sensore di corrente qualsiasi, l’importante è dimensionare R3 in modo tale che alla corrente di cortocircuito del pannello solare vi sia in uscita dal sensore una tensione massima di 4V in modo tale che questa tensione giunga al secondo canale dell’ADC senza bruciarlo. C13 è una capacità di filtro.

Una volta misurata corrente e tensione e generato il duty cycle bisogna controllare il convertitore. Il convertitore è formato di condensatori di storage (ovvero mantengono la tensione stabile anche con un assorbimento non costante dato dal convertitore) e sono due condensatori da 1000uF prima della resistenza di sensing e 3 dopo questa resistenza.

Si potrebbe pensare di usare un solo condensatore invece di due o tre in parallelo, però i condensatori in parallelo, anche se hanno un valore di capacità somma dei condensatori nella serie, presentano una resistenza serie molto piccola data dal parallelo delle resistenze serie dei singoli condensatori. In ogni caso minore è la resistenza serie del singolo condensatore migliori sono le prestazioni. I condensatori nello schema sono dimensionati per un pannello solare con tensione di open voltage di 20V e corrente di cortocircuito di 350mA.

Il convertitore usato è di tipo SEPIC visto che in questa struttura è più facile il controllo dell’elemento di switching ovvero Q1. L1, Q1, C9 parallelo C7 parallelo C8, L2, D1 e  C10 parallelo C11 parallelo C12 formano gli elementi del convertitore. Q1 deve avere un bassa resistenza alla tensione VGS di 4.5V (ovvero minore di 100mOhm) e una tensione VDS di 60V, se rispetta queste caratteristiche può essere usato un qualsiasi
MOSFET. L1 ed L2 devono anch’esse avere una bassa resistenza e devono supportare una corrente di almeno 2A.

Minori sono le resistenze serie dei condensatori, la resistenza di canale del MOSFET e la resistenza dell’induttore maggiore è l’efficienza del circuito.

Il circuito montato su breadboard è il seguente:

è stato fatto un test con un carico di prova a 47 Ohm, con la connessione diretta del pannello solare si ha sul carico una potenza di 3.08W circa, con il circuito di MPPT, non ostante fosse montato su breadboard (quindi una elevata resistenza tra le connessioni) la potenza fornita sempre ad un carico di 47 Ohm è di 4.11W.

 

DOWNLOAD

Potete scaricare le simulazioni del circuito con MULTISIM14 e PROTEUS e inoltre il codice compilato conMIKROC al seguente LINK!!!



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

2 pensieri su “MPPT CON MICROCONTROLLORE

  1. Ciao,
    il tuo articolo é molto interessante, ho scaricato le simulazioni, ma siccome io ho la versione 12 di Multisim, é possibile avere lo schema Multisim 14 per poi inserirlo in Multisim 12?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *