105

Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Politecnico di Milano

Scuola di Ingegneria Industriale e dell'InformazioneCorso di Laurea Magistrale in Ingegneria Energetica e Nucleare

Corso di Studio in Ingegneria Energetica

Dipartimento di Energia

Ottimizzatori di potenza per fotovoltaico

integrati nei moduli:

implementazione del controllo

usando Arduino

Relatore: Prof. Sonia LEVA

Tesi di laurea di:Eugenio Turano Matr. 840064

Anno Accademico 20162017

Page 2: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

ii

Page 3: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Abstract

Nell'ambito dell'energia fotovoltaica si osserva un crescente interesse verso gliottimizzatori di potenza. Essi vengono qui discussi descrivendone il funziona-mento e classicandone le congurazioni. Le congurazioni esplorate sono ilsingolo convertitore per multipli moduli e per singolo modulo, dove il secondoviene scelto in questa tesi in un'ottica di integrazione modulo-ottimizzatore.Vengono poi analizzate diverse tipologie di convertitore, AD-DC e DC-DC: laseconda viene impiegata, nella particolare topologia convertitore Four SwitchBuck Boost (FSBB) grazie alla sua essibilità e alto rendimento.Sulla base di queste scelte vengono analizzate le logiche di controllo, tra cui glialgoritmo MPPT (maximum power point tracking). Questi vengono classicatie spiegati e vengono scelti gli algoritmi Perturbe and Observe e Incrementalconductance sulla base del miglior rapporto ecacia/semplicità.In virtù dell'adozione della topologia FSBB si rende necessario l'utilizzo dellafunzione continuità di guadagno.Viene proposta una innovativa implementazione e formalizzazione della stessa,con l'obiettivo di superare i limiti dei controllori retro azionati semplici (in que-sto caso Proporzionale-integrativo) e di duty cycle degli switch reali.Le logiche di controllo proposte vengono poi convalidate con l'ausilio delle simu-lazioni Simulink insieme all'add-on Plecs, utilizzando dei modelli realistici per imoduli PV, convertitore FSBB e carico.Alcune misure di rendimento vengono poi mostrate con l'intento di avallare l'a-dozione della funzione continuità di guadagno. Si procede quindi alla scritturadel codice Arduino per implementare il controllo simulato. Il funzionamento delsoftware e hardware Arduino viene illustrato e viene ottimizzato il progammain modo che possa lavorare in modo eciente ad alta frequenza, sia al ne divericare la correttezza del concetto, sia per avere miglior prestazioni del siste-ma.Vengono quindi illustrate le prove sperimentali in laboratorio eettuate conun simulatore di modulo PV. Il codice viene provato nel suo funzionamento ei risultati dimostrano che sebbene questa applicazione richieda un alto gradodi competenza di programmazione Arduino può essere usato come economicoottimizzatore di potenza al pari di microcontrollori di fascia più alta.

iii

Page 4: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

iv ABSTRACT

Page 5: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Indice

Abstract iii

1 Introduzione 1

2 Convertitore DC-DC 7

2.1 Congurazioni confrontate . . . . . . . . . . . . . . . . . . . . . . 72.1.1 Congurazione singolo DC-DC per moduli multipli . . . . 72.1.2 Congurazione a singolo DC-DC per modulo singolo . . . 72.1.3 Full scale o Partial scale converter . . . . . . . . . . . . . 8

2.2 Congurazione scelta . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Componenti, logica e controllo 11

3.1 Componenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 Logica di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3 Obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.4 Presentazione problema . . . . . . . . . . . . . . . . . . . . . . . 133.5 Caso con switch e FSBB converter ideali . . . . . . . . . . . . . . 13

3.5.1 Funzione ideale di continuità di guadagno . . . . . . . . . 163.6 Caso con FSBB converter ideale ma switch non ideali . . . . . . 17

3.6.1 Funzione di continuità di guadagno per switch reali . . . . 193.6.2 Calcolo coecenti m1, m2, b1, b2 . . . . . . . . . . . . . 203.6.3 calcolo MiddlePoint . . . . . . . . . . . . . . . . . . . . . 22

4 Simulazione con Simulink e Plecs 25

4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2 Blocco Plecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2.1 modulo PV . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2.2 ltri e induttore . . . . . . . . . . . . . . . . . . . . . . . 304.2.3 Batteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.3 Parametri di switch reali . . . . . . . . . . . . . . . . . . . . . . . 334.4 blocco MPPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.5 Controllore PI e funzione di transizione buck boost . . . . . . . . 354.6 Risultati Simulazione . . . . . . . . . . . . . . . . . . . . . . . . . 36

v

Page 6: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

vi INDICE

4.6.1 Comportamento MPPT . . . . . . . . . . . . . . . . . . . 364.6.2 Comportamento proporzionale integrativo . . . . . . . . . 36

4.7 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5 Implementazione con Arduino Due 41

5.1 Perché Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2 Perchè Arduino Due . . . . . . . . . . . . . . . . . . . . . . . . . 415.3 Mappa pin arduino Due . . . . . . . . . . . . . . . . . . . . . . . 435.4 Codice Arduino sviluppato . . . . . . . . . . . . . . . . . . . . . 47

5.4.1 impostazione degli I/O . . . . . . . . . . . . . . . . . . . . 475.4.2 Abilitazione potenza con il PMC . . . . . . . . . . . . . . 485.4.3 Impostazione del controller PWM . . . . . . . . . . . . . 485.4.4 Event Line . . . . . . . . . . . . . . . . . . . . . . . . . . 515.4.5 Controller ADC . . . . . . . . . . . . . . . . . . . . . . . . 53

5.5 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6 Risultati sperimentali 57

6.1 Componenti setup . . . . . . . . . . . . . . . . . . . . . . . . . . 576.1.1 TerraSAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.1.2 Induttore 1mH . . . . . . . . . . . . . . . . . . . . . . . . 576.1.3 LEM LV 25-P . . . . . . . . . . . . . . . . . . . . . . . . . 586.1.4 LEM LA 2-NP . . . . . . . . . . . . . . . . . . . . . . . . 596.1.5 ST microelectronics L298N . . . . . . . . . . . . . . . . . 59

6.2 Prima prova Dead time . . . . . . . . . . . . . . . . . . . . . . . 616.3 ADC sincronizzato . . . . . . . . . . . . . . . . . . . . . . . . . . 62

6.3.1 Trasmissione per seriale su arduino . . . . . . . . . . . . . 626.4 PI con circuito RC . . . . . . . . . . . . . . . . . . . . . . . . . . 656.5 PI con buck converter . . . . . . . . . . . . . . . . . . . . . . . . 66

6.5.1 Snubber . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.5.2 Risposta all'impulso . . . . . . . . . . . . . . . . . . . . . 67

6.6 PI con boost converter . . . . . . . . . . . . . . . . . . . . . . . . 696.7 MPPT con buck converter . . . . . . . . . . . . . . . . . . . . . . 72

6.7.1 PV simulator . . . . . . . . . . . . . . . . . . . . . . . . . 726.8 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7 Conclusione, contributo e sviluppi futuri 75

7.1 Conclusione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.2 Contributo e sviluppi futuri . . . . . . . . . . . . . . . . . . . . . 76

A codice arduino solo DeadTime 77

B Codice Arduino per buck converter con PI, con L298N 81

C Codice Arduino per PCB completo, 3 PV 85

Aknowlegments 95

*

Page 7: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Elenco delle tabelle

3.1 Datasheet pannello Kyocera . . . . . . . . . . . . . . . . . . . . . 113.2 alcuni valori della Funzione ideale di continuità di guadagno . . . 173.3 alcuni valori della Funzione di continuità di guadagno con switch

reali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1 dati per il calcolo della matrice 3D . . . . . . . . . . . . . . . . . 284.2 ecenza modulo PV-batteria . . . . . . . . . . . . . . . . . . . . 37

5.1 Le PWM utilizzate con canali e pin . . . . . . . . . . . . . . . . . 465.2 periferiche A e B ai capi del multiplexer per ogni pin . . . . . . . 485.3 pin e utilizzi nel programma degli ADC . . . . . . . . . . . . . . 54

6.1 Alcuni dati di LEM LV25-P . . . . . . . . . . . . . . . . . . . . . 586.2 Datasheet LEM LA25-NP . . . . . . . . . . . . . . . . . . . . . . 596.3 Alcuni dati dal datahseet di L298N . . . . . . . . . . . . . . . . . 596.4 Alcuni valori in ASCII e in binario per una trasmissione tipica . 636.5 I dati di targa del pannello ttizio usato per i test con TerraSAS 72

vii

Page 8: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

viii ELENCO DELLE TABELLE

Page 9: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Elenco delle gure

1.1 Angoli di azimuth e tilt . . . . . . . . . . . . . . . . . . . . . . . 21.2 curva P-V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 DC-AC-bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1 congurazione con un DC-DC per modulo fotovoltaico e un unicoinverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 FSBB converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3 Le diverse congurazioni usando dei DC-DC, la (a) è il caso di full

scale converter, il (b) è il caso del partial scale con connessione inserie e il (c) è il partial scale converter con connessione in parallelo 9

2.4 Il usso di potenza nel caso si Partial scale converter in serie . . 10

3.1 schema componenti . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 logica di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3 Dead time e delay su transistor . . . . . . . . . . . . . . . . . . . 143.4 Funzione ideale di continuità di guadagno . . . . . . . . . . . . . 163.5 Dead time e delay su transistor nel caso r = Dbucklimit nei due

rami buck (S1,S2) . . . . . . . . . . . . . . . . . . . . . . . . . . 183.6 Funzione di continuità di guadagno con switch reali . . . . . . . . 203.7 andamento buck e boost in funzione di r . . . . . . . . . . . . . . 213.8 andamento buck e boost in funzione di r con Dboostlimit diverso

da Dbucklimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.9 andamento buck e boost in funzione di r con Dboostlimit diverso

da Dbucklimit e Middlepoint corretto . . . . . . . . . . . . . . . 24

4.1 il loop di controllo del circuito . . . . . . . . . . . . . . . . . . . . 264.2 il FSBB converter . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3 la Funzione di continuità di guadagno in plecs . . . . . . . . . . . 274.4 Schema elettrico del modello a singolo diodo . . . . . . . . . . . . 294.5 forme d'onda caratteristiche buck . . . . . . . . . . . . . . . . . . 314.6 forme d'onda caratteristiche boost . . . . . . . . . . . . . . . . . 324.7 transitorio di carica della batteria . . . . . . . . . . . . . . . . . . 334.8 logica turn on delay . . . . . . . . . . . . . . . . . . . . . . . . . 344.9 zone di appartenenza ecienza-costo di varie tecniche MPPT . . 35

ix

Page 10: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

x ELENCO DELLE FIGURE

4.10 la forma d'onda dell'MPPT perturbe and observe . . . . . . . . . 374.11 forma d'onda della tensione ai capi del modulo PV in rosso e della

batteria in blu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.12 forma d'onda della corrente al pannello col PI . . . . . . . . . . . 38

5.1 Center Allignment . . . . . . . . . . . . . . . . . . . . . . . . . . 425.2 Left Allignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.3 mappa delle connessioni tra i pin esterni di Arduino due con chip

SAM3X8E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.4 Logica di funzionamento della periferica PIO . . . . . . . . . . . 455.5 bit del registro REG_CMRx . . . . . . . . . . . . . . . . . . . . 505.6 bit del registro SCM_SYNC . . . . . . . . . . . . . . . . . . . . 505.7 bit del registro ELMRx . . . . . . . . . . . . . . . . . . . . . . . 525.8 bit del registro CMPMx . . . . . . . . . . . . . . . . . . . . . . . 535.9 logica event line . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.10 bit del registro CMPVx . . . . . . . . . . . . . . . . . . . . . . . 545.11 eetto trigger con event line . . . . . . . . . . . . . . . . . . . . . 555.12 bit del registro ADC_MR . . . . . . . . . . . . . . . . . . . . . . 56

6.1 Schema elettrico h-bridge L298N . . . . . . . . . . . . . . . . . . 606.2 signicato delay, rise e fall del L298N . . . . . . . . . . . . . . . . 606.3 Foto allo scope nella prova col dead time . . . . . . . . . . . . . . 616.4 Acquisizione di un onda da 500Khz . . . . . . . . . . . . . . . . . 636.5 Acquisizione di un onda da 100Khz . . . . . . . . . . . . . . . . . 636.6 forma d'onda con un circuito RC e una PWM a 200kHz . . . . . 656.7 Tensione a cavallo dello switch, corrente nell'induttore e segnale

PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.8 circuito elettrico snubber nel caso buck e boost . . . . . . . . . . 676.9 Prima e dopo l'applicazione dello snubber . . . . . . . . . . . . . 686.10 La risposta al gradino di tensione con diversi valori di Ki . . . . 706.11 risposta in modalità boost a bassa corrente (100mA) . . . . . . . 716.12 risposta in modalità boost ad alta corrente (1A) . . . . . . . . . 716.13 Il pannello di controllo di Terrasas, collegato in LAN al computer 736.14 convergenza dell'arduino alla tensione di MPPT . . . . . . . . . . 74

Page 11: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 1

Introduzione

L'utilizzo degli ottimizzatori di potenza per moduli fotovoltaici è un'area dell'e-lettronica di potenza che guadagna sempre più attenzione. Essi sono denibilicome dispositivi elettronici in grado di risolvere le perdite dovute ad una tensio-ne di lavoro non ottimale. La curva di potenza in funzione della tensione (curvaP-V) infatti è fortemente non lineare e può presentare vari punti di massimolocale e un massimo assoluto.Questi cambiano repentinamente posizione nel corso del tempo e dipendono damolteplici fatori, come l'arrangiamento serie-parallelo dei moduli, dei diversigradi di irraggiamento sulle singole celle, anche dovuti al posizionamento ed aostacoli nei casi di utilizzo residenziale.

I punti di massimo dipendono poi dalla presenza di sporcamenti, punti caldi,nuvole, dall'incidenza della radiazione dovuta all'angolo di tilt β e azimuth γcome in gura 1.1.

Come esempio di questa variabilità nella gura 1.2 è possibile vedere i puntidi massimo locale e assoluto di un modulo con le caratteristiche del KyoceraKC200GT, ripreso poi più avanti, nei casi delle tre stringhe di celle in parallelocolpite da diversi gradi di irraggiamento, in questo caso 1, 0.5 e 0.1 kW/m2.Il compito dell'ottimizzatore di potenza è di imporre ai capi del modulo unatensione che massimizzi la produzione elettrica.

Tradizionalmente questi dispositivi sono stati impiegati singolarmente perottimizzare grandi schiere di moduli fotovoltaici, come in gura 1.3 caso (a), maun a loro maggiore capillarità può aumentare la potenza recuperata come analiz-zato nel documento [18]. Infatti una logica di integrazione modulo-ottimizzatorepermette di intervenire nel dettaglio andando a massimizzare la resa del singolo,e migliorando quella aggregata.Il ridotto costo dei microcontrollori dovuto allo sviluppo industrale rende semprepiù vantaggioso capillarizzare questi dispisitivi, il presente lavoro vuole insisterein questa direzione tramite l'uso di Arduino, un microcontrollore di sviluppoeconomico di grande successo nel mondo, nato da un'idea italiana. Data quin-di la natura decentralizzata del controllo e l'ottica integrata degli ottimizzatoriscelta, l'attuazione del cambio tensione sul modulo avviene tramite l'uso di con-

1

Page 12: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

2 CAPITOLO 1. INTRODUZIONE

Figura 1.1: Angoli di azimuth e tilt

vertitori di piccola taglia.Data una rete nazionale in corrente alternata le alternative sono due, l'utilizzodi micro-inverter, come un gura 1.3 nel caso (d), e l'utilizzo di micro-convertercome nel caso (c). Questo lavori si focalizzerà sull'utilizzo di micro converterin corrente continua con l'ausilio di un inverter, sebbene lo studio di questocomponente non verrà trattato e considerato come una scatola nera. Tra imicro-convertitori in corrente continua poi si analizzano varie tipologie, i fullscale e i partial scale converter, nei casi di serie e parallelo. Mentre nei primi difa uire tutta la potenza convertita, i secondo gestiscono solo una parte dellapotenza. Ci sono vari vantaggi nell'adottare gli uni o gli altri. Nel primo caso ilsiologico rendimento si applica solo al usso di potenza convertito, che è menodel totale, quindi il sistema raggiunge rendimenti più elevati. Nel secondo casotutta la potenza uisce attraverso il converter, e questo incrementa le perdite,ma aumenta la essibilità, allargando la forbice dei guadagni ottenibili. In que-sto lavoro la seconda opzione verrà scelta per mantenere la massima essibilità,e per lo stesso motivo si sceglie la topologia di convertitore in continua FSBB(four switch buck boost), in studio nel documento [10]. Nello stesso di mostracome a parità di frequenze e di interruttori la congurazione scelta prevale suconvertitore buck-boost per miglior rendimento, e sugli altri buck e boost peressibilità di guadagno. La tesi quindi si focalizza sulla logica di controllo, sifa uso di un anello retroazionato formato da un controllore proporzionale inte-grativo, da un algoritmo di MPPT (maximum power point tracking) e da unafunzione continuità di guadagno. Vari algoritmi di MPPT vengono citati e ana-

Page 13: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Voltage/Voc

0

50

100

150

200

250

Pow

er (

W)

Figura 1.2: curve P-V di tutte le combinazioni di irraggiamento di un moduloFV fatto da tre stringhe di celle irraggiate a 1, 0.5 e 0.1 kW/m2

Page 14: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4 CAPITOLO 1. INTRODUZIONE

Figura 1.3: DC-AC-bus

Page 15: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5

lizzati e inne Perturbe and Observe e Incremental Conductance vengono sceglisugli altri per il loro alto rapporto rendimento/potenza di calcolo. Per quantoriguarda la funzione continuità di guadagno essa viene ripresa dal documento[8] di Texas instrument ma una nuova implementazione e formalizzazione vienestudiata, nei casi di interruttori ideali e reali. Questa nuova implmentazione èapplicabile dato il datasheet degli interruttori e risolve le problematiche dellatopologia FSBB. Quindi le logiche di controllo sopra citate sono avallate conl'ausilio delle simulazioni Simulink e Plecs, usando dei modelli il più possibilerealistici di interruttori, induttori e batteria, utilizzata come carico. Questacongurazione evidenzia i vantaggi della topologia FSBB per la sua ecienzae essibilità, caricando la batteria anche se la tensione attraversa la zona piùcritica, dove il guadagno è circa unitario. A questo punto il lavoro procedeall'implementazione del codice Arduino, vengono mostrati i vantaggi dell'ado-zione del particolare modello Due e sono mostrate le periferiche di questo microcontrollore. Le caratteristiche del programma sono mostrate al ne di spiegarele parti meno chiare. Una volta implementato vi è la prova sperimentale, checonsiste di vari setup. Il primo prevede una prova dei canali PWM (pulse withmodulation) e dei dead time, il secondo è l'acquisizione ad alta velocità di dati(no a 2 milioni di dati al secondo), il terzo è una prova di retroazione utilizzan-do una logica di controllo proporzionale integrativa. Inne dopo aver vericatoil funzionamento dei precedenti codici si procede all'implementazione di un si-stema di controllo di un modulo, utilizzando un simulatore chiamato TerraSAS,con un algoritmo di MPPT e un convertitore solo buck. Ulteriori prove con uncircuito FSBB non sono state possibili per problemi di laboratorio dovuto allabassa qualità degli interruttori impiegati. Tuttavia tutti i test eettuati hannoportato a risultati positivi, confermando che Arduino può essere una piattafor-ma di sviluppo economica, ma che necessita di alte competenze della scritturasoftware dovendo ricorrere ai registri di sistema del micro-processore.

Il documento è organizzato secondo la seguente struttura:

Capitolo 2: si elencano caratteristiche, vantaggi e svantaggi di varie topologiee congurazioni di convertitori.

Capitolo 3: vengono spiegate le logiche implementate, il controllo e i com-ponenti utilizzati. inoltre si mostrano gli obiettivi e i problemi da risolvere delsistema. Si mostrano i limiti di duty cycle, che dipendono dalla sica degliinterruttori, si introduce il concetto di funzione continuità di guadagno e si pro-pone una innovativa implementazione e formalizzazione. Si trattano i casi diinterruttori ideali e reali.

Page 16: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6 CAPITOLO 1. INTRODUZIONE

Capitolo 4: si procede alla simulazione per provare il funzionamento dellalogica proposta. Le simulazioni sono eettuate in Simulink e Plecs utilizzandomodelli il più possibile reali per induttore, interruttori, modulo fotovoltaico. Siutilizza come carico una batteria. Si mostra la stabilità e il rendimento delsistema simulato avallando le scelte fatte e le logiche implementate.

Capitolo 5: viene spiegata la scelta di Arduino Due e si mostrano le sue peri-feriche. Il codice viene spiegato riga per riga nelle sue parti meno comprensibili.Si mostra il funzionamento dei registri del micro-processore Atmel SAM3X8E.

Capitolo 6: si procede alla creazione di un setup sperimentale per provareinizialmente il corretto funzionamento delle periferiche Arduino. Si eettuanotest di codici sempre più complessi passando da una prova solo Dead-time sugliinterruttori ad un semplice controllo retroazionato di tipo proporzionale inte-grativo per un circuito RC. Si procede poi all'implementazione di un controlloper convertitore buck e successivamente si aggiunge la logica MPPT si si testail tutto utilizzando un simulatore di moduli fotovoltaici.

Capitolo 7: Conclusioni, contributo e Sviluppi futuri, si mostrano gli obbiet-tivi raggiunti da questo lavoro e le possibilità per il miglioramento.

Page 17: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 2

Convertitore DC-DC

2.1 Congurazioni confrontate

Il convertitore DC-DC funziona in corrente continua ed è in grado di variare latensione ai suoi capi. Diverse congurazioni possono essere utilizzate:

2.1.1 Congurazione singolo DC-DC per moduli multipli

Il vantaggio di questa congurazione è da ricercarsi nell'economicità e la sem-plicità di implementazione. Il vincolo che lo rende meno appetibile è che tutti imoduli fotovoltaici funzionano a corrente uguale poichè in serie, con perdite dipotenza per non corretta ottimizzazione.

2.1.2 Congurazione a singolo DC-DC per modulo singolo

Questa congurazione è stata esplorata da [19] che riporta i seguenti vantaggi:

1. migliore utilizzazione del singolo modulo grazie all'MPPT singolo

2. possibilità di utilizzare diverse tecnologie contemporaneamente con carat-teristiche diverse

3. migliore protezione della sorgente di potenza, ad esempio alcuni pacchi dibatterie più vecchi possono essere protetti da eccessive scariche

4. ridondanza di convertitori e sorgenti di potenza

5. miglior raccoglimento dati

6. miglior sicurezza per gli operatori in installazione e manutenzione

7

Page 18: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

8 CAPITOLO 2. CONVERTITORE DC-DC

Figura 2.1: congurazione con un DC-DC per modulo fotovoltaico e un unicoinverter

Sarà questa la strategia adottata in questo lavoro, data anche dalla direzioneimpressa dalle aziende che lavorano nel campo, come SolarEdge che pubblicizzaun incremento no al 25% in più di energia prodotta in un anno per un impiantoresidenziale. L'immagine che rappresenta il caso in questione è la 2.1.

2.1.3 Full scale o Partial scale converter

Tra le varie congurazioni è possibile fare diverse scelte con diversi pro e contro,come mostrato da [10].

• Full Scale converter: come nella gura 2.3 nel caso (a).

L

iL

S1

S2

S3

S4

CiPV Co

+

Vo

iC

LOAD

iload

Figura 2.2: FSBB converter

Page 19: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

2.2. CONFIGURAZIONE SCELTA 9

Figura 2.3: Le diverse congurazioni usando dei DC-DC, la (a) è il caso di fullscale converter, il (b) è il caso del partial scale con connessione in serie e il (c)è il partial scale converter con connessione in parallelo

in modalità buck: può alzare la tensione del pannello ombreggiatoper per raggiungere la massima potenza ottenibile

in modalità boost: può abbassare la tensione del pannello NONombreggiato per raggiungere la massima potenza ottenibile.

• Partial scale converter serie: come nella gura 2.3 nel caso (b). compensano

il mismatch processando solo parte della potenza, in questo modo dimi-nuiscono le perdite applicando il rendimento di trasformazione solo allapotenza realmente convertita. Il converter diminuisce (caso buck) o au-menta (caso boost) la tensione in uscita, ma solo parzialmente, non è ingrado di funzionare su tutto lo spettro di tensioni.

ηtot = 1− Pconv

Ptot∗ (1− ηconv) (2.1)

in gura 2.4 il funzionamento del usso di potenza del partial scale.Diventa meno essibile rispetto al caso Full scale perdendo potenza nelcaso di grande mismatch.

• Partial scale converter parallelo: come nella gura 2.3 nel caso (c).è molto usato con batterie, perchè permette facilmente il transito in duedirezioni, permettendo alla potenza di uire anche al contrario.Il bypass in questo caso avviene solo se tutte le stringhe hanno tensioneuguale, ovvero se l'irraggiamento è omogeneo. Ma questo evento è moltoraro, e perde quindi il vantaggio dell'alta ecenza data dal bypass.

2.2 Congurazione scelta

La congurazione scelta è FSBB (four switches buck boost) full scale.Può operare se necessario la modalità buck e boost indipendentemente e con-

Page 20: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

10 CAPITOLO 2. CONVERTITORE DC-DC

Figura 2.4: Il usso di potenza nel caso si Partial scale converter in serie

temporaneamente, e in questo modo garantisce molta più essibilità insieme alfull scale converter. La congurazione è stata scelta in virtù dei risultati ottenu-ti da [10] che ha esplorato vari DC-DC, tra cui buck, boost, buck-boost classicoe cuk. in gura 2.2 possiamo vedere la topologia in esame.

2.3 Obiettivi

L'obiettivo del lavoro è di produrre un sistema che controlli un pannello KyoceraKC200GT 3.1 con un DC-DC del tipo FSBB 2.2 in modalità full scale, e risolverele problematiche ad esso connesse.Non ci si occuperà dell'inverter e di tutto quello che è a valle del DC-DC.

Page 21: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 3

Componenti, logica e

controllo

Dopo aver elencato i motivi e le scelte fatte si procede a descrivere come è stataeseguita l'implementazione del sistema di conversione dell'energia e logica dicontrollo:

3.1 Componenti

Il sistema è composto da varie parti

1. Pannello fotovoltaico da 200W nominali, Kyocera KC200GT

Tabella 3.1: Datasheet pannello KyoceraPotenza massima 200Wnumero celle 54

Vmpp 26.3VImpp 7.61AVoc 32.9VIsc 8.21A

coe di temp Voc −1.23 ∗ 10−1 V/Ccoe di temp Isc 3.18 ∗ 10−3 A/C

2. microcontrollore (in questo caso Arduino due)

3. board con misurazioni di tensione e corrente da mandare ad Arduino viacoassiale per evitare interferenze e ricezione delle 4 PWM con bra otticaper avere perfetto isolamento elettrico.

4. il carico (resistivo, inverter, o batteria)

11

Page 22: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

12 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

Board centralePV Carico

Arduino

Figura 3.1: schema componenti

MPPT PI DutyFcn PWM Sistema

Disturbi

MeasurementsADC

V ref e u

Dbuck

Dboost PWMbuck

PWMboost

V pv, Ipv

V pvanalog

Ipvanalog

V pvdigital, Ipvdigital

Figura 3.2: logica di controllo

3.2 Logica di controllo

La logica di controllo prevede diversi blocchi, simile a quella vista in [8]

• algoritmo di tracciamento del punto massima potenza (MPPT) come da[6]

perturbe and observe (implementato)

incremental conductance (implementato)

current sweep

P&O e IC con punto di partenza intelligente come visto in [8]

• Controllo proporzionale integrale (PI)

• Funzione di continuità di guadagno (DutyFcn)

• Generatore PWM

• Acqusizione ADC

Page 23: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.3. OBIETTIVI 13

3.3 Obiettivi

L'obiettivo è implementare un sistema con microcontrollore (Arduino Due), DC-DC converter buck-boost H-Bridge con un pannello da 200W KC200GT comeda tabella 3.1

3.4 Presentazione problema

Come visto nella gura 3.2 lo schema di controllo prevede un algoritmo MPPTche ha come output un setpoint per il controllore (di tipo PI in questo caso).Ci sono tuttavia delle problematiche da risolvere:

• il PI è un blocco retro azionato semplice che produce un output, mentrein questo caso sono 4, le 4 PWM (a due a due inversi a meno del DeadTime)

• i transistor hanno dei limiti di duty cycle dovuti a minimo on-time (emassimo sullo switch opposto, dovuti entrambi al delay time) e dead time

Dbuckmax:

Dbuckmax =Tswitch − 2 ∗Deadtime − Tdelay1

− Tdelay2

Tswitch(3.1)

Dbuckmin:

Dbuckmin =Tdelay1Tswitch

(3.2)

Dboostmax:

Dboostmax =Tswitch − 2 ∗Deadtime − Tdelay4 − Tdelay3

Tswitch(3.3)

Dboostmin:

Dboostmin =Tdelay1Tswitch

(3.4)

Minimi e massimi duty cycle e guadagno: Il duty cycle minimo di-pende solo dal Tdelay1, cioè dal ritardo di accensione dello switch in questione,mentre il duty cycle massimo dipende sia dal ritardo di accensione dello switchstesso, sia dal deadtime che dal ritardo di accensione dello switch opposto.

3.5 Caso con switch e FSBB converter ideali

Ipotizziamo in prima istanza che

• Gli switch possano avere un duty cycle compreso tra 0 a 100

Page 24: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

14 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

t

PWM1,PWM2

t

S1,S2Tswitch

Dea

dtim

eDea

dtim

e

Dea

dtim

eDea

dtim

e

Tdelay1

Tdelay2

Tdelay1

Figura 3.3: Dead time e delay su transistor

Page 25: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.5. CASO CON SWITCH E FSBB CONVERTER IDEALI 15

• Il guadagno del converter DC-DC sia quello ideale:

Gaindc−dc =DutyCyclebuck

1−DutyCycleboost=VDcLink

VPV(3.5)

Si osserva per maggior chiarezza che:

• DutyCyclebuck è quello dato da S1, S2 vede invece una PWM opposta, cheè spenta quando S1 è accesa e viceversa, per maggior chiarezza guardarel'immagine 2.2

• DytyCycleboost invece è dato da S4, la gamba in basso, mentre S3 èl'opposto con la stessa logica vista sopra.

• VDcLink è la tensione a valle del FSBB.

• VPV è la tensione che insiste sul singolo modulo fotovoltaico.

L'unico ostacolo è dare continuità tra funzionamento Buck e Boost, infatti men-tre gli output sono quattro (a due a due opposti) il controllore prende un valorein ingresso e ne fornisce uno in uscita. Varie soluzioni sono state avanzate:

• imporre DutyCycleboost = DutyCyclebuck in [16] in modo che funzionicome un classico Buck-Boost e sia unica la variabile output del PI

nota: si perde il vantaggio di avere un FSBB

• usare una rete neurale che abbia come funzione di tness la massimapotenza in output facendo a meno anche di PI e MPPT. Come in [13]

nota: è necessaria un'alta potenza di calcolo e di un processore moltoparallelizzato o una GPU, non è implementabile su un microprocessoresemplice come Arduino

• usare un algoritmo che non usi un controllore PI ma che abbia una logicadi MPPT che trova direttamente i duty cycle come in [14] , come si puòvedere in gura 3.4

nota: si hanno risposte brusche poichè non c'è un controllore PI nel loopdi controllo.

• imporre DutyCycleboost = 1 e DytyCyclebuck = 0 in modo che il guadagnoideale sia 1 in transizione

nota: Questa logica ha un maggior rendimento del convertitore perchéazzera le perdite di switching come discusso in [16] ma ha un errore aregime non nullo nell'intorno del guadagno pari a 1.

Page 26: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

16 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

r

Gain

Figura 3.4: Funzione ideale di continuità di guadagno

3.5.1 Funzione ideale di continuità di guadagno

Permette di usare un microcontrollore più semplice rispetto alle reti neurali maè più complesso rispetto alle altre tecniche poiché utilizza in cascata di MPPTe PI.

La funzione crea un raccordo in 1 tra il guadagno ideale di un buck e unboost converter usando la variabile di servizio r come in Figura 3.4. Questafunzione è denita a tratti:

DutyCyclebuck(r) =

0 r ≤ 0

r 0 < r < 1

1 r ≥ 2

(3.6)

DutyCyclebuck(r) =

0 r ≤ 1

r − 1 1 < r < 2

1 r ≥ 2

(3.7)

Si ottiene che il guadagno ideale secondo la formula 3.5 è:

Gainideal(r) =

0 r ≤ 0

r 0 < r < 11

2−r 1 < r < 2

∞ r ≥ 2

(3.8)

per rendere le cose più chiare ecco alcuni valori che assume la funzione

Page 27: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.6. CASO CON FSBB CONVERTER IDEALEMA SWITCH NON IDEALI17

Tabella 3.2: alcuni valori della Funzione ideale di continuità di guadagno

r DutyCyclebuck DutyCycleboost Gainideal

-1 0 0 00 0 0 00.5 0.5 0 0.51 1 0 11.5 1 0.5 2

2 1 1 ∞

nota:

Si osservi che il guadagno è innito per r = 2 perché è il caso con FSBBconverter ideale, senza perdite e switch ideali.

3.6 Caso con FSBB converter ideale ma switch

non ideali

Ipotizziamo che gli switch debbano sottostare ai limiti di massimo e minimo diduty cycle descritti in 3.1. La Funzione ideale di continuità di guadagno quindinon può coprire alcuni intervalli:

• r < Dbucklimit

• Dbucklimit < r < 1

nota: Dbucklimit è il maggiore tra Dbuckmin e 1-Dbuckmax, perché è loswitch più vincolante, in questi casi infatti il tempo di l'accensione del è

minore di Dbuckmin

oppure maggiore di Dbuckmax

• 1 < r < 1 + Dboostlimit

• r > 1 + Dboostlimit

nota: Dboostlimit è il maggiore tra Dboostmin e 1-Dboostmax perché èlo switch più vincolante, in questi casi infatti il tempo di accensione è

minore di Dboostmin

oppure maggiore di Dboostmax

Page 28: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

18 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

t

PWM1,PWM2

t

S1,S2Tswitch

Dea

dtim

eDea

dtim

e

Dea

dtim

eDea

dtim

e

Tdelay1

Tdelay2

Tdelay1

Figura 3.5: Dead time e delay su transistor nel caso r = Dbucklimit nei due ramibuck (S1,S2)

Page 29: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.6. CASO CON FSBB CONVERTER IDEALEMA SWITCH NON IDEALI19

3.6.1 Funzione di continuità di guadagno per switch reali

Ha gli stessi vantaggi della Funzione di continuità di guadagno reale ma permettedi essere usata nel caso di switch con limitazioni di duty ratio.

La funzione ha la seguente forma:

DutyCyclebuck(r) =

0 r ≤ Dbucklimit

r Dbucklimit < r ≤ 1−Dbucklimit

m1 ∗ r − b1 1−Dbucklimit < r ≤MiddlePoint

1−Dbucklimit MiddlePoint < r ≤ 1 +Dboostlimit

1 r > 1 +Dboostlimit

(3.9)

DutyCycleboost(r) =

0 r ≤ 1−Dbucklimit

Dboostlimit 1−Dbucklimit < r ≤MiddlePoint

m2 ∗ r − b2 MiddlePoint < r ≤ 1 +Dboostlimit

r − 1 ≤ 1 +Dboostlimit < r ≤ 2−Dboostlimit

1 r > 2−Dboostlimit

(3.10)si ottiene che il guadagno ideale nel casto di switch ideali è:

Gainideal(r) =

0 r ≤ 0

r Dbucklimit < r ≤ 1−Dbucklimit

m1∗r−b11−Dboostlimit 1−Dbucklimit < r ≤MiddlePoint1−Dbucklimit1−(m2∗r−b2) MiddlePoint < r ≤ 1 +Dboostlimit

12−r 1 +Dboostlimit < r ≤ 2−Dboostlimit

11−Dboostlimit

r > 2−Dboostlimit

(3.11)

Si creano quindi due ponti di guadagno, come accennato in [8], che conferi-scono continuità nel guadagno ideale, in questo modo si evita l'errore a regimeche invece penalizzava la tecnica vista in [16].

Si devono quindi calcolare alcune incognite dato cheDboostlimit eDbucklimit

sono i maggiori tra 1 - Dmax e Dmin rimangono da calcolare

• m1, il moltiplicatore in ponte buck

• b1, l'oset in ponte buck

• m2, il moltiplicatore in ponte boost

• b2, l'oset in ponte boost

• MiddlePoint, il punto di raccordo tra i due ponti

Page 30: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

20 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

r

Gain

pon

tebuck

pon

teboost

funz b

oost

funz b

uck

Dbucklimit

MiddlePoint1 - Dbucklimit

1 + Dboostlimit

Figura 3.6: Funzione di continuità di guadagno con switch reali

Tali variabili devono essere calcolate in modo che il guadagno ideale sia continuonei punti di intersezione tra gli intervalli di validità.

Si osserva che la funzione di continuità di guadagno con switch reali produceun guadagno al variare dell'input r del tutto simile a quella reale ma cambiail minor campo di validità, visibile in gura 3.6.1 in quanto il guadagno non sispinge ad innito.

3.6.2 Calcolo coecenti m1, m2, b1, b2

Come detto prima i coecienti sono calcolati imponendo la continuità nei trepunti di connessione

• funzionamento buck con ponte buck, avviene in 1 - Dbucklimit

• ponte buck con ponte boost, avviene in MiddlePoint

• ponte boost con funzionamento boost in Dboostlimit

Importante: anche se ci sono 3 equazioni in quattro incognite procediamoal calcolo ipotizzando che MiddlePoint sia pari a 1, poi questo valore verrà

Page 31: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.6. CASO CON FSBB CONVERTER IDEALEMA SWITCH NON IDEALI21

r

Dcyclebuck

Dcycleboost

pon

tebuck

pon

teboost

funz b

oost

funz b

uck M

idPoin

t

1 - Dbucklimit

Dboostlimit

Figura 3.7: andamento buck e boost in funzione di r

calcolato dopo.r = m1∗r−b1

1−Dboostlimitr = 1−Dbucklimit

m1∗r−b11−Dboostlimit

= 1−Dbucklimit1−(m2∗r−b2)

r = MiddlePoint1−DbucklimiSt1−(m2∗r−b2)

= 12−r r = 1 +Dboostlimit

(3.12)

la soluzione porta a m1 = 1−Dboostlimit

b1 = 0

m2 = 1−Dbucklimit

b2 = 1− 2Dbucklimit

(3.13)

esempio: per fare dei conti con valori esempio prendiamo Dboostlimit =Dbucklimit = 10

m1 = 0.9

b1 = 0

m2 = 0.9

b2 = 0.8

(3.14)

Nella gura 3.7 possiamo vedere l'andamento del duty cycle buck e boost, e intabella 3.3 possiamo vedere alcuni valori signicativi preso come Dboostlimit =Dbucklimit = 0.1 .

Page 32: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

22 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

Tabella 3.3: alcuni valori della Funzione di continuità di guadagno con switchreali

r DutyCyclebuck DutyCycleboost Gainideal

-1 0 0 00.1 0.1 0 0.10.5 0.5 0 0.50.95 0.855 0.1 0.951 1 0 1

1.05 0.9 0.145 1.16951.1 1 0.1 2

1.9 1 1 10

3.6.3 calcolo MiddlePoint

Dopo aver calcolato le prime 4 variabili resta la risoluzione della variabileMiddlePointche determina dove avviene il punto di incontro tra i due ponti (buck e boost)senza violare i vincoli visti precedentemente.Ci sono due casi:

•Dbucklimit > Dboostlimit (3.15)

ricordando che

il ponte buck inizia a 1-Dbucklimit

m1 = 1 - Dboostlimit

b1 = 0

ne viene che usando come MiddlePoint 1:

Dcyclebuck(r = 1) = m1 ∗ r = 1−Dboostlimit

dove si ottiene che la condizione 3.15 è in contraddizione con il limite diduty cycle del buck come si vede nella gura 3.8, c'è infatti una violazionedel Duty cycle buck ottenibile.

•DCycleboost < Dboostlimit (3.16)

ricordando che

il ponte boost nisce a 1 + Dboostlimit

m2 = 1 - Dbucklimit

b2 = 1 - 2 * Dbucklimit

Page 33: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

3.6. CASO CON FSBB CONVERTER IDEALEMA SWITCH NON IDEALI23

r

Dcyclebuck

Dcycleboost

pon

tebuck

pon

teboost

funz b

oost

funz b

uck

1 - Dbucklimit

Dboostlimit

Figura 3.8: andamento buck e boost in funzione di r con Dboostlimit diverso daDbucklimit

si ottiene che usando come MiddlePoint 1:

Dcycleboost(r = 1) = m2 ∗ r − b2 = 1−Dbucklimit − (1− 2 ∗Dbucklimit)

Dcycleboost(r = 1) = Dbucklimit

ma se la condizione 3.16 è in atto il Dcycleboost è fuori dall'intervallo diammissibilità.

Il calcolo del MiddlePoint quindi avviene tenendo in considerazione chei campi di ammissibilità dei duty cycle non devono essere violati. Questo sitraduce nella continuità tra i due ponti anche per quanto riguarda i duty cycleoltre che per il guadagno.Dcyclebuck(MiddlePoint) = m1 ∗ r − b2 = (1−Dboostlimit) ∗MiddlePoint

Dcyclebuck(MiddlePoint) = 1−Dbucklimit

(3.17)

MiddlePoint =1−Dbucklimit

1−Dboostlimit

La correzione del MiddlePoint congiunge il duty cycle buck dei due ponti evi-tando di violare l'intervallo di ammissibilità dei duty ratio, si ottiene quindi unrisultato come in gura 3.9.

Page 34: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

24 CAPITOLO 3. COMPONENTI, LOGICA E CONTROLLO

r

Dcyclebuck

Dcycleboost

pon

tebuck

pon

teboost

funz b

oost

funz b

uck

MiddlePoint

1 - Dbucklimit

Dboostlimit

Figura 3.9: andamento buck e boost in funzione di r con Dboostlimit diverso daDbucklimit e Middlepoint corretto

Page 35: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 4

Simulazione con Simulink e

Plecs

4.1 Introduzione

La simulazione è stata svolta in Simulink con l'ausilio del pacchetto aggiuntivoPlecs.L'obiettivo della simulazione è di vericare il funzionamento della logica dicontrollo, in particolare della funzione continuità di guadagno discussa in 3.6.1.

Il modulo fotovoltaico è simulato usando un array 3D di punti del KyoceraKC200GT 3.1 con una approssimazione a cinque elementi, i moduli sono statiipotizzati identici.

La logica MPPT è sviluppata in S-function simulink, un blocco di codice inC++ a passo temporale sso.

La tensione ai capi del DCLink è simulato da una batteria in carica, ap-prossimata da un comportamento a rampa con saturazione, che ben coglie ilpassaggio da buck a boost tipico del convertitore DC-DC.

4.2 Blocco Plecs

In gura 2.2 possiamo vedere lo schema elettrico. Questo è dentro il bloccogiallo chiamato Plecs circuit nella gura 4.1.

Nello schema elettrico possiamo notare alcuni elementi:

• modulo PV

• ltro lato PV

• switch

• induttore con resistenza interna

25

Page 36: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

26 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Figura 4.1: il loop di controllo del circuito

Figura 4.2: il FSBB converter

Page 37: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.2. BLOCCO PLECS 27

Figura 4.3: la Funzione di continuità di guadagno in plecs

• ltro esterno

• batteria

4.2.1 modulo PV

Il modulo fotovoltaico è simulato da una matrice in 3 dimensioni. Questamatrice ha sui tre indici (i,j,k):

• Irraggiamento: da 0.1 a 1 kWm2 con passo 0.1 kW

m2 (10 valori)

• Temperatura: da 0 a 80 C con passo 10 C (9 valori)

• Tensione: da 0 a 40V con passo 0.1V (401 valori)

Per un totale di 10 ∗ 9 ∗ 401 = 36090 celle.

Page 38: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

28 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

1000 Wm2 25C (STC)

Potenza massima 200WVoc 32.9VIsc 8.21AVmpp 23.2VImpp 7.61A

800 Wm2 47C (NOCT)

Potenza massima 142WVoc 29.9VIsc 6.62AVmpp 23.2VImpp 6.13A

α -0.123 V/Cβ + 3.1810−3 A/C

Tabella 4.1: dati per il calcolo della matrice 3D

esempio Per restituire il valore di corrente a 26V, 0.9kW e 40C andremo aprendere la cella:

• i = 0.9−0.10.1 = 9

• j = 40−010 = 4

• k = 26−00.1 = 260

Quindi la corrente erogata a tali condizioni sarà I(9,4,260).

Irraggiamento Il modello utilizza la relazione i dati del datasheet del KC200GT.Il modello prevede una proporzionalità diretta tra corrente di corto circuito eirraggiamento, mentre è debole la dipendenza con la tensione di circuito aperto.

Isc =G ∗ IscSTCGnom

(4.1)

anche le altre correnti variano linearmente come la Isc:

Iph =G ∗ IphSTCGnom

(4.2)

Impp =G ∗ ImppSTC

Gnom(4.3)

Page 39: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.2. BLOCCO PLECS 29

Figura 4.4: Schema elettrico del modello a singolo diodo

La temperatura Il modello utilizzato prevede l'utilizzo dei fattori α e β vistinella tabella 4.1. Essi sono però riferiti a condizioni NOCT (800 W

m2 e 47C)piuttosto che a quelli STC.

Isc = Isc,NOCT (1 + α(Tcella − TNOCT )) (4.4)

dove però Tcella è come visto in [7]:

Tcella = Tamb +G(TNOCT − 20C)

GNOCT(4.5)

Modello a cinque parametri

Il modello elettrico del pannello utilizzato per simulare il modulo è quello a 5parametri, come si vede nella gura 4.4.

Nella pubblicazione [5] si mostra un confronto tra vari modelli, quello a 5parametri ha bassi errori nei quattro casi lì presi in considerazione, ed è utilizzatoin questo lavoro.

Questo modello descrive la corrente i in funzione di irraggiamento, tensionee temperatura utilizzando cinque parametri:

• Rs resistenza serie

• Rp resistenza parallelo

• Iph corrente foto generata

• η fattore di idealità

• I0

Per trovare i cinque parametri vari metodi sono stati usati:

• Metodi algebrici

Metodo esplorato da [4]

metodo esplorato da [7] (risolto con Lambertiana)

• metodi numerici

Page 40: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

30 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Metodo esplorato da [7] (Risolto Newton-Rhapson)

metodo esplorato da [3]

Una volta trovati i parametri la curva I-V è :

I = Iph − I0(ev+RsIηVt − 1)− v +RsI

Rp(4.6)

4.2.2 ltri e induttore

I ltri capacitivi e l'induttore sono dimensionati seguendo le regole viste di TexasInstrument [9].

Il dimensionamento minimo per l'induttore fornite da Texas Instrumentsono:

L1 ≥V out2min(1−DBKmin

)

0.6PmaxFsw(4.7)

L1 ≥V 2mpp(DBSTmin)

0.6PmaxFsw(4.8)

Di cui il primo è dovuto al funzionamento buck visto in gura 4.5 e il secondoè dovuto al funzionamento boost visto in gura 4.6.

Per quanto riguarda i condensatori:

Cin ≥Voutmax − Vmppmin

8F 2swL1∆vinp−p

(4.9)

Cout ≥(Vmppmin − Voutmin)Voutmin

8F 2swVmppmaxL1∆voutp−p

(4.10)

Il signicato di voutp−p e vinp−p è visibile nelle gure 4.5 e 4.6.Utilizzando i dati del Kyocera KC200GT si ottiene:

• L1 pari a 22 µH

• Cin pari a 50 µF

• Cout pari a 2.35 µF

4.2.3 Batteria

La batteria è simulata da un transitorio di carica con saturazione come in gura4.7.

L'utilizzo di un carico di questo tipo ben evidenza tra transizione buck-boost,mettendo in luce i vantaggi dell'utilizzo della funzione di continuità di guadagno

Page 41: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.2. BLOCCO PLECS 31

Figura 4.5: forme d'onda caratteristiche buck

Page 42: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

32 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Figura 4.6: forme d'onda caratteristiche boost

Page 43: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.3. PARAMETRI DI SWITCH REALI 33

Figura 4.7: transitorio di carica della batteria

descritta in 3.6.1.Infatti la VMPPT = 26.3V costringe la logica di controllo ad attraversare i dueponti di guadagno per caricare completamente la batteria.

4.3 Parametri di switch reali

Per approssimare il problema alla realtà sono stati usati degli accorgimenti:

• ritardo di accensione

• resistenza interna

ritardo di acccensione La logica che governa il ritardo di accensione è quellache si vede nella gura 4.8. Questo approssima il comportamento dello switchreale che è più lento ad accendersi che a spegnersi, secondo il datasheet delloswitch da utilizzare nel PCB nale.

Resistenza interna switch Oltre al ritardo di accensione visto sopra vieneaggiunta anche una reistenza parassita, che insieme alla resistenza interna dellabatteria e dell'induttore aiuta la convergenza del problema.

La resistenza in questo caso è 7.2 mΩ.

4.4 blocco MPPT

il blocco che si occupa di massimizzare la potenza è una S-function. La S-function è una funzione scritta in C++ che permette di utilizzare un codice

Page 44: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

34 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Figura 4.8: logica turn on delay

molto simile a quello che poi è stato implementato in arduino come logica.Inoltre simula meglio il funzionamento di un microprocessore perchè ha untempo di esecuzione discreto.

Gli algoritmi utilizzati sono:

• Tensione costante:utilizza una tensione costante calcolata basandosi sui dati per regionigeograche

• Metodo a impulsi di cortocircuito:ciclicamente il sistema misura la corrente di corto circuito e calcola laVMPPT = k ∗ ISC .

• Metodo basato sulla tensione di circuito aperto:simile al metodo di cortocircuito ma misurando la corrente di circuitoaperto.

• Metodi basati sulla temperatura:

• la temperatura varia la tensione di circuito aperto in modo signicativo,ed è quindi basata sul metodo basato sulla tensione di circuito aperto.

• Perturbe and Observe (implementata)

• l'algoritmo perturba ciclicamente la tensione del modulo:

se ∂P∂V > 0 aumenta la VPV

altrimenti diminuisce la VPV

• Incremental conductance (implementata)l'algoritmo perturba la tensione del modulo similmente al Perturbe andObserve:

se dIPVdVPV

+ IPVVPV

> 0 diminuisce la VPV

altrimenti aumenta la VPV

Page 45: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.5. CONTROLLORE PI E FUNZIONE DI TRANSIZIONE BUCK BOOST35

Figura 4.9: zone di appartenenza ecienza-costo di varie tecniche MPPT

Un confronto tra i metodi è stato eettuato nella pubblicazione [6] dove sievidenzia che le le due tecniche con migliore rapporto ecenza/costo sono P&Oe IC, come visibile nell'immagine 4.9.P&O e IC sono quindi stati implementati in quest lavoro, con risultati identici.

4.5 Controllore PI e funzione di transizione buck

boost

Il controllore PI è stato implementato insieme alla funzione di continuità diguadagno di cui parlato nel capitolo 3.6.1.

Essi sono stati inseriti in una S-function con un tempo di esecuzione piùrapido rispetto al blocco MPPT.

Questo garantisce il corretto funzionamento del codice, il PI con la funzionecontinuità di guadagno vengono eseguiti a frequenza maggiore.In particolare il blocco MPPT ha tempo di sample di 1ms, mentre la funzionecon il PI e funzione di transizione hanno una frequenza di 0.1 ms.In questo modo la S-function che comprende PI e funzione continuità di guada-gno ha 10 cicli ogni volta che l'MPPT cambia la tensione di set point.

Page 46: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

36 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Il codice Arduino in appendice C funziona con lo stesso criterio, un loopinterno col PI che va più veloce, ed un set point gestito dalla funzione MPPTche cambia più lentamente.

4.6 Risultati Simulazione

Le immagini 4.10, 4.11 e 4.12 sono state prese dagli scope della simulazione.

4.6.1 Comportamento MPPT

Come si può vedere in gura l'MPPT crea dei gradini che oscillano intorno alpunto di massima potenza previsto dal datasheet 3.1.

La Vmpp del Kyocera KC200GT è 27.6V e la curva oscilla intorno a quelpunto come si vede in gura 4.10.

4.6.2 Comportamento proporzionale integrativo

Il controllore PI segue la curva dettata dall'MPPT, anche se il cambiamento delsistema tra funzionamento buck e boost rende dicile una taratura unica, vistoche i sistemi hanno dinamiche diverse. In gura 4.11.

L'eetto di questa variazione è il cambiamento di comportamento col pas-saggio da buck a boost, i ripple sono maggiori in congurazione boost che inbuck come si vede in 4.12, inoltre la risposta al gradino ha più sovra elongazionein buck.

Il funzionamento buck e boost è completamente diverso per topologia, ecosì è la risposta nel dominio delle frequenze alle sollecitazioni del PI, la taraturatrovata è un punto di compromesso tra le due congurazioni

4.7 Conclusioni

Le immagini testimoniano che il la funzione continuità di guadagno reale fun-ziona bene sotto le condizioni della simulazione, essa riesce infatti a garantireuna buona continuità di funzionamento.

La stabilità è un punto forte dell'approccio con la funzione continuità diguadagno, nel punto più dicile, con guadagno circa 1, il PI non ha ripple nénella congurazione buck né boost. Si può osservare in tabella 4.2 che l'ecienzanei ponti buck e boost è il prodotto dell'ecienza del solo ramo buck (99%) e soloramo boost (95%), poiché in questi due casi la congurazione FSBB si comportacome un DC-DC buck e un boost in serie che funzionano contemporaneamente.Nel caso invece di FSBB senza logica di continuità di guadagno, il controlloperde un grado di libertà e questo abbassa il rendimento del convertitore, chescende al 94%, come nel caso ponti buck e boost. Ma il rendimento mediodi carica della batteria è molto superiore nel caso con continuità di guadagno,perché il funzionamento contemporaneo di buck e boost è limitato ai ponti,

Page 47: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.7. CONCLUSIONI 37

Figura 4.10: la forma d'onda dell'MPPT perturbe and observe

caso ecienza media

buck 99%boost 95%

ponte buck 94%ponte boost 94%

totale carica batteria FSBB con funzione continuità di guadagno 97%

totale carica batteria FSBB con Dboost = Dbuck 94%

Tabella 4.2: ecenza modulo PV-batteria

Page 48: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

38 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Figura 4.11: forma d'onda della tensione ai capi del modulo PV in rosso e dellabatteria in blu

Figura 4.12: forma d'onda della corrente al pannello col PI

Page 49: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

4.7. CONCLUSIONI 39

mentre nel caso di logica Dbuck = Dboost è sempre presente, aumentando leperdite di switching. Si ottiene quindi un rendimento medio di carica del 97%contro il 94%.

L'ecienza è calcolata come: η = EnergiadicaricabatteriaEnergiafornitamoduli =

∫ T0

VbatteriaIbatteriadt∫ T0

VPV IPV dt

Avendo una buona ecienza ed essendo stabile il sistema messo a puntorispetta prestazioni volute.

Page 50: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

40 CAPITOLO 4. SIMULAZIONE CON SIMULINK E PLECS

Page 51: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 5

Implementazione con Arduino

Due

5.1 Perché Arduino

Arduino è open source italiano, nato dall'idea italiana sviluppata ad Ivrea (TO).Gli schermi circuitali di Arduino sono liberi e distribuibili sotto licenza opensource. Chiunque può usarli, o modicarli a suo piacere.Anche il software di Arduino è libero e open-source, inoltre ha una viva comunitàonline che si scambia aiuti e tiene vivo il progetto.L'hardware quindi è a basso costo perché producibile da tutti, e il software ègratis perché distribuito liberamente.Una scheda Arduino è estremamente economica rispetto alle controparti close-source, costando circa 30/40 euro nel caso di Arduino Due. Un software creatocon Arduino ha il vantaggio di poter essere eseguito a basso costo anche in realtàin via di sviluppo.

5.2 Perchè Arduino Due

Alcuni modelli di Arduino sono stati presi in considerazione:

• Uno: basato su ATmega328P, con 6 PWM, 16MHz di velocità di clock

• Due : basato su Atmel SAM3X8E ARM Cortex-M3 CPUm con 12 PWM,2 DAC e 84Mhz di velocità di clock

• MEGA: basato su ATmega2560, con 15 PWM e 16 Mhz di velocità diclock

La scelta è ricaduta su Due per una serie di motivi:

• La velocità di clock superiore, meglio per un controllo ad alta velocitàdovuto al PI che controlla il sistema

41

Page 52: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

42 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

Figura 5.1: Center Allignment

Figura 5.2: Left Allignment

• le 12PWM, che sono esattamente le 4 PWM per pannello controllato.

• conserva comunque il layout dei pin di Arduino UNO, il più comune.

La frequenza di switching utilizzata in questa tesi è 200Khz, a questo risultatosi è arrivato considerando il lavoro svolto da [8], che utilizza 250Khz e da [10]che utilizza 200Khz.

Nel nostro caso la clock dell'Arduino è 84Mhz, questa frequenza non ènormalmente ottenibile con le librerie standard di Arduino (max 1Khz) maè possibile arrivare a questo risultato cambiando alcuni registri di sistema:

MaxDutyCycle =Clockfreq

PWMfrequency(5.1)

nel nostro caso una clock di 84Mhz e una PWM frequency di 200Khz risulta inuna risoluzione PWM di 420 step se la portante è Left Aligned (CALG = 0) ola metà se la portante è Center Alligned (CALG = 1) come si può vedere nelDatasheet [1]. Inoltre il prescaler della frequenza deve essere impostato al piùbasso possibile, cioè a 1.

• Center Allignment: immagine 5.1

• Left Allignment:immagine 5.2

Nel programma Arduino useremo il Center Allignment, perchè permette di sin-cronizzare l'acquisizione dell'ADC di tensione e corrente al momento in cui ilripple è zero.

Page 53: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.3. MAPPA PIN ARDUINO DUE 43

5.3 Mappa pin arduino Due

Sebbene il supporto uale di Arduino pubblicizzi 12 PWM su questo modellonon era chiaro in un primo modello quanti canali avesse questo microcontrollore.Per scoprire il reale funzionamento di Arduino Due si guarda alla sua mappadei pin. I pin numerati da Arduino sono connessi sicamente ai pin del chipSAM3X8E.I pin di SAM3X8E sono poi connessi internamente a dei multiplexer, che rendonociascun pin capace di essere collegato internamente a più periferiche.Di seguito si descrivono le principali periferiche di interesse per il presente lavoro.

Alcune periferiche di SAM3X8E

• PMC - Power managment controller (ID 5): si occupa di fornire potenzaalle diverse periferiche. Disabilita le periferiche non utilizzate in modo daminimizzare la potenza consumata dal chip.

• PIO - Parallel I/O controller (ID da 11 a 16): Si occupa di gestire le lineedi input output. Può gestire no a 32 porte (poichè il processore è 32bit).Ogni linea I/O puo essere usata come un generico I/O o assegnata ad unaperiferica in particolare. In questo modo non serve la realizzazione sicadi tutti i pin per ogni funzione di ogni periferica. In gura 5.4 la logica difunzionamento. Ogni linea I/O del controller PIO può essere usata come:

Interrupt di vario tipo

ltro dei glitch (disturbi a frequenza maggiore di una volta e mezzola frequenza di clock)

debouncing (eetto bottone)

controllo delle resistenze di pull-up

• Timer counter controller (ID da 27 a 35): è una periferica general-purpose,in grado di essere programmata per

misure di frequenza

contatore di eventi

PWM

altro

• PWM controller (ID 36): Periferica hardware per la generazione di im-pulsi. Controlla 8 canali indipendenti, ogni canale ha due output con dueonde complementari. Può congurare

Periodo onda

Duty cycle

polarità

Page 54: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

44 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

Figura 5.3: mappa delle connessioni tra i pin esterni di Arduino due con chipSAM3X8E

Page 55: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.3. MAPPA PIN ARDUINO DUE 45

Figura 5.4: Logica di funzionamento della periferica PIO

dead time

Ogni canale usa come frequenza la clock diviso per un fattore congura-bile. I canali possono essere collegati tra loro usando la sincronizzazone,in questo modo periodo, duty cycle o dead time possono aggiornati con-temporaneamente.Inoltre il controller PWM può generare interrupt quando dei valori im-postati vengono raggiunti dal contatore. Questi interrupt possono esse-re usati per sincronizzare l'acquisizione ADC o la generazione sul DACtramite l'event line.

• ADC controller (ID 37): Si occupa dell'acquisizione. Acquisisce dati suuno spettro a 12 bit.Integra un multiplexer analogico 16 in 1, capace di aquisire su 16 canalidiversi. La conversione avviene col confronto con GND e ADVREF. Lavelocità di acquisizione totale è di 2 milioni di punti per secondo, da divi-dere per il numero di linee ADC utilizzate.La conversione può essere programmata a partire da un

Trigger esterno (ADTRG)

timer counter

Event line

Page 56: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

46 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

PWM Canale Pin arduino Pin chip

PWML0 0 34 C2PWMH0 0 35 C3PWML1 1 36 C4PWMH1 1 37 C5PWML2 2 38 C6PWMH2 2 39 C7PWML3 3 40 C8PWMH3 3 41 C9PWML5 5 8 C22PWMH5 5 44 C19PWML6 6 7 C23PWMH6 6 45 C18

Tabella 5.1: Le PWM utilizzate con canali e pin

• DAC controller (ID 38): Permette la generazione di forme d'onda analo-giche. Il controllore garantisce due canali diversi indipendenti con risolu-zione a 12 bit.

Le 12PWM pubblicizzate sul sito uciale sono quindi quelle dal pin 2 al pin13. Questi pin in realtà sono connessi in parte ai pin Timer counter A e B e inparte alle PWM hardware PWML4,5,6,7.I timer counter però non hanno tutte le caratteristiche di PWM hardware cheservono per questo lavoro, ad esempio possono avere una frequenza massima di2Khz, e non rispondono all'event line. Inoltre non sono sincronizzabili. Useremoil controller PWM hardware.Poichè per utilizzare 3 moduli PV servono 12 PWM, due a due accoppiate nelproprio ramo, è utile usare gli stessi canali con PWMLx (low) e PWMHx (high),poichè sono complementari a meno del dead time programmabile. Inoltre laPWM hardware può avere frequenze molto più elevate del Timer counter.

Si osservi che non si utilizzano i canali 4, 7 e 8 perché non sono sicamen-te connessi i pin PWMH di SAM3X8E all'arduino, mentre potrebbero essereecacemente utilizzati se necessaria solo la parte low.

Page 57: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.4. CODICE ARDUINO SVILUPPATO 47

5.4 Codice Arduino sviluppato

Il codice Arduino è stato sviluppato con l'obiettivo di dimostrare la fattibilitàdi questo progetto con hardware a bassissimo costo.Per avere le prestazioni necessarie, però, bisogna fare ricorso ad un linguaggiopiù di basso livello rispetto al codice Arduino interpretato di alto livello, econgurare direttamente i registri di sistema di SAM3X8E. Inoltre per avere untempo di esecuzione del codice che rientri nei tempi di esecuzione del PI (1ms)le operazioni matematiche devono essere eseguite in interi.Infatti SAM3X8E esegue i calcoli in xed point, mentre l'uso del oating pointutilizza un codice non ottimizzato che non è eseguito abbastanza velocemente.Per il codice nelle Appendici si è utilizzato variabili long int (interi da 4 byte, 32bit, signed) che può immagazzinare valori da -32 768 a 32 767, cioè da −(215)a 215− 1.Si descrive ora il codice:

5.4.1 impostazione degli I/O

Per prima cosa è necessario abilitare i pin interessati e collegarli alle periferichenecessarie. Vengono modicati due registri:

• REG_PIOC_PDR: registro per la gestione delle periferiche I/O, disabilitail controllo da parte della periferica di I/O per rendere il pin disponibilead un altra periferica. Nel nostro caso disabilitiamo tutti i pin che devonoessere controllati dalla periferica hardware PWM.

• REG_PIOC_PDR: PIO Peripheral AB Select Register: seleziona qualeperiferica deve controllare i pin

Se il bit corrispondente al pin è 1 il pin è controllato dalla perifericaB

Se il bit corrispondente al pin è 0 il pin è controllato dalla perifericaA

La lista delle periferiche A o B associate ad ogni pin è descritta nellatabella a pagina 40 del datasheet [1]. Riporto qui i pin che interessano alne di questo lavoro nella tabella 5.2. Nel nostro caso abbiamo bisognosempre di B, quindi tutti i bit interessati dovranno essere 1.

Questo è fatto sfuttando i dene del software framework in [2]. Da nota-re che il secondo comando modica solo alcuni bit lasciando inalterati iprecedenti con l'operatore logico OR.

REG_PIOC_PDR = PIO_PDR_P2 | PIO_PDR_P3 | PIO_PDR_P4 | PIO_PDR_P5

| PIO_PDR_P6 | PIO_PDR_P7 | PIO_PDR_P8 | PIO_PDR_P9 |

PIO_PDR_P18 | PIO_PDR_P19 | PIO_PDR_P22 | PIO_PDR_P23;

Page 58: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

48 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

pin chip Periferica A Periferica B

C2 D0 PWML0C3 D1 PWMH0C4 D2 PWML1C5 D3 PWMH1C6 D4 PWML2C7 D5 PWMH2C8 D6 PWML3C9 D7 PWMH3C18 NWR0/NWE PWMH6C19 NANDOE PWMH5C22 A1 PWML5C23 A2 PWML6

Tabella 5.2: periferiche A e B ai capi del multiplexer per ogni pin

REG_PIOC_ABSR = REG_PIOC_ABSR | PIO_ABSR_P2 | PIO_ABSR_P3 |

PIO_ABSR_P4 | PIO_ABSR_P5 | PIO_ABSR_P6 | PIO_ABSR_P7 |

PIO_ABSR_P8 | PIO_ABSR_P9 | PIO_ABSR_P18 | PIO_ABSR_P19 |

PIO_ABSR_P22 | PIO_ABSR_P23;

5.4.2 Abilitazione potenza con il PMC

La periferica PMW abilita le periferische desiderate, il progetto necessita del-l'attivazione della periferica PWM:

REG_PMC_PCER1 = REG_PMC_PCER1 | PMC_PCER1_PID36;

in questo modo si modica solo il bit all'ID 36, quello del PWM.

5.4.3 Impostazione del controller PWM

Possiamo ora utilizzare tutte le feature garantite al controller PWM per unaperfetta gestione del sistema:Modichiamo questi registri:

• REG_PWM_ENA: registro che si occupa di abilitare i canali, attiva icanali 0,1,2,3,5,6, lasciando inalterati gli altri canali dello status register.Le variabili PWM_ENA_CHIDx sono denite nel software framework [2].

• REG_PWM_SCM: le PWM devono essere tutte sincronizzate con lostesso contatore in modo che non ci siano cortocircuiti o comportamen-ti anomali, infatti ricordando lo schema in gura 2.2 non si può averecontemporaneamente gli switch dello stesso ramo connessi.

Page 59: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.4. CODICE ARDUINO SVILUPPATO 49

La sincronizzazione di tutti i canali, anche quelli riguardanti i tre pan-nelli viene fatta per semplicità di esecuzione. Si usa il valore denito incomponent_pwm.h in [2].

/* -------- PWM_SCM : (PWM Offset: 0x20) PWM Sync Channels

Mode Register -------- */

#define PWM_SCM_SYNC0 (0x1u << 0)

#define PWM_SCM_SYNC1 (0x1u << 1)

#define PWM_SCM_SYNC2 (0x1u << 2)

#define PWM_SCM_SYNC3 (0x1u << 3)

#define PWM_SCM_SYNC4 (0x1u << 4)

#define PWM_SCM_SYNC5 (0x1u << 5)

#define PWM_SCM_SYNC6 (0x1u << 6)

#define PWM_SCM_SYNC7 (0x1u << 7)

Mentre il registro PWM_SCM_SYNC è fatto come in gura 5.6.

• REG_PWM_CMR0: PWM channel mode register, in questo caso so-lo del canale zero, le impostazioni si estendono agli altri canali perchèsincronizzati. Vediamo in gura 5.5 come è composto il canale.

CPRE: è il channel prescaler, come denito nel software frameworkpuò essere:

∗ PWM_CMR_CPRE_MCK - la portante ha velocità di clock

∗ PWM_CMR_CPRE_MCK_DIV_2 - velocità di clock diviso 2

∗ PWM_CMR_CPRE_MCK_DIV_4 - velocità di clock diviso 4

∗ ...

∗∗ PWM_CMR_CPRE_MCK_DIV_1024 - velocità di clock di-viso 1024

CALG: decide il center o left allignment, come descritto in 5.2 e 5.1.

CPOL: decide la polarità, cioè se la portante parte da 0 o dal mas-simo. Useremo CPOL = 0, quindi nessum bisogno di cambiare ilbit.

CES: counter event selection, se è 1 c'è un evento sul registro REG_PWM_ISRnel bit del canale interessato sia quando c'è un picco che una valledella portante.

DTE: Dead time enable, abilita il dead time software. Useremoquesto bit.

DTLI e DTHI: serve ad invertire l'output del dead time sul latoPWMH o PWML. Non serve in questo caso.

• REG_PWM_DTx : registro per la gestione del dead time.Regola il dead time per ogni canale, il dead time può essere regolato perlato PWMH e PWML indipendentemente. Nel nostro caso il nostro switch

Page 60: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

50 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

riservati

31 30 29 28 27 26 25 24

riservati

23 22 21 20 19 18 17 16

DTLI DTHI DTE

riservati

15 14 13 12 11 10 9 8

ces cpol calg

riservati

7 6 5 4 3 2 1 0

CPRE

Figura 5.5: bit del registro REG_CMRx

sync7

7 6 5 4 3 2 1 0

sync6 sync5 sync4 sync3 sync2 sync1 sync0

Figura 5.6: bit del registro SCM_SYNC

aveva bisogno di un dead time di 100ns. La formula per il calcolo delnumero di step del dead time è:

stepDT = switchDT ∗ freq (5.2)

100ns ∗ 84Mhz = 8.4 (5.3)

Nel nostro caso useremo 9 per approssimazione d'eccesso

• CPRD0: channel period register, imposta il duty cycle massimo in step,regola in sostanza la frequenza della PWM una volta che il prescaler èsettato.

MaxDutyCycle =Clockfreq

PWMfrequency ∗ 2CALG(5.4)

noi useremo CALG = 1 quindi otteniamo con 84Mhz e una frequenzadesiderata di 200khz 210 step

REG_PWM_ENA = REG_PWM_SR | PWM_ENA_CHID0 | PWM_ENA_CHID1 |

PWM_ENA_CHID2 | PWM_ENA_CHID3 | PWM_ENA_CHID5 |

PWM_ENA_CHID6;

Page 61: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.4. CODICE ARDUINO SVILUPPATO 51

REG_PWM_SCM = PWM_SCM_SYNC0 | PWM_SCM_SYNC1 | PWM_SCM_SYNC2 |

PWM_SCM_SYNC3 | PWM_SCM_SYNC5 | PWM_SCM_SYNC6; REG_PWM_CMR0

= PWM_CMR_DTE | PWM_CMR_CALG | PWM_CMR_CES |

PWM_CMR_CPRE_MCK;

REG_PWM_DT0 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

REG_PWM_DT1 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

REG_PWM_DT2 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

REG_PWM_DT3 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

REG_PWM_DT5 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

REG_PWM_DT6 = PWM_DT_DTH (9) | PWM_DT_DTL (9);

5.4.4 Event Line

L'event Line è un interrupt programmabile, esso permette di sincronizzare l'ac-quisizione dell'ADC con la PWM.Esso garantisce un acquisizione dati priva dell'errore dato dal ripple.La programmazione dell'Event line prevede la modica di alcuni registri disistema in esadecimale:

• Event Line match register :Arduino due ha due interrupt event line:

PWM_ELMR[0]

PWM_ELMR[1]

PWM ->PWM_ELMR [0] = PWM_ELMR_CSEL0 | PWM_ELMR_CSEL1;

Nel codice si usa il canale zero, che intende l'uso della Event line X con Xuguale a 0 nella gura 5.9.Il canale è impostato attivando i bit di PWM_ELMR_CSEL0 e PWM_ELMR_CSEL1,essi sono i bit che attivano il comparatore 0 e 1. Le due variabili PWM_ELMR_CSEL0e PWM_ELMR_CSEL1 valgono rispettivamente 1 e 10, e l'operazioneOR fornisce come risultato 11, che accende i due bit interessati.

Le due variabili sono state denite nel ATMEL software framework [2] nelle component_pwm.h, che viene automaticamente incluso nella compi-lazione del programma Arduino.

#define PWM_ELMR_CSEL0 (0x1u << 0)

#define PWM_ELMR_CSEL1 (0x1u << 1)

#define PWM_ELMR_CSEL2 (0x1u << 2)

#define PWM_ELMR_CSEL3 (0x1u << 3)

#define PWM_ELMR_CSEL4 (0x1u << 4)

#define PWM_ELMR_CSEL5 (0x1u << 5)

#define PWM_ELMR_CSEL6 (0x1u << 6)

#define PWM_ELMR_CSEL7 (0x1u << 7)

• REG_PWM_CMPMx: una volta impostato l'event line si può program-mare i compraratori che accendono lo stesso, questo si fa modicando ilregistro CMPM (compare match).

Page 62: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

52 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

reserved

31 30 29 28 27 26 25 24

reserved

33 32 31 30 29 28 27 26

reserved

15 14 13 12 11 10 9 8

7 6 5 4 3 2 1 0

csel7 csel6 csel5 csel4 csel3 csel2 csel1 csel0

Figura 5.7: bit del registro ELMRx

In questo caso si usa due compararatori, abilitati da CSEL0 e CSEL1,come si vede in gura 5.8 :

REG_PWM_CMPM0 = PWM_CMPM_CEN;

REG_PWM_CMPM1 = PWM_CMPM_CEN;

I comparatori disponibili sono 8, da CMPM0 a CMPM7, qui si userà soloi primi due e si lasciano gli altri bit a zero.

• REG_PWM_CMPVx: registro PWM compare value: dice a che valoredi duty cycle deve scattare l'interrupt, i bit da attivare sono in gura 5.10.

REG_PWM_CMPV0 = PWM_CMPV_CV(MaxDutyCycle);

REG_PWM_CMPV1 = PWM_CMPV_CV (1) | PWM_CMPV_CVM;

In questo modo si usa il valore denito in component_pwm.h in [2].

/* -------- PWM_CMPV : (PWM Offset: N/A) PWM Comparison 0

Value Register -------- */

#define PWM_CMPV_CV_Pos 0

#define PWM_CMPV_CV_Msk (0 xffffffu << PWM_CMPV_CV_Pos)

#define PWM_CMPV_CV(value) (( PWM_CMPV_CV_Msk & ((value) <<

PWM_CMPV_CV_Pos)))

#define PWM_CMPV_CVM (0x1u << 24)

I bit che si inseriscono nel registro di compare value quindi attivano quindil'event line quando:

Il contatore della PWM raggiunge il numero massimoCMPV_CV(MaxDutyCycle), ovvero è in picco,e sta salendo, ovveroè appena prima di inziare a scendere (CMPV_CMV = 0), il cheavviene sempre a metà di un ripple.

Page 63: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.4. CODICE ARDUINO SVILUPPATO 53

reserved

31 30 29 28 27 26 25 24

23 22 21 20 19 18 17 16

CUPRCNT CUPR

15 14 13 12 11 10 9 8

CPCNT CPR

reserved

7 6 5 4 3 2 1 0

CTR CEN

Figura 5.8: bit del registro CMPMx

Figura 5.9: logica event line

il contatore della PWM è al minimo (1) ed è in discesa (CMV=1),cioè ha appena toccato il minimo scendendo e sta per incominciare arisalire. Il caso con funzionamento buck si può vedere nelle immagini5.11.

5.4.5 Controller ADC

Rimane solo il controller ADC da settare.

• ADC_MR: ADCmode register: Basta usare ADC_TRIG_PWM_EVENT_LINE_0,che è stata dichiarata nel software framework di atmel [2].

#define ADC_TRIG_PWM_EVENT_LINE_0 ADC_MR_TRGSEL_ADC_TRIG4 |

ADC_MR_TRGEN ,

Page 64: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

54 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

reserved

31 30 29 28 27 26 25 24

CVM

23 22 21 20 19 18 17 16

CV

15 14 13 12 11 10 9 8

CV

7 6 5 4 3 2 1 0

CV

Figura 5.10: bit del registro CMPVx

in sostanza quindi il comando

lascia al minimo settling time, start up time, transfer time e tracktime(tutto a zero)

mette il prescaler a zero (massima velocità di acquisizione ad 1Mhzmultiplexato)

lascia a 12 bit la risoluzione(massima)

lascia lo sleep disattivato, cioè pronto ad acquisire

disabilita il fast wake up, non necessario dato che SLEEP è 0

abilita il trigger hardware

usa come trigger l'event line 0 (TRIG4)

• REG_ADC_CHER: ADC channel enable register, abilita i canali utiliz-zati per l'ADC, che sono 2,3,4,5,6,7 sicamente nei pin da A0 ad A5.

PinArduino canale utilizzo

A0 7 tensione 1A1 6 corrente 1A3 5 tensione 2A4 4 corrente 2A5 3 tensione 3A6 2 corrente 3

Tabella 5.3: pin e utilizzi nel programma degli ADC

Page 65: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

5.4. CODICE ARDUINO SVILUPPATO 55

Figura 5.11: eetto trigger con event line

Page 66: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

56 CAPITOLO 5. IMPLEMENTAZIONE CON ARDUINO DUE

35 34 33 32 31 30 29 28

useq transfter tracktim

23 22 21 20 19 18 17 16

anach settling startup

15 14 13 12 11 10 9 8

PRESCAL

7 6 5 4 3 2 1 0

freerun fwup sleep lowres trgsel trgen

Figura 5.12: bit del registro ADC_MR

// configure ADC

REG_ADC_MR = ADC_TRIG_PWM_EVENT_LINE_0; // enable hardware

trigger , select the trigger PWM event line 0 and keep 12

bits

REG_ADC_CHER = ADC_CHER_CH2 | ADC_CHER_CH3 | ADC_CHER_CH4 |

ADC_CHER_CH5 | ADC_CHER_CH6 | ADC_CHER_CH7; // enable ADC

from ch7 to ch2

5.5 Conclusioni

Il codice sopra descritto è stato utilizzato per le prove sperimentali nel capitolo6. Le porzioni di programma nelle appendici A e B sono state prima testateindividualmente e ne è stato provato il corretto funzionamento.Il software messo a punto consente di controllare tre moduli fotovoltaici contem-poraneamente e ottimizzarne la potenza. Questo garantisce un minor bisognodi hardware per un impianto con molti moduli.Le caratteristiche di Arduino Due sono state comunque approfondite e potreb-bero essere usate per altre applicazioni di elettronica di potenza con pochemodiche, ad esempio:

• inverter

• Generatore d'onda (usando la periferica DAC)

• Scope per onde sinusoidali no ad 1MHz

Page 67: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 6

Risultati sperimentali

6.1 Componenti setup

Poichè il PCB nale su cui verranno raccolti i risultati ha ricevuto ritardi ilsistema è stato testato con delle soluzioni semplicate. Il setup sperimentale haprevisto:

• Arduino DUE

• induttore da 1mH

• switch LN298N

• carico resistivo

• terraSAS PV simulator

• LEM LV-25P sensore di tensione isolato ad eetto Hall

• LEM LA-25NP sensore di corrente isolato ad eetto Hall

Il setup si è limitato ad un convertitore buck con MPPT per un solo pannellosimulato, purtroppo le caratteristiche del LN298N hanno bloccato grandementele possibilità.

6.1.1 TerraSAS

Il TerraSAS è un simulatore di curva I-V. Con un computer collegato in LANè possibile impostare la curva che si vuole, con una caratteristica del PV apiacimento.Inoltre è possibile impostare dei transitori di irraggiamento.

6.1.2 Induttore 1mH

Induttore ceramico ad alta corrente.

57

Page 68: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

58 CAPITOLO 6. RISULTATI SPERIMENTALI

Corrente primaria nominale 10mArange di corrente 0 ± 14 mAtensione di alimentazione ± 15Vcorrente secondaria nominale 25mArapporto di conversione 2.5

Tabella 6.1: Alcuni dati di LEM LV25-P

6.1.3 LEM LV 25-P

Il LEM LV 25-P è un sensore di tensione isolato ad eetto Hall. Il datasheet delmodulo è [12]. Dal Datasheet si possono leggere alcuni importanti particolari,presenti anche nella tabella 6.1.

Il sensore funziona nel seguente modo: al primario necessita di una resi-stenza che garantisca una corrente nominale di 10mA.In questo caso la tensionenominale da misurare sarà quella di massima potenza del pannello (anche se si-mulato da TerraSAS).Riprendendo il Datasheet del pannello 3.1 Vmpp = 26.3V.Si arrotondi a 25V la tensione di lettura nominale.

Rprimario =VletturaNom

InomSens(6.1)

Utilizzando i dati si ottiene:

Rprimario =25V

10mA= 25kΩ (6.2)

Quando ci sono 25V ai capi del primario sul secondario si legge una correntedi 25mA.Calcoliamo quindi la resistenza sul secondario, in modo che la tensione sul pindell'ADC sia minore di 3V (l'arduino non sopporta più di 3.3V).

VletturaMax = Rsecondario ∗ IsecondarioMax = Rsecondario ∗ 2.5 ∗ VMaxPrimario

Rprimario

(6.3)Usiamo ora come VMaxPrimario 50V, poichè la Voc del pannello è 32.V.Ne viene che:

Rsecondario =VletturaMax

2.5 ∗ VMaxPrimarioRprimario

= 600Ω (6.4)

Inne il rapporto tra tensione misurata e tensione letta sul pin è:

Klettura = 2.5 ∗ Rsecondario

Rprimario= 0.06 = 6% (6.5)

Nota bene: è importante usare resistenze con basso errore, come quelle allo0.5% o inferiori (quinto anello sulla resistenza Verde,blu, viola o grigio).

Page 69: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.1. COMPONENTI SETUP 59

Corrente nominale primario 25ARange di misura 0 ± 36ACorrente nominale secondario 25mATensione di alimentazione ± 15Vrapporto di conversione 1:1000

Tabella 6.2: Datasheet LEM LA25-NP

numero rami 4Tensione massima 50VTensione operativa massima 46Vcorrente massima per ramo 2A massimo 4A totaliTurn o delay 1.5 µs T1Fall time 0.2 µs T2Turn on delay 2 µs T3Rise time 0.7 µs T4Frequenza massima 40kHz

Tabella 6.3: Alcuni dati dal datahseet di L298N

6.1.4 LEM LA 2-NP

Sensore di corrente isolato ad eetto Hall. Il datasheet del modulo è [11]. DalDatasheet vediamo alcuni importanti particolari nella tabella 6.2.

Il sensore non è adeguato al ne di garantire la massima precisione nell'in-tervallo di misurazione di questo lavoro, poiché dal datahseet del pannello 3.1la corrente di corto circuito è molto minore della corrente nominale, ma verràutilizzato lo stesso. Il sensore necessita di una resistenza al secondario:

Rsecondario =VMaxPin

IMaxPrimario1000

(6.6)

Sapendo che VMaxPin è 3V e prendendo IMaxPrimario come 8A , Rsecondario

è 375 Ω. Ma poiché in laboratorio non era presente una simile resistenza sonostati usati 400Ω.

Nota bene: nella realtà in laboratorio questi valori sono stati sostituiti dadelle prove sul banco, inoltre per limiti sici riguardanti il modulo ST L298N lacorrente massima usata sarà meno di 4A, quindi la taratura sarà diversa.

6.1.5 ST microelectronics L298N

L'L298N è un H-bridge da modellismo, molto economico, dalle cattive proprietàma pur sempre utile per essere usato come buck converter a basse frequenze. IlDatasheet può essere trovato a [17], alcuni valori salienti possono essere trovatinella tabella 6.3.

Page 70: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

60 CAPITOLO 6. RISULTATI SPERIMENTALI

Figura 6.1: Schema elettrico h-bridge L298N

Figura 6.2: signicato delay, rise e fall del L298N

Page 71: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.2. PRIMA PROVA DEAD TIME 61

Figura 6.3: Foto allo scope nella prova col dead time

6.2 Prima prova Dead time

Il primo test è stato eettuato a circuito aperto, per provare il corretto funzio-namento del dead time. In questo caso il codice usa un Dead time di 9 step,consono con il funzionamento dello switch al ne di avere 100ns di dead time.Si osservi che nell'immagine 6.3 ogni quadrato è 1µs, il dead time è di 100ns ele onde si invertono perfettamente. La frequenza in questo caso era 200kHz, eArduino la raggiunge senza problemi, segno che i registri di sistema sono statimodicati correttamente. Nell'appendice A si può vedere il codice.Il codice utilizza un ciclo while che aumenta e diminuisce il duty ratio su tuttii canali utilizzando una funzione del tipo denti di sega.Il duty ratio è scritto nel registro REG_PWM_CDTYx. Si osservi che alcunevolte nel codice vengono usati i valori esadecimali scritti nel formato 0xFFFFFF.Questo formato è del tutto indierente a quello analizzato nel capitolo 5 ma nonutilizza i #dene del software framework [2].

Sono stati usati tutti i canali disponibili della periferica PWM hardware einne si ottiene la forma d'onda desiderata in gura 6.3 .

Page 72: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

62 CAPITOLO 6. RISULTATI SPERIMENTALI

6.3 ADC sincronizzato

Dopo aver testato il funzionamento del solo dead time in appendice A è statoprovato un circuito RC con un controllore PI e acquisizione dati con ADC adalta frequenza.

Un primo test è stato fatto utilizzando l'impostazione FREERUN del registroADC_MR 5.12.

La funzione FREERUN non utilizza trigger per abilitare la conversione. L'u-nica accortezza è quella di aspettare che la FLAG ADC_EOCx (ADC end ofconversion). Inoltre i dati non potevano essere trasmessi tramite seriale:

6.3.1 Trasmissione per seriale su arduino

La trasmissione Seriale su arduino può avvenire con diversi baudrate:

• 9600

• 14400

• 19200

• 28800

• 38400

• 57600

• 115200

• 500000

Il Baudrate è la velocità di trasmissione al secondo di impulsi, ovvero dibit. La comunicazione nel monitor Seriale di Arduino avviene in ASCII, questolimita fortemente la velocità. Infatti per trasmettere numeri questo protocolloutilizza caratteri che occupano sempre un byte.6.4.

Una lettura tipica in ADC infatti è un numero intero che va da 0 a 4095(12bit) e nisce con un newline ad ogni valore, si utilizzano quindi 5 byte perogni valore.

Ad un Baudrate di 500k potremmo trasmettere:

NumLetture =BaudRate

8 bitbyte ∗ 5 byte

lettura

= 12500letture

secondo(6.7)

La velocità di trasmissione quindi è insuciente per gestire due milioni di lettureal secondo possibili col FREERUN. I valori quindi vengono salvati in memoria(96KB SRAM) e mandati alla ne delle conversioni.

Page 73: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.3. ADC SINCRONIZZATO 63

carattere numero b10 numero in b20 48 001100001 49 001100012 50 001100103 51 00110011.. .. ..9 57 00111001newline 10 00001010

Tabella 6.4: Alcuni valori in ASCII e in binario per una trasmissione tipica

Figura 6.4: Acquisizione di un onda da 500Khz

Figura 6.5: Acquisizione di un onda da 100Khz

Page 74: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

64 CAPITOLO 6. RISULTATI SPERIMENTALI

Si osservi che il registro FREERUN garantisce una frequenza di acquisizioneappena inferiore ad 1 Mhz, infatti il tempo di sample diventa 0.53 µs.

Questo vuol dire che L'Arduino due potrebbe essere usato come scope conun campionamento 2 M Sample/s. Altre onde misurate dopo hanno confermatoil corretto funzionamento. Le gure in questione sono 6.5 e 6.4.

Secondo il Teorema del campionamento di Nyquist-Shannon quindi

Teorema di Nyquist-Shannon Data una funzione la cui trasformata di Fou-rier sia nulla al di fuori di un certo intervallo di frequenze (ovvero un segnalea banda limitata), nella sua conversione analogico-digitale la minima frequen-za di campionamento necessaria per evitare aliasing e perdita di informazionenella ricostruzione del segnale analogico originario (ovvero nella riconversionedigitale-analogica) è pari al doppio della sua frequenza massima.

Massima frequenza Quindi potrebbe essere registrata una sinusoide con unafrequenza che sia la la metà di quella di campionamento. Dato che il tempo dicampionamento è 0.53 µs possiamo vedere che:

fmax =2

Tcamp=

2

0.53µs= 1.88MHz (6.8)

I risultati sono in linea col datasheet, quindi il corretto funzionamento delmodulo ADC è confermato.

Page 75: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.4. PI CON CIRCUITO RC 65

Figura 6.6: forma d'onda con un circuito RC e una PWM a 200kHz

6.4 PI con circuito RC

Il modo più semplice di provare un primo semplice controllore di tipo propor-zionale integrativo (PI) è un piccolo circuito RC.Lo schema elettrico prevede un circuito RC su cui si misura la tensione sulcondensatore con l'ADC. Questo codice è anche un corretto test dell'event line.

I test rivelano un certo errore di lettura dell'ADC, infatti esiste un pin cheè riferimento per la tensione di lettura (ADVREF o AREF in gura 5.3) su cuinon era stata imposta nessuna tensione, e la normale caduta di potenziale delcavo USB introduce un errore di lettura. Inoltre i collegamenti fatti con normalijumper provocano cadura di tensione ulteriore.

Calcoli oating point è molto importante al ne delle prestazioni dell'Ardui-no utilizzare numeri interi per i conti. Il processore ARM infatti non supportanativamente le operazioni tra oating point, rendendo questi calcoli estrema-mente lenti. Bisogna quindi lavorare con gli interi per raggiungere prestazioniconsone con un PI a 200kHz, utilizzando dei fattori moltiplicativi per non per-dere precisione nei calcoli. Anche le operazioni in xed point sarebbero più lentee meno precise dei calcoli con interi.Il risultato nale in gura 6.6 conferma il buon funzionamento dei calcoli anchead alta frequenza. La parte più dicile è quella di tarare il PI in modo da averela miglior risposta possibile. La taratura del PI è stata eettuata a tentativi sulbanco di prova.

Page 76: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

66 CAPITOLO 6. RISULTATI SPERIMENTALI

Figura 6.7: Tensione a cavallo dello switch, corrente nell'induttore e segnalePWM

6.5 PI con buck converter

Testato il buon funzionamento con un circuito RC è necessario provare un PIcon buck converter. Come vedremo nei prossimi paragra la limitazione piùgrande è data dal cattivo funzionamento dei moduli H bridge L298N [17].

ST L298N Questo modulo è creato per guidare un motore passo passo, cheha bisogno solo di moderata precisione di controllo rispetto al problema quiarontato. Le tensioni sugli switch hanno molte instabilità come si può vederein gura 6.9.

Instabilità Per migliorare la stabilità del sistema introduciamo uno snubber.Questo si occupa di abbattere le alte frequenze date da una risonanza di tipoltro RLC date dalle induttanze e capacitò parassite.

Lo snubber abbatte le alte frequenze a ridosso dell'accensione e spegnimentoma non agisce contro le basse frequenze che si manifestano quando la correnteche attraversa lo switch aumenta. In questo caso il problema è la bassa qualitàdei gate driver.

Page 77: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.5. PI CON BUCK CONVERTER 67

Figura 6.8: circuito elettrico snubber nel caso buck e boost

6.5.1 Snubber

I valori della resistenza e capacità da utilizzare si scelgono in base alla τ dellafrequenza da abbattere.

La frequenza da abbattere è calcolata sullo scope, quindi si ottengono i valoridi R e di C sapendo che:

fdump =1

2πRC(6.9)

Si calcola quindi la frequenza del picco (7.2Mhz in questo caso). Si aggiungesolo una condensatore in parallelo aumentando capacità dello stesso anché lafrequenza diminuisca del 30% (5 Mhz).

In questo specico caso il valore della capacità trovato è di 100 pF. Si calcolapoi la resistenza:

Rsnubber =1

2πfdump= 221Ω (6.10)

Il risultato è visibile nella gura 6.9, anche la corrente sulla resistenza dicarico perde oscillazioni di alta frequenza. Purtroppo le oscillazioni più a bassafrequenza date dal gate driver persistono.

6.5.2 Risposta all'impulso

Una volta migliorata la risposta dello switch si procede alla taratura del PI. Lataratura iniziale è avvenuta col metono di Ziegler-Nichols.

Page 78: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

68 CAPITOLO 6. RISULTATI SPERIMENTALI

Figura 6.9: Prima e dopo l'applicazione dello snubber

Page 79: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.6. PI CON BOOST CONVERTER 69

metodo di Ziegler-Nichols

Inizialmente si testa la risposta solo proporzionale (Ki = 0) e aumentando laKp si trova il punto in cui il sistema inizia a oscillare. Una volta raggiuntoil guadagno limite Kplim si calcola il periodo di oscillazione Tosc e si applica icalcoli in tabella:

Kp Ki

0.45 KplimKplim

2Tosc

Da questo punto in poi la taratura è avvenuta per tentativi, poiché la correntesull'induttore ha degli overshoot dovuti alla dinamica del sistema.Un controllo migliore prevederebbe un doppio controllore PI in cascata, di cuiil loop interno governi la corrente sull'induttore e l'esterno la tensione modulo.In gura 6.10 Ki in valori crescenti, che passa da essere sotto smorzato a sovrasmorzato.

6.6 PI con boost converter

A questo punto è stato fatto un tentativo con il ramo boost. I risultati nonsono stati molto confortanti n da subito, mostrando importanti limitazionidel L298N in funzionamento boost. Il gate driver ha un funzionamento bruscoma ancora consono per basse correnti (100mA) in gura 6.11 , ma il compor-tamento è inaccettabile quando la corrente aumenta, al limite tecnico di 1Ada datasheet, come in gura 6.12, dove diventa completamente inutilizzabile,rendendo instabile anche la forma d'onda della corrente.

In questo caso lo snubber non era stato ancor aggiunto, ma questo puòcompensare solo i disturbi ad alta frequenza in prossimità di accensioni e spe-gnimenti, mentre per i disturbi a bassa frequenza non hanno alcuna inuenza.

Si decide quindi di non proseguire col funzionamento buck boost masolo col funzionamento buck, dati i limiti tecnici del L298N.

Page 80: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

70 CAPITOLO 6. RISULTATI SPERIMENTALI

Figura 6.10: La risposta al gradino di tensione con diversi valori di Ki

Page 81: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.6. PI CON BOOST CONVERTER 71

Figura 6.11: risposta in modalità boost a bassa corrente (100mA)

Figura 6.12: risposta in modalità boost ad alta corrente (1A)

Page 82: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

72 CAPITOLO 6. RISULTATI SPERIMENTALI

Voc 32.9VIsc 0.5AVmpp 26.3Potenza massima 12.18W

Tabella 6.5: I dati di targa del pannello ttizio usato per i test con TerraSAS

6.7 MPPT con buck converter

Si utilizza come generatore il TerraSas PV simulator. Le curve impostate nellostesso sono modicate per rientrare nei parametri di funzionamento del moduloL298N, limitando fortemente la corrente di corto circuito.

I dati di targa utilizzati per questo esperimento sono gli stessi del 3.1 mala corrente di corto circuito viene diminuita, come visto infatti nei capitoliprecedenti la corrente disturba molto la forma d'onda.

L'algoritmo di MPPT utilizzato qui di seguito è il Perturbe and Observe,ma sarebbe identico il comportamento utilizzando l'incremental conductance.Sorge un limite di precisione del TerraSAS.

6.7.1 PV simulator

Il PV simulator ha problemi a gestire tensioni e correnti così piccole, infattiè stato creato per gestire no a 1000V, ma è soprattutto la bassa corrente adessere critica. Sebbene i dati di targa con una corrente di cortocircuito inferioread 1A ci sono dei malfunzionamenti che fanno schizzare il terraSAS fuori dallacurva, portando alla rottura dei moduli.Il funzionamento corretto avviene solo per alcuni minuti, Arduino correttamenteporta la tensione a quella di MPPT, ma il TerraSAS alcune volte esce dalla curvaI-V impostata, portando alla rottura uno per uno di tutti i moduli.I tempi di ripresa di una perturbazione in irraggiamento sono dell'ordine dei 5secondi, il codice funziona bene, ma non sono state possibili ulteriori prove conmaggiori dati raccolti per danneggiamento dei moduli.

Nell'immagine 6.14 si può vedere l'arduino andare correttamente a conver-genza quando la curva PV ha una Voc di 20V e una Isc di 0.5A.

6.8 Conclusioni

Non è stato possibile provare oltre, ma l'Arduino Due e il software qui sviluppatosi sono rivelati funzionanti nei test eettuati a giudicare dalle forme d'onda negliscope visti sopra. Si può visionare il codice in Appendice C, che è stato creatoper un futuro setup ad alta frequenza e corrente.Il setup ha dimostrato di funzionare bene nei casi trattati, dal caso di semplicedead time al caso di controllo di un MPPT con buck converter.In particolare nel caso di MPPT con buck converter la tensione del modulo

Page 83: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

6.8. CONCLUSIONI 73

Figura 6.13: Il pannello di controllo di Terrasas, collegato in LAN al computer

Page 84: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

74 CAPITOLO 6. RISULTATI SPERIMENTALI

Figura 6.14: convergenza dell'arduino alla tensione di MPPT

oscillava correttamente nell'intorno della VMPP .Il lavoro fatto n qui testimonia la fattibilità e le grandi prospettive di Arduinonell'elettronica di potenza. Questo microcontrollore infatti può confrontarsi conaltri microcontrollori di costo più elevato.L'unica pecca di Arduino è la dicoltà per progetti ad alte prestazioni percolpa di un software (Arduino IDE) pensato più per hobbisti che professionisti.Questo permette di fare velocemente azioni semplici ma rende estremamentedicoltoso i progetti più avanzati.

Page 85: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Capitolo 7

Conclusione, contributo e

sviluppi futuri

7.1 Conclusione

Questa tesi presenta l'implementazione del controllo di un ottimizzatore di po-tenza. I suddetti dispositivi permettono di migliorare la resa energetica deimoduli fotovoltaici, nel caso di questo lavoro le scelte di congurazione, topolo-gia e logica di controllo sono state eettuate al ne di avere un alto rendimentosenza rinunciare alla essibilità di guadagno. I vantaggi della congurazioneFour switch buck boost (FSBB) rispetto alle altre tipologie sono stati mostrati,e la suddetta ore i vantaggi cercati. La topologia infatti utilizza solo un ramoper volta fuori dai citati ponti buck e boost, mentre altri convertitori come ilbuck-boost incrementano le perdite di switching, nel caso della congurazionebuck-boost a 4 interruttori, oppure sono invertenti, come nel caso a 2 inter-ruttori. Ma la topologia FSBB può garantire il guadagno vicino all'unità coninterruttori reali solo con l'uso della funzione continuità di guadagno, e nel-la letteratura alcune tecniche sono state mostrate ma mai spiegate nella loroesecuzione ed applicabilità. Questo lavoro fornisce una nuova implementazionefacile da inserire in un programma, descrivendo accuratamente la costruzionedella stessa e il calcolo dei parametri m1,b1,m2 e b2 a partire dal datasheet degliinterruttori. Questa è in seguito avallata con l'ausilio del software Simulink ePlecs. Le simulazioni confermano la stabilità di risposta intorno al guadagnounitario ed il sistema conserva un buon rendimento anche nei ponti di guadagno.Il codice Arduino è poi scritto sulla base delle scelte di congurazione, lo studioapprofondito dello stesso conduce alla scrittura del codice per massimizzarne lepotenzialità. Il micro controllore rivela la capacità di acquisire dati ad 1 milio-ne di punti per secondo con l'ADC, di avere una periferica PWM in grado dioperare a 500Khz nel caso di una risoluzione di 168 step (circa 0.6% per step) ela presenza di un event line per che permette l'utilizzo i progetti di elettronicadi potenza avanzati potendo sincronizzare PWM e acquisizione dati o periferica

75

Page 86: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

76 CAPITOLO 7. CONCLUSIONE, CONTRIBUTO E SVILUPPI FUTURI

DAC per generazione onde. Questa potenzialità di Arduino Due non è disponi-bile con un normale utilizzo, ma lo è a coloro i quali utilizzano linguaggio di piùbasso livello. I test in laboratorio confermano l'alta potenzialità di Due, il codi-ce produce risultati sperati nelle prove fatte, no ad un corretto funzionamentodi un completo ottimizzatore con MPPT Perturbe and Observe utilizzando unsimulatore PV connesso tramite buck converter.Non è stato però possibile approfondire il funzionamento con convertitore FSBBe utilizzare alte frequenze (200kHz) per problemi tecnici agli interruttori.

7.2 Contributo e sviluppi futuri

Si annoverano in particolare due contributi innovativi di questo lavoro: il primoè la nuova implementazione e formalizzazione della funzione continuità di gua-dagno. Questa può essere utilizzata per risolvere i limiti degli interruttori realinell'intorno dell'unità perdendo un punto percentuale di rendimento solo nellezone ponte di guadagno. Si rende quindi vantaggioso l'utilizzo del convertitoreFSBB in tutti i quei casi in cui il rendimento, la essibilità e la polarità sianofattori decisivi. Il secondo contributo è lo studio approfondito dell'hardware inesame e il codice Arduino in appendice, questo svela nuove possibili applica-zioni economiche ad alta frequenza e prestazioni, come la creazione di inverter,generatori d'onda e acquisizione dati no ad 2MSample/s, possibili con pochemodiche al software qui prodotto.

Page 87: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Appendice A

codice arduino solo DeadTime

#define MaxDutyCycle 1050

int i = (60 * MaxDutyCycle) / 100;

void setup ()

pwmc_setup ();

Serial.begin (9600);

void loop()

while (true)

REG_PWM_CDTY0 = i; //duty ratio of pin 34( direct) and 35 (

inverted)

REG_PWM_CDTY1 = i; //duty ratio of pin 36( direct) and 37 (

inverted)

REG_PWM_CDTY2 = i; //duty ratio of pin 38( direct) and 39 (

inverted)

REG_PWM_CDTY3 = i; //duty ratio of pin 40( direct) and 41 (

inverted)

REG_PWM_CDTY4 = i; //duty ratio of pin 9 (only direct)

REG_PWM_CDTY5 = i; //duty ratio of pin 8( direct) and 44(

inverted)

REG_PWM_CDTY6 = i; //duty ratio of pin 7( direct) and 45 (

inverted)

REG_PWM_CDTY7 = i; //duty ratio of pin 6 (only direct)

delay (100);

void pwmc_setup ()

// Configure PWM channels 0,1,2,3,5,6 (PWML0 ,PWMH0 ,PWML1 ,PWMH1 ,

PWML2 ,PWMH2 ,PWML5 ,PWMH5 ,PWML6 ,PWMH6),

//(port C2,C3,C4,C5,C6 ,C7,C8 ,C9,C22 ,C19 ,C23 ,C18), (pins

34,35,36,37,38,39,40,41,8,44,7,45)

REG_PIOC_PDR = 0x1EC03FC; // B1111011000000001111111100 , PIO

Disable Register (from PC2 to PC9 , or better from pin 34

to 41 and pin 6,7,8,9,44,45 as P24 ,P23 ,P22 ,P21 ,P19 ,P18)

REG_PIOC_ABSR = REG_PIOC_ABSR | 0x1EC03FCu; //

B1111011000000001111111100 , Peripheral AB Select Register

from P2 to P9 and P24 ,P23 ,P22 ,P21 ,P19 ,P18

77

Page 88: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

78 APPENDICE A. CODICE ARDUINO SOLO DEADTIME

REG_PMC_PCER1 = REG_PMC_PCER1 | 16; // Peripheral Clock Enable

Register 1 (activate clock for PWM , id36 , bit5 of

PMC_PCSR1)

REG_PWM_ENA = REG_PWM_SR | B11111111; //PWM Enable Register |

PWM Status Register (activate channels 0,1,2,3,4,5,6,7)

REG_PWM_SCM = 0xFF; // syncronizing all the channels

REG_PWM_CMR0 = 0x00100; // Channe0 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR1 = 0x00100; // Channe1 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR2 = 0x00100; // Channe2 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR3 = 0x00100; // Channe3 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR4 = 0x00100; // Channe4 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR5 = 0x00100; // Channe5 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR6 = 0x00100; // Channe6 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_CMR7 = 0x00100; // Channe7 Mode Register: Dead Time

Enable DTE =1; 0 on the central bit is the left allignment

(1 for central allignment)

REG_PWM_DT0 = 0x090009; // Channe0 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML0 ,PWMH0 , be carefull ,

the value is in HEX , so 255 steps would be 0xFF00FF ,

first two for dropping DT, last two for rising DT)

REG_PWM_DT1 = 0x090009; // Channe1 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML1 ,PWMH1)

REG_PWM_DT2 = 0x090009; // Channe2 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML2 ,PWMH2)

REG_PWM_DT3 = 0x090009; // Channe3 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML3 ,PWMH3)

REG_PWM_DT4 = 0x090009; // Channe4 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for output PWML4)

REG_PWM_DT5 = 0x090009; // Channe5 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML5 ,PWMH5)

REG_PWM_DT6 = 0x090009; // Channe6 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for outputs PWML6 ,PWMH6)

REG_PWM_DT7 = 0x090009; // Channe7 Dead Time Register (100ns *

84MHz = 8.4 ~ 9 step for output PWML7)

REG_PWM_CPRD0 = MaxDutyCycle; // Channe0 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD1 = MaxDutyCycle; // Channe1 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD2 = MaxDutyCycle; // Channe2 Period Register (84 mhz

/420=200 kHz)

Page 89: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

79

REG_PWM_CPRD3 = MaxDutyCycle; // Channe3 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD4 = MaxDutyCycle; // Channe4 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD5 = MaxDutyCycle; // Channe5 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD6 = MaxDutyCycle; // Channe6 Period Register (84 mhz

/420=200 kHz)

REG_PWM_CPRD7 = MaxDutyCycle; // Channe7 Period Register (84 mhz

/420=200 kHz)

Page 90: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

80 APPENDICE A. CODICE ARDUINO SOLO DEADTIME

Page 91: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Appendice B

Codice Arduino per buck

converter con PI, con L298N

//PI variables

#define KpCurrent 600 // *1e-3

#define KiCurrent 350000 // *1e-3

#define KpVoltage 10 // *1e-3

#define KiVoltage 200000 // *1e-3

// System variables

#define radiation 10 //W/m2

#define max_windup 1900000 //*1e-6

#define min_windup 100000 //*1e-6

#define RvIN 3500 //ohm of the resistor of the voltage sensor(

before the sensor). should be equal to Vmax /10mA

#define Rv 100//ohm of the resistor of the voltage sensor(close

to the pin). Should be VmaxPin /25mA

#define Vmax 40 //Volts of maximum voltage mesurable

#define Ri 100 //ohm of the resistor of the current sensor.

Should be fixed

#define CurrentMultiplier 1000 // multiplier of current

mesurement , should be 1000

#define Ni 3 // number of times the wire goes into the current

sensor , should be the floor of (VmaxPin * 1000)/( ImaxIN * Ri

)

#define AnalogResolution 4095 // maximum value on analog read , 2^

bits - 1

#define MaxDutyCycle 1050 //max duty cycle to have 84MHz / 1050

= 80 kHz or half if CALG on PWM_CMRx is enabled

#define pinEnable 48 //pin for the enabler

// variable initialization

unsigned long previousMicros = 0;

long int Vo, Io, readVo , readIo;

long int propLEGv , propLEGi;

long int inV , inI; // initialization PI values

long int intLEGv = 0;

long int intLEGi = 0;

long int outPIv = 0;

long int outPIi = 0;

81

Page 92: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

82APPENDICE B. CODICE ARDUINO PER BUCK CONVERTER CON PI, CON L298N

long int Ts = 50; // microseconds

int setPointV = 75000; // Voltage in mV beyond the DC/DC

//DC DC coupling variables

int Dbuck; //0-MaxDutyCycle pwm output

int Dboost; //0-MaxDutyCycle output

void setup()

Serial.begin (500000);

Serial.println("start");

// configure GPIO port DACC 0 and 1 PWM ch 0 and 1

REG_PIOC_PDR = PIO_PDR_P2 | PIO_PDR_P3 | PIO_PDR_P4 | PIO_PDR_P5

; // PIO Disable Register ,PC2 ,3,4,5 (PWM ch 0,1)

REG_PIOC_ABSR = REG_PIOC_ABSR | PIO_ABSR_P2 | PIO_ABSR_P3 |

PIO_ABSR_P4 | PIO_ABSR_P5 ;; // Peripheral AB Select Register

for PC2 ,3,4,5

REG_PMC_PCER1 = REG_PMC_PCER1 | PMC_PCER1_PID36 |

PMC_PCER1_PID37; // Peripheral Clock Enable Register 1 (

activate clock for PWM id36 and ADC id37)

// Configure PWM channels 0,1 (PWML0 ,PWMH0 ,PWML1 ,PWMH1)

REG_PWM_ENA = REG_PWM_SR | PWM_ENA_CHID0 | PWM_ENA_CHID1; //PWM

Enable Register | PWM Status Register (activate channels

0,1)

REG_PWM_SCM = PWM_SCM_SYNC0 | PWM_SCM_SYNC1; // syncronizing ch0

and 1

REG_PWM_DT0 = PWM_DT_DTH (0) | PWM_DT_DTL (0); // Channel 0 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML0 ,PWMH0)

REG_PWM_DT1 = PWM_DT_DTH (0) | PWM_DT_DTL (0); // Channel 1 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML0 ,PWMH0)

REG_PWM_CPRD0 = MaxDutyCycle; // Channel0 Period Register (84mhz

/420=200 kHz), in sync it is the same for all the channels

REG_PWM_CMR0 = PWM_CMR_DTE | //Dead Time Enable DTE

PWM_CMR_CALG | //and center allignment(CALG)

PWM_CMR_CES | // Counter event selection for up and down position

PWM_CMR_CPRE_MCK; // master clock without prescaler

REG_PWM_CDTY0 = MaxDutyCycle / 2;

REG_PWM_CDTY1 = MaxDutyCycle / 2;

//Event line settings

PWM ->PWM_ELMR [0] = PWM_ELMR_CSEL0 | PWM_ELMR_CSEL1; // PWM_ELMR0

register , comparator 1 and 2 on PWM event line 0

REG_PWM_CMPM0 = PWM_CMPM_CEN; // comparison channel 0 enable on

the event line

REG_PWM_CMPM1 = PWM_CMPM_CEN; // comparison channel 1 enable on

the event line

REG_PWM_CMPV0 = PWM_CMPV_CV(MaxDutyCycle);// comparator value for

the trigger and trigger on rising on comprarison ch0

REG_PWM_CMPV1 = PWM_CMPV_CV (1) | PWM_CMPV_CVM;// comparator value

for the trigger on falling on comprarison ch1

// configure ADC

REG_ADC_MR = ADC_TRIG_PWM_EVENT_LINE_0; // enable hardware

trigger , select the trigger PWM event line 0 and keep 12

bits

REG_ADC_CHER = ADC_CHER_CH0 | ADC_CHER_CH1; // enable ADC on pin

A7 and A6, ch0 and ch1

void loop()

Page 93: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

83

while (true) //to save 2 microseconds every cycle

if (micros () - previousMicros >= Ts) //fixed time

previousMicros = micros ();

// reading values on the PV panel

while (( REG_ADC_ISR & ADC_ISR_EOC0) == 0); // wait for

conversion flag on ch0

readVo = ADC ->ADC_CDR [0]; //get the value from A7, the

voltage

readVo = (readVo * 2915) / 4095 + 560; //gain and offset

of ADC adjust

Vo = (readVo * Vmax * 1000) / AnalogResolution; //law for

the LM voltage sensor *1e-3

while (( REG_ADC_ISR & ADC_ISR_EOC1) == 0); // wait for

conversion flag on ch1

readIo = ADC ->ADC_CDR [1]; //get the value from A6, the

current

readIo = (readIo * 2915) / 4095 + 560; //gain and offset

of ADC adjust

Io = (readIo * CurrentMultiplier * 1000) / (Ri * Ni *

AnalogResolution); //law for the current sensor *1e-3

for LM

//Io = (readIo * 10 * 1000) / AnalogResolution; //mA,

simplified law

//PI voltage

inV = setPointV - Vo; // calculate the error at the PI (*1e

-3)

propLEGv = inV * KpVoltage; // proportional leg (*1e-6)

if (outPIv < min_windup || outPIv > max_windup)

intLEGv = intLEGv;

else

intLEGv = (KiVoltage * Ts * inV) / 1000000 + intLEGv; //

*1e-6

outPIv = propLEGv + intLEGv; // *1e-6

//PI current

inI = outPIv - Io; // calculate the error at the PI (*1e-3)

propLEGi = inI * KpCurrent; // proportional leg (*1e-6)

if (outPIi < min_windup || outPIi > max_windup)

intLEGi = intLEGi;

else

intLEGi = (KiCurrent * Ts * inI) / 1000000 + intLEGi; //

*1e-6

outPIi = propLEGi + intLEGi; // *1e-6

// switching function 1st

//Dbuck Dboost , coupling the buck boost for 4 switch

if (outPIi < 100000)

Dbuck = (100000 * MaxDutyCycle) / 1000000; //10% buck

Dboost = 0;

else if (outPIi < 900000) // *1e-6

Dbuck = (outPIi * MaxDutyCycle) / 1000000;

Dboost = 0;

else if (outPIi < 1000000) //*1e-6

Dbuck = (outPIi - 90000) * MaxDutyCycle / 1000000;

Dboost = (100000 * MaxDutyCycle) / 1000000; //10% boost

Page 94: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

84APPENDICE B. CODICE ARDUINO PER BUCK CONVERTER CON PI, CON L298N

else if (outPIi < 1100000) //*1e-6

Dbuck = (900000 * MaxDutyCycle) / 1000000; //90% buck

Dboost = (outPIi - 900000) * MaxDutyCycle / 1000000;

else if (outPIi < 1900000) //*1e-6

Dbuck = MaxDutyCycle; //100% buck

Dboost = (outPIi - 1000000) * MaxDutyCycle / 1000000;

else

Dbuck = MaxDutyCycle; //100% buck

Dboost = (900000 * MaxDutyCycle) / 1000000; // 90% boost

REG_PWM_CDTY0 = Dbuck;

REG_PWM_CDTY1 = Dboost;

Page 95: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Appendice C

Codice Arduino per PCB

completo, 3 PV

#define Vstep 100 // *1e-3 volts

#define Kp 5 // *1e-3

#define Ki 10000 // *1e-3

#define max_windup 1900000 //*1e-6

#define min_windup 100000 //*1e-6

#define RvIN 3500 //ohm of the resistor of the voltage sensor(

before the sensor). should be equal to Vmax /10mA

#define Rv 100//ohm of the resistor of the voltage sensor(close

to the pin). Should be VmaxPin /25mA

#define Vmax 35 //Volts of maximum voltage mesurable

#define Ri 100 //ohm of the resistor of the current sensor.

Should be fixed

#define CurrentMultiplier 1000 // multiplier of current

mesurement , should be 1000

#define Ni 3 // number of times the wire goes into the current

sensor , should be the floor of (VmaxPin * 1000)/( ImaxIN * Ri

)

#define AnalogResolution 4095 // maximum value on analog read , 2^

bits - 1

#define MaxDutyCycle 210 //max duty cycle to have 84MHz / 420 =

200 kHz or half if CALG on PWM_CMRx is enabled

#define pinEnable 48 //pin for the enabler

//MPPT variables

const long interval = 50; // interval at which to change mppt

voltage (milliseconds)

unsigned long previousMillis = 0;

unsigned long previousMicros = 0;

long int Vmpp1 = 23500; //first target voltage , the Vmppt at 0.1

kw/m2 (*1e-3)

long int Vold1 = 23400; // initialization voltage (*1e-3)

long int Iold1 = 0;

long int Vmpp2 = 23500; //first target voltage , the Vmppt at 0.1

kw/m2 (*1e-3)

long int Vold2 = 23400; // initialization voltage (*1e-3)

long int Iold2 = 0;

85

Page 96: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

86 APPENDICE C. CODICE ARDUINO PER PCB COMPLETO, 3 PV

long int Vmpp3 = 23500; //first target voltage , the Vmppt at 0.1

kw/m2 (*1e-3)

long int Vold3 = 23400; // initialization voltage (*1e-3)

long int Iold3 = 0;

long int Vo1 , Io1 , DV1 , DI1 , readVo1 , readIo1 , Vo2 , Io2 , DV2 ,

DI2 , readVo2 , readIo2 , Vo3 , Io3 , DV3 , DI3 , readVo3 , readIo3;

//PI variables

long int propLEG1 , propLEG2 , propLEG3;

long int in1; // initialization PI values

long int intLEG1 = 0;

long int outPI1 = 1000000;

long int in2; // initialization PI values

long int intLEG2 = 0;

long int outPI2 = 1000000;

long int in3; // initialization PI values

long int intLEG3 = 0;

long int outPI3 = 10000000;

long int Ts = 20; // microseconds

//DC DC coupling variables

int Dbuck1 , Dbuck2 , Dbuck3; //0-MaxDutyCycle pwm output

int Dboost1 , Dboost2 , Dboost3; //0-MaxDutyCycle output

unsigned long Micros = 0;

// enabler

volatile int enable = LOW;

void setup()

// Configure PWM channels 0,1,2,3,5,6 (PWML0 ,PWMH0 ,PWML1 ,PWMH1 ,

PWML2 ,PWMH2 ,PWML5 ,PWMH5 ,PWML6 ,PWMH6),

//(port C2,C3,C4,C5,C6 ,C7,C8 ,C9,C22 ,C19 ,C23 ,C18), (pins

34,35,36,37,38,39,40,41,8,44,7,45)

REG_PIOC_PDR = PIO_PDR_P2 | PIO_PDR_P3 | PIO_PDR_P4 | PIO_PDR_P5

| PIO_PDR_P6 | PIO_PDR_P7 | PIO_PDR_P8 | PIO_PDR_P9 |

PIO_PDR_P18 | PIO_PDR_P19 | PIO_PDR_P22 | PIO_PDR_P23;

//PIO Disable Register (from PC2 to PC9 , or better from pin 34

to 41 and pin 7,8,9,44,45 as P23 ,P22 ,P21 ,P19 ,P18)

REG_PIOC_ABSR = REG_PIOC_ABSR | PIO_ABSR_P2 | PIO_ABSR_P3 |

PIO_ABSR_P4 | PIO_ABSR_P5 | PIO_ABSR_P6 | PIO_ABSR_P7 |

PIO_ABSR_P8 | PIO_ABSR_P9 | PIO_ABSR_P18 | PIO_ABSR_P19 |

PIO_ABSR_P22 | PIO_ABSR_P23;

// Peripheral AB Select Register from P2 to P9 and P23 ,P22 ,P19 ,

P18

REG_PMC_PCER1 = REG_PMC_PCER1 | PMC_PCER1_PID36; // Peripheral

Clock Enable Register 1 (activate clock for PWM , id36 of

PMC_PCSR1)

REG_PWM_ENA = REG_PWM_SR | PWM_ENA_CHID0 | PWM_ENA_CHID1 |

PWM_ENA_CHID2 | PWM_ENA_CHID3 | PWM_ENA_CHID5 |

PWM_ENA_CHID6;

//PWM Enable Register | PWM Status Register (activate channels

0,1,2,3,5,6)

PWM ->PWM_ELMR [0] = PWM_ELMR_CSEL0 | PWM_ELMR_CSEL1; // PWM_ELMR0

register , comparator 1 and 2 on PWM event line 0

REG_PWM_CMPM0 = PWM_CMPM_CEN; // comparison channel 0 enable on

the event line

REG_PWM_CMPM1 = PWM_CMPM_CEN; // comparison channel 1 enable on

the event line

REG_PWM_CMPV0 = PWM_CMPV_CV(MaxDutyCycle);// comparator value for

the trigger and trigger on rising

Page 97: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

87

REG_PWM_CMPV1 = PWM_CMPV_CV (1) | PWM_CMPV_CVM;// comparator value

for the trigger on falling

REG_PWM_SCM = PWM_SCM_SYNC0 | PWM_SCM_SYNC1 | PWM_SCM_SYNC2 |

PWM_SCM_SYNC3 | PWM_SCM_SYNC5 | PWM_SCM_SYNC6; //

syncronizing all the channels

//PWM ->PWM_ELMR [0] = PWM_ELMR_CSEL0; // PWM_ELMR0 register ,PWM

event line 0, on PWM ch0

REG_PWM_CMR0 = PWM_CMR_DTE | PWM_CMR_CALG | PWM_CMR_CES |

PWM_CMR_CPRE_MCK;

//all channels Mode Register: Dead Time Enable DTE;Counter event

selection(CES) for up and down position and center

allignment(CALG)

REG_PWM_DT0 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 0 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML0 ,PWMH0)

REG_PWM_DT1 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 1 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML1 ,PWMH1)

REG_PWM_DT2 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 2 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML2 ,PWMH2)

REG_PWM_DT3 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 3 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML3 ,PWMH3)

REG_PWM_DT5 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 5 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML5 ,PWMH5)

REG_PWM_DT6 = PWM_DT_DTH (9) | PWM_DT_DTL (9); // Channel 6 Dead

Time Register (100ns * 84MHz = 8.4 ~ 9 step for outputs

PWML6 ,PWMH6)

REG_PWM_CPRD0 = MaxDutyCycle; //all channels Period Register (84

mhz /420=200 kHz)

//end pwmc configuration

// configure ADC

REG_ADC_MR = ADC_TRIG_PWM_EVENT_LINE_0; // enable hardware

trigger , select the trigger PWM event line 0 and keep 12

bits

REG_ADC_CHER = ADC_CHER_CH2 | ADC_CHER_CH3 | ADC_CHER_CH4 |

ADC_CHER_CH5 | ADC_CHER_CH6 | ADC_CHER_CH7; // enable ADC

from ch7 to ch2

//end of ADC configuration

attachInterrupt(pinEnable , changestatus , RISING); // enabler

Serial.begin (250000);

void loop()

while (enable == LOW) //wait for the enabler

previousMillis = millis (); //to avoid problems of time due the

disabled enabler

Page 98: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

88 APPENDICE C. CODICE ARDUINO PER PCB COMPLETO, 3 PV

previousMicros = micros (); //to avoid problems of time due the

disabled enabler

while (true) //to save 2 microseconds every cycle

if (micros () - previousMicros >= Ts)

previousMicros = micros ();

// reading values on the 1st PV panel

//while ((ADC ->ADC_ISR & ADC_ISR_EOC7) == 0); // wait for

conversion of A0

readVo1 = ADC ->ADC_CDR [7]; //get the value from A0, the voltage

Vo1 = (readVo1 * Vmax * 1000) / AnalogResolution; //law for the

voltage sensor *1e-3

//while ((ADC ->ADC_ISR & ADC_ISR_EOC6) == 0); // wait for

conversion of A1

readIo1 = ADC ->ADC_CDR [6]; //get the value from A1, the current

Io1 = (readVo1 * CurrentMultiplier * 1000) / (Ri * Ni *

AnalogResolution); //law for the current sensor *1e-3

// reading values on the 2nd Pv panel

//while ((ADC ->ADC_ISR & ADC_ISR_EOC5) == 0); // wait for

conversion of A2

readVo2 = ADC ->ADC_CDR [5]; //get the value from A2, the voltage

Vo2 = (readVo2 * Vmax * 1000) / AnalogResolution; //law for the

voltage sensor *1e-3

//while ((ADC ->ADC_ISR & ADC_ISR_EOC4) == 0); // wait for

conversion of A3

readIo2 = ADC ->ADC_CDR [4]; //get the value from A3, the current

Io2 = (readVo2 * CurrentMultiplier * 1000) / (Ri * Ni *

AnalogResolution); //law for the current sensor *1e-3

// reading values on the 3rd Pv panel

//while ((ADC ->ADC_ISR & ADC_ISR_EOC3) == 0); // wait for

conversion of A4

readVo3 = ADC ->ADC_CDR [3]; //get the value from A4, the voltage

Vo3 = (readVo3 * Vmax * 1000) / AnalogResolution; //law for the

voltage sensor *1e-3

//while ((ADC ->ADC_ISR & ADC_ISR_EOC2) == 0); // wait for

conversion of A5

readIo3 = ADC ->ADC_CDR [2]; //get the value from A5, the current

Io3 = (readVo3 * CurrentMultiplier * 1000) / (Ri * Ni *

AnalogResolution); //law for the current sensor *1e-3

Serial.println(readIo3);

//MPPT

if (millis () - previousMillis >= interval)

previousMillis = millis () + interval;

//MPPT 1st

DV1 = Vo1 - Vold1; //*1e-3

DI1 = Io1 - Iold1; //*1e-3

if (DV1 * DI1 >= 0) // perturbe and observe MPPT

Vmpp1 = Vmpp1 + Vstep; //*1e-3

else

Vmpp1 = Vmpp1 - Vstep; //*1e-3

Vold1 = Vo1; //*1e-3

Iold1 = Io1; //*1e-3

// Serial.println(Vmpp1); // show the new voltage target

//MPPT 2nd

DV2 = Vo2 - Vold2; //*1e-3

DI2 = Io2 - Iold2; //*1e-3

Page 99: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

89

if (DV2 * DI2 >= 0) // perturbe and observe MPPT

Vmpp2 = Vmpp2 + Vstep; //*1e-3

else

Vmpp2 = Vmpp2 - Vstep; //*1e-3

Vold2 = Vo2; //*1e-3

Iold2 = Io2; //*1e-3

// Serial.println(Vmpp2); // show the new voltage target

//MPPT 3rd

DV3 = Vo3 - Vold3; //*1e-3

DI3 = Io3 - Iold3; //*1e-3

if (DV3 * DI3 >= 0) // perturbe and observe MPPT

Vmpp3 = Vmpp3 + Vstep; //*1e-3

else

Vmpp3 = Vmpp3 - Vstep; //*1e-3

Vold3 = Vo3; //*1e-3

Iold3 = Io3; //*1e-3

// Serial.println(Vmpp3); // show the new voltage target

//PI 1st

in1 = Vmpp1 - Vo1; // calculate the error at the PI (*1e-3)

propLEG1 = in1 * Kp; // proportional leg (*1e-6)

if (outPI1 < min_windup || outPI1 > max_windup)

intLEG1 = intLEG1;

else

intLEG1 = (Ki * Ts * in1) / 1000000 + intLEG1; // *1e-6

outPI1 = propLEG1 + intLEG1; // *1e-6

// Serial.println(outPI1); //for debugging

//PI 2nd

in2 = Vmpp2 - Vo2; // calculate the error at the PI (*1e-3)

propLEG2 = in2 * Kp; // proportional leg (*1e-6)

if (outPI2 < min_windup || outPI2 > max_windup)

intLEG2 = intLEG2;

else

intLEG2 = (Ki * Ts * in2) / 1000000 + intLEG2; // *1e-6

outPI2 = propLEG2 + intLEG2; // *1e-6

// Serial.println(outPI1); //for debugging

//PI 3rd

in3 = Vmpp3 - Vo3; // calculate the error at the PI (*1e-3)

propLEG3 = in3 * Kp; // proportional leg (*1e-6)

if (outPI3 < min_windup || outPI3 > max_windup)

intLEG3 = intLEG3;

else

intLEG3 = (Ki * Ts * in3) / 1000000 + intLEG3; // *1e-6

outPI3 = propLEG3 + intLEG3; // *1e-6

// Serial.println(outPI3); //for debugging

// switching function 1st

Page 100: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

90 APPENDICE C. CODICE ARDUINO PER PCB COMPLETO, 3 PV

//Dbuck Dboost , coupling the buck boost for 4 switch

if (outPI1 < 100000)

Dbuck1 = (100000 * MaxDutyCycle) / 1000000; //10% buck

Dboost1 = 0;

else if (outPI1 < 900000) // *1e-6

Dbuck1 = (outPI1 * MaxDutyCycle) / 1000000;

Dboost1 = 0;

else if (outPI1 < 1000000) //*1e-6

Dbuck1 = (outPI1 - 90000) * MaxDutyCycle / 1000000;

Dboost1 = (100000 * MaxDutyCycle) / 1000000; //10% boost

else if (outPI1 < 1100000) //*1e-6

Dbuck1 = (900000 * MaxDutyCycle) / 1000000; //90% buck

Dboost1 = (outPI1 - 900000) * MaxDutyCycle / 1000000;

else if (outPI1 < 1900000) //*1e-6

Dbuck1 = MaxDutyCycle; //100% buck

Dboost1 = (outPI1 - 1000000) * MaxDutyCycle / 1000000;

else

Dbuck1 = MaxDutyCycle; //100% buck

Dboost1 = (900000 * MaxDutyCycle) / 1000000; // 90% boost

// Serial.println(Dboost1); //for debugging

// Serial.println(Dbuck1); //for debugging

// switching function 2nd

//Dbuck Dboost , coupling the buck boost for 4 switch

if (outPI2 < 100000)

Dbuck2 = (100000 * MaxDutyCycle) / 1000000; //10% buck

Dboost2 = 0;

else if (outPI2 < 900000) // *1e-6

Dbuck2 = (outPI2 * MaxDutyCycle) / 1000000;

Dboost2 = 0;

else if (outPI2 < 1000000) //*1e-6

Dbuck2 = (outPI2 - 90000) * MaxDutyCycle / 1000000;

Dboost2 = (100000 * MaxDutyCycle) / 1000000; //10% boost

else if (outPI2 < 1100000) //*1e-6

Dbuck2 = (900000 * MaxDutyCycle) / 1000000; //90% buck

Dboost2 = (outPI2 - 900000) * MaxDutyCycle / 1000000;

else if (outPI2 < 1900000) //*1e-6

Dbuck2 = MaxDutyCycle; //100% buck

Dboost2 = (outPI2 - 1000000) * MaxDutyCycle / 1000000;

else

Dbuck2 = MaxDutyCycle; //100% buck

Dboost2 = (900000 * MaxDutyCycle) / 1000000; // 90% boost

// switching function 3rd

//Dbuck Dboost , coupling the buck boost for 4 switch

if (outPI3 < 100000)

Dbuck3 = (100000 * MaxDutyCycle) / 1000000; //10% buck

Dboost3 = 0;

else if (outPI3 < 900000) // *1e-6

Dbuck3 = (outPI3 * MaxDutyCycle) / 1000000;

Dboost3 = 0;

else if (outPI3 < 1000000) //*1e-6

Dbuck3 = (outPI3 - 90000) * MaxDutyCycle / 1000000;

Dboost3 = (100000 * MaxDutyCycle) / 1000000; //10% boost

else if (outPI3 < 1100000) //*1e-6

Dbuck3 = (900000 * MaxDutyCycle) / 1000000; //90% buck

Dboost3 = (outPI3 - 900000) * MaxDutyCycle / 1000000;

Page 101: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

91

else if (outPI3 < 1900000) //*1e-6

Dbuck3 = MaxDutyCycle; //100% buck

Dboost3 = (outPI2 - 1000000) * MaxDutyCycle / 1000000;

else

Dbuck3 = MaxDutyCycle; //100% buck

Dboost3 = (900000 * MaxDutyCycle) / 1000000; // 90% boost

REG_PWM_CDTY0 = Dbuck1;

REG_PWM_CDTY1 = Dboost1;

REG_PWM_CDTY2 = Dbuck2;

REG_PWM_CDTY3 = Dboost2;

REG_PWM_CDTY5 = Dbuck3;

REG_PWM_CDTY6 = Dboost3;

// Serial.println(Dbuck1);

void changestatus ()

enable = !enable;

Page 102: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

92 APPENDICE C. CODICE ARDUINO PER PCB COMPLETO, 3 PV

Page 103: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Bibliograa

[1] Atmel. Atmel smart arm-based mcu da-tasheet. http://www.atmel.com/Images/

Atmel-11057-32-bit-Cortex-M3-Microcontroller-SAM3X-SAM3A_

Datasheet.pdf.

[2] Atmel. Atmel software framework. http://asf.atmel.com/docs/3.7.

2/sam.applications.getting-started.arduino_due_x/html/files.

html.

[3] Hayrettin Can and Damla Ickilli. Parameter estimation in modeling ofphotovoltaic panels based on datasheet values. Journal of Solar EnergyEngineering, 136(2):021002, 2014.

[4] Daniel SH Chan and Jacob CH Phang. Analytical methods for the ex-traction of solar-cell single-and double-diode model parameters from ivcharacteristics. 1987.

[5] Alberto Dolara, Sonia Leva, and Giampaolo Manzolini. Comparison ofdierent physical models for pv power output prediction. Solar Energy,119:8399, 2015.

[6] Roberto Faranda and Sonia Leva. Energy comparison of mppt techniquesfor pv systems. WSEAS transactions on power systems, 3(6):446455, 2008.

[7] Nicola Femia, Giovanni Petrone, Giovanni Spagnuolo, and Massimo Vitelli.Power electronics and control techniques for maximum energy harvestingin photovoltaic systems. CRC press, 2012.

[8] Richard K Hester, Christopher Thornton, Sairaj Dhople, Zheng Zhao, Na-garajan Sridhar, and Dave Freeman. High eciency wide load range buc-k/boost/bridge photovoltaic microconverter. In Applied Power Electro-nics Conference and Exposition (APEC), 2011 Twenty-Sixth Annual IEEE,pages 309313. IEEE, 2011.

[9] Texas Instrument. An-2124 power circuit design for solarmagic sm3320.=http://www.ti.com/lit/an/snosb84c/snosb84c.pdf , 2011.

93

Page 104: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

94 BIBLIOGRAFIA

[10] M. Kasper, D. Bortis, and J. W. Kolar. Classication and comparative eva-luation of pv panel-integrated dcdc converter concepts. IEEE Transactionson Power Electronics, 29(5):25112526, May 2014.

[11] LEM. Lem la 25-np current sensor, 2016.

[12] LEM. Lem lv 25-p voltage sensor. http://datasheet.octopart.com/

LV-25-P-LEM-datasheet-14709094.pdf, 2016.

[13] W. M. Lin, C. M. Hong, and C. H. Chen. Neural-network-based mppt con-trol of a stand-alone hybrid power generation system. IEEE Transactionson Power Electronics, 26(12):35713581, Dec 2011.

[14] M. Orellana, S. Petibon, B. Estibals, and C. Alonso. Four switch buck-boost converter for photovoltaic dc-dc power applications. In IECON 2010- 36th Annual Conference on IEEE Industrial Electronics Society, pages469474, Nov 2010.

[15] British Petroleum. Bp statistical review ofworld energy. http://www.bp.com/content/dam/

bp/pdf/energy-economics/statistical-review-2016/

bp-statistical-review-of-world-energy-2016-full-report.pdf,2016.

[16] Xiaoyong Ren, Zhao Tang, Xinbo Ruan, Jian Wei, and Guichao Hua. Fourswitch buck-boost converter for telecom dc-dc power supply applications. InApplied Power Electronics Conference and Exposition, 2008. APEC 2008.Twenty-Third Annual IEEE, pages 15271530, Feb 2008.

[17] ST. St l298n datasheet. http://www.st.com/content/ccc/resource/

technical/document/datasheet/82/cc/3f/39/0a/29/4d/f0/

CD00000240.pdf/files/CD00000240.pdf/jcr:content/translations/

en.CD00000240.pdf, 2016.

[18] K. Sun, L. Zhang, Y. Xing, and J. M. Guerrero. A distributed control stra-tegy based on dc bus signaling for modular photovoltaic generation systemswith battery energy storage. IEEE Transactions on Power Electronics,26(10):30323045, Oct 2011.

[19] Georey R Walker and Paul C Sernia. Cascaded dc-dc converter con-nection of photovoltaic modules. IEEE transactions on power electronics,19(4):11301139, 2004.

Page 105: Ottimizzatori di potenza per fotovoltaico integrati nei ... · del codice Arduino per implementare il controllo simulato. Il funzionamento del software e hardware Arduino viene illustrato

Aknowlegments

I would rst like to thank my thesis advisor Prof. Sonia Leva of the Dipartimentodi Energia at Politecnico di Milano. She followed my work from the other sideof the world and helped me consistently with my writing with her experience.

Then I would like to thank my supervisor at UNSW Dr. Mihai Ciobotaru,he picked me for this amazing opportunity, his door was always open wheneverI ran into a trouble spot or had a question about my research. He believed inme and showed me the beauty of research.

I would also like to thank Mr. Leonardo Callegaro, Mr. Milad Momayyezanand Dr. Lorand Bede, I've been helped by them everyday, and are friends tome.

Thanks to the whole AERI group, they treated me as equal.

Finally, I must express my very profound gratitude to my parents and to mygirlend Grazia for providing me with unfailing support and continuous encou-ragement throughout my years of study and through the process of researchingand writing this thesis. This accomplishment would not have been possiblewithout them.

Thank you.

95