Controler de Incarcare a Acumulatorilor din Energii Regenerabile, cu Algoritm Mppt

Bibliografie

ADRIAN TURTUREANU – Chimie generală, Editura ULB Sibiu 2004

ALI EMADI, ALIREZA KHALIGH, ZHONG NIE, YOUNG JOO LEE – Integrated Power Electronic Converters and Digital Control, Editura Taylor and Francis Group, 2009

ARPAD KELEMEN, MARIA IMECS – Electronică de putere, Editura Didactică și Pedagogică București

BERILIU ILIE – Microcontrolere, Note de curs

BERILIU ILIE – Semnale și sisteme, Note curs

E. VUTHCHHAY, C. BUNLAKSANANUSORN – Modeling and Control of a Zeta Converter, IEEE 2010 International Power Electronics Conference

EDMOND NICOLAU – Măsurări electrice și electronice

FLORIN IONESCU, JEAN-PAUL SIX și colectiv – Electronică de putere și convertoare statice, Editura Tehnică

FRANCISC TOROK – Electronică de putere, Note curs

FRED STEVENS – Getting started with PIC microcontrollers, Copyright (1997) A. L. Stevens

HORIA FALOTĂ – Surse regenerabile de energie, Note de curs

IOAN P. MIHU – Dispozitive și circuite electronice volumul II, editura Alma Mater Sibiu 2005

MIT ELECTRIC VEHICLE TEAM – A Guide to Understanding Battery Specifications, December 2008

Power Electronic in 40 lessons – curs Indian Institute of Technologies Kharagpur

TIM WILMSHURST – Design embedded system with pic microcontroller, second edition, Elsevier Ltd. 2012

http://en.wikipedia.org/wiki/Solar_power_tower

http://www.logwell.com/tech/components/resistor_values.html

http://ww1.microchip.com/downloads/en/AppNotes/01332B.pdf

http://www.ti.com/lit/an/slyt372/slyt372.pdf

http://www.exar.com/common/content/document.ashx?id=1251

http://www.hamill.co.uk/pdfs/ciabfbb_.pdf

http://www.scubaengineer.com/documents/lead_acid_battery_charging_graphs.pdf

Codul sursă

#include <xc.h>

#include <stdint.h>

#include "lcd_hd44780_pic16.h"

#include "myutils.h"

#include "custom_char.h"

#define LCD_DATA_PORT PORT(LCD_DATA)

#define LCD_DATA_TRIS TRIS(LCD_DATA)

#define LCD_E PORTBIT(LCD_E_PORT,LCD_E_POS)

#define LCD_E_TRIS TRISBIT(LCD_E_PORT,LCD_E_POS)

#define LCD_RS PORTBIT(LCD_RS_PORT,LCD_RS_POS)

#define LCD_RS_TRIS TRISBIT(LCD_RS_PORT,LCD_RS_POS)

#define LCD_RW PORTBIT(LCD_RW_PORT,LCD_RW_POS)

#define LCD_RW_TRIS TRISBIT(LCD_RW_PORT,LCD_RW_POS)

#define SET_E() (LCD_E=1)

#define SET_RS() (LCD_RS=1)

#define SET_RW() (LCD_RW=1)

#define CLEAR_E() (LCD_E=0)

#define CLEAR_RS() (LCD_RS=0)

#define CLEAR_RW() (LCD_RW=0)

#ifdef LCD_TYPE_162

#define LCD_TYPE_204

#endif

#ifdef LCD_TYPE_202

#define LCD_TYPE_204

#endif

#define I_IN_max 8*5/1024

#define I_OUT_max 8*5/1024

#define U_IN_min 9*5/1024

#define 12Volt 14,5*5/1024

#define 6Volt 7,2*5/1024

#define Led_in RC4

#define Led_out RC5

#define Buton_set RC6

#define Buton_plus RC7

#define Buton_minus RA5

#define On 0

#define Off 1

uint24_t NCOINC = 0;

uint8_t fifty_percent = 0;

uint16_t I_in;

uint16_t U_in:

uint16_t I_out;

uint16_t U_out;

uint32_t P_in;

uint32_t P_out;

uint32_t delta_P;

uint16_t delta_Duty_Cycle;

uint16_t Duty_Cycle;

uint16_t old_Duty_Cycle=0;

uint32_t old_P=0;

uint16_t U_out_calc;

string text;

Void Init_Port ()

void InitNCO();

void Init_ADC ();

unsigned int Get_ADC_Value (unsigned int Channel);

void FadeUp(void);

void FadeDown(void);

void main(void)

{

Void Init_Port ()

void InitNCO();

void Init_ADC ();

LCDInit(LS_NONE)//cursorul nu este vizibil

While (Buton_set!=On)

{

LCDWriteString("Apasă butonul select")

}

While (Buton_set!=On)

{

LCDWriteString("Selectează tensiunea de iesire din butoanele + -")

if (Buton_plus==On)

{

LCDWriteString("12 V”)

uint16_t U_out_calc=12volt;

}

if (Buton_minus==On)

{

LCDWriteString("6 V”)

uint16_t U_out_calc=12volt;

}

}

I_in= Get_ADC_Value(6);

U_out= Get_ADC_Value(7);

I_out= Get_ADC_Value(1);

U_in= Get_ADC_Value(2);

While(1)

{

While (I_in<I_IN_max&&I_out<I_OUT_max&&U_in<U_IN_min)

{

P_out=I_out*U_out;

P_in=I_in*U_in;

delta_P=P_out-old_P;

old_P=P_out;

delta_Duty_Cycle=Duty_Cycle-old_Duty_Cycle;

old_Duty_Cycle=Duty_Cycle;

if (delta_P>0)

{

if (delta_Duty_Cycle>=0)FadeDown();

else FadeUp();

}

else

{

if (delta_Duty_Cycle>=0)FadeUp ();

else FadeDown();

}

if(Duty_cycle>62) Duty_cycle=62;

if(Duty_cycle<28) Duty_cycle=28;

}

}

}

if(Duty_Cycle > 50)//setează variabila fifty_precent pe 1 dacă Duty_Cycle, factorul de umlere>50

fifty_percent = 1;

else

fifty_percent = 0;//setează variabila fifty_precent pe 1 altfel

NCOCalc();//calculează valoare ieșirii

while(1)//Bucla infinită

{

}

}

Void Init_Port ()

{

LATA = 0x00;

TRISA = 0x3F;

ANSELA = 0x17;

WPUA = 0x00;

LATB = 0x00;

TRISB = 0xF0;

ANSELB = 0x30;

WPUB = 0x00;

LATC = 0x00;

TRISC = 0xDD;

ANSELC = 0xCD;

OPTION_REGbits.nWPUEN = 0x01;

APFCON = 0x02;

}

void Init_ADC () //funcția de inițializare a modulului ADC

{

TRISA=0b00000110;//Setează pini RA1 și RA2 ca intrări

TRISC=0b00001100; // Setează pini RC2 și RC3 ca intrări

ANSELA=0b00000110;// Setează RA1 și RA2 pini analogici

ANSELC=0b00001100;// Setează RC2 și RC3 pini analogici

ADCON1= 0b11010000;//Aliniere la dreapta, FOSC/16 , VREF conectat la alimentare

}

unsigned int Get_ADC_Value (unsigned int Channel)//Citește valoare semnalului analogic de la un anumit pin

{

if (Channel>9) Channel=0;

switch (Channel)//Selectează canalul analogic de pe care se citește

{

case 0:

ADCON0=0b00000001; //Selectează AN0 și activează ADC

break;

case 1:

ADCON0=0b00000101;//Selectează AN1 și activează ADC

break;

case 2:

ADCON0=0b00001001; // Selectează AN2 și activează ADC

break;

case 3:

ADCON0=0b00001101; //Selectează AN3 și activează ADC

break;

case 4:

ADCON0=0b00010001;//Selectează AN4 și activează ADC

break;

case 5:

ADCON0=0b00010101; // Selectează AN5 și activează ADC

break;

case 6:

ADCON0=0b00011001; //Selectează AN6 și activează ADC

break;

case 7:

ADCON0=0b00011101;//Selectează AN7 și activează ADC

break;

case 8:

ADCON0=0b00100001; // Selectează AN8 și activează ADC

break;

case 9:

ADCON0=0b00100101; //Selectează AN9 și activează ADC

break;

case 10:

ADCON0=0b00101001;//Selectează AN10 și activează ADC

break;

case 11:

ADCON0=0b00101101; // Selectează AN11 și activează ADC

break;

}

GO_nDONE = 1; //Pornește achiziția

while (GO_nDONE); //Așteaptă ca să se realizeze achiziția

return ((ADRESH<<8)+ADRESL); //returnează valoarea inscripționată în regiștri ADC

}

void InitNCO()//funcție de inițializare a regișorilor pentru folosirea microcontrolerului în modul dorit

{

OSCCON = 0x78;

TRISC = 0x80;

PORTC = 0x00;

ANSELC = 0x00;

TRISA = 0x01;

ANSELA = 0x00;

APFCON = 0x02;

PR2 = 0x01;

T2CON = 0x05;

PWM4DCH = 0x00;

PWM4DCL = 0x40;

PWM4CON = 0x80;

NCO1CON = 0xC1;

NCO1CLK = 0x02;

NCO1INCH = 0x80;

NCO1INCL = 0x00;

}

void FadeUp(void) // setează registrul de incrementare al NCO

{

uint16_t i;

NCO1CONbits.N1POL = 0;//Setează semnalul de ieșire activ în 0 logic

CLC1GLS3 = 0x40;//Setează logica modulului 4 CLC

for (i = 32786; i < 65535; i++) //scrie în registrul de incrementare al NCO valoarea variabilei i

{

NCO1INCH = i >> 8;

NCO1INCL = i & 0xFF;

delay_us(25);

}

NCO1CONbits.N1POL = 1;//Setează semnalul de ieșire activ în 1 logic

CLC1GLS3 = 0x80;

for (i = 65535; i > 32786; i–)

{

NCO1INCH = i >> 8;

NCO1INCL = i & 0xFF;

__delay_us(25);

}

}

void FadeDown(void) setează registrul de incrementare al NCO

{

uint16_t i;

NCO1CONbits.N1POL = 1;

CLC1GLS3 = 0x80;

for (i = 32786; i < 65535; i++)

{

NCO1INCH = i >> 8;

NCO1INCL = i & 0xFF;

__delay_us(25);

}

NCO1CONbits.N1POL = 0;

CLC1GLS3 = 0x40;

for (i = 65535; i > 32786; i–)

{

NCO1INCH = i >> 8;

NCO1INCL = i & 0xFF;

__delay_us(25);

}

}

void NCOCalc(void)

{

if(fifty_percent == 1)

{

NCO1CONbits.N1POL = 1;

CLC1GLS3 = 0x80;

NCOINC = Constant/(Duty_Cycle+3);

NCO1INCH = NCOINC >> 8;

NCO1INCL = NCOINC & 0xFF;

}

else

{

NCO1CONbits.N1POL = 0;

CLC1GLS3 = 0x40;

NCOINC = Constant/(100-Duty_Cycle+3);

NCO1INCH = NCOINC >> 8;

NCO1INCL = NCOINC & 0xFF;

}

}

void LCDByte(uint8_t c,uint8_t isdata)

{

uint8_t hn,ln;

uint8_t temp;

hn=c>>4;

ln=(c & 0x0F);

if(isdata==0)

CLEAR_RS();

else

SET_RS();

__delay_us(0.5); //tAS

SET_E();

temp=(LCD_DATA_PORT & (~(0X0F<<LCD_DATA_POS)))|((hn<<LCD_DATA_POS));

LCD_DATA_PORT=temp;

__delay_us(1);

CLEAR_E();

__delay_us(1);

SET_E();

temp=(LCD_DATA_PORT & (~(0X0F<<LCD_DATA_POS)))|((ln<<LCD_DATA_POS));

LCD_DATA_PORT=temp;

__delay_us(1); //tEH

CLEAR_E();

__delay_us(1);

LCDBusyLoop();

}

void LCDBusyLoop()

{

uint8_t busy,status=0x00,temp;

LCD_DATA_TRIS|=(0x0f<<LCD_DATA_POS);

SET_RW();

CLEAR_RS();

__delay_us(0.5);

do

{

SET_E();

__delay_us(0.5);

status=(LCD_DATA_PORT>>LCD_DATA_POS);

status=status<<4;

__delay_us(0.5);

CLEAR_E();

__delay_us(1);

SET_E();

__delay_us(0.5);

temp=(LCD_DATA_PORT>>LCD_DATA_POS);

temp&=0x0F;

status=status|temp;

busy=status & 0b10000000;

__delay_us(0.5);

CLEAR_E();

__delay_us(1);

}while(busy);

CLEAR_RW();

LCD_DATA_TRIS&=(~(0x0F<<LCD_DATA_POS));

}

void LCDInit(uint8_t style)

{

LCD_DATA_TRIS&=(~(0x0F<<LCD_DATA_POS)); //Output

LCD_E_TRIS=0;

LCD_RS_TRIS=0;

LCD_RW_TRIS=0;

LCD_DATA_PORT&=(~(0x0F<<LCD_DATA_POS));

CLEAR_E();

CLEAR_RW();

CLEAR_RS();

__delay_us(0.5);

SET_E();

LCD_DATA_PORT|=((0b00000010)<<LCD_DATA_POS;

__delay_us(1);

CLEAR_E();

__delay_us(1);

LCDBusyLoop();

LCDCmd(0b00101000);

LCDCmd(0b00001100|style);

LCDCmd(0b01000000);

uint8_t __i;

for(__i=0;__i<sizeof(__cgram);__i++)

LCDData(__cgram[__i]);

}

void LCDWriteString(const char *msg)

{

while(*msg!='\0')

{

if(*msg=='%')

{

msg++;

int8_t cc=*msg-'0';

if(cc>=0 && cc<=7)

{

LCDData(cc);

}

else

{

LCDData('%');

LCDData(*msg);

}

}

else

{

LCDData(*msg);

}

msg++;

}

}

void LCDWriteInt(int val,int8_t field_length)

{

char str[5]={0,0,0,0,0};

int i=4,j=0;

if(val<0)

{

LCDData('-');

val=val*-1;

}

while(val)

{

str[i]=val%10;

val=val/10;

i–;

}

if(field_length==-1)

while(str[j]==0)

j++;

else

j=5-field_length;

for(i=j;i<5;i++)

{

LCDData(48+str[i]);

}

}

void LCDGotoXY(uint8_t x,uint8_t y)

{

if(x>=20) return;

#ifdef LCD_TYPE_204

switch(y)

{

case 0:

break;

case 1:

x|=0b01000000;

break;

case 2:

x+=0x14;

break;

case 3:

x+=0x54;

break;

}

#endif

#ifdef LCD_TYPE_164

switch(y)

{

case 0:

break;

case 1:

x|=0b01000000;

break;

case 2:

x+=0x10;

break;

case 3:

x+=0x50;

break;

}

#endif

x|=0b10000000;

LCDCmd(x);

}

Modul convertor schema electrică

Modul convertor layout top

Modul convertor layout bottom

Modul convertor așezare componente top

Modul convertor layout 3D

Modul convertor listă de componente

Modul driver schema electrică

Modul driver layout top

Modul driver layout bottom

Modul driver așezare componente top

Modul driver layout 3D

Modul driver lista de componente

Modul controler schema electrică

Modul controler layout top

Modul controler layout bottom

Modul controler așezare componente

Top

Bottom

Modul controler layout 3D

Top

Bottom

Modul controler listă de componente

Modul LCD schema electrică

Modul LCD layout

Top

Bottom

Modul LCD așezare componente

Top

Bottom

Modul LCD layout 3D

Top

Bottom

Modul LCD listă de componente

Similar Posts

  • Analiza Statistica a Veniturilor, Cheltuielilor Si Consumului Populatiei

    ϹUPRІΝЅ Introducere CAPITOLUL I. CONCEPTE GENERALE 1.1. Numărul de locuitori 1.2. Natalitatea 1.3. Mortalitatea 1.4. Sporul natural 1.5. Mortalitatea infantilă 1.6. Nupțialitatea 1.7. Divorțialitatea 1.8. Migrația CAPITOLUL AL II-LEA. STUDIUL ECONOMETRIC 2.1. Despre econometrie 2.2. Produsul Intern Brut pe cap de locuitor 2.3. Indicele dezvoltării umane 2.4. Anunțarea ratelor dobânzilor 2.5. Indicele prețurilor de consum…

  • Plan DE Marketing Sc Pinguin, Mobila

    1.Alegerea domeniului de Marketing ………………………………………………….4 1.1 Conceptul de marketing ……………………………………………………. 5 1.2 Prezentare generala …………………………………………………………..6 2.Analiza mediului de desfacere ………………………………………………………..7 2.1 Analiza SWOT …………………………………………………………………11 2.2 Secventierea obiectivelor ………………………………………………….12 3.Strategia de creare a pietei …………………………………………………………..13 3.1 Estimarea volumului vanzarilor ……………………………………………17 3.2 Studiul conditiilor pentru ca produsul sau serviciul sa poata remane o durata cat mai mare…

  • Impactul Investitiilor Straine Directe In Romania

    Capitolul III. Impactul investițiilor străine directe în Romania. Studiu de caz III.1.Investițiile străine directe în Romania În acest capitol este prezentă situația investițiilor străine directe (ISD) în Romania, în perioada 2009 -2013. În ultimii ani, Romania a devenit o țară atractivă pentru investitorii străini, numărul celor prezenți fiind în crestere. Datorită aderarii la NATO și…

  • Diagnosticarea Sc

    I. DIAGNOSTICAREA S.C. REXX S.R.L. .Prezentare generala a arganizatiei S.C. Rexx S.R.L. este o intreprindere de dimensiuni mijlocii, infiintata in anul 2000, cu sediul in localitatea Fetesti, Bulevardul Unirii, nr 45. Obiectul de activitate il constituie: – confectionarea de articole textile, mai putin lenjerie de corp; – importul de utilaje specifice; – operatiuni valutare. S.C….

  • Piata Mondiala a Produselor Farmaceutice

    CUPRINS: INTRODUCERE CAPITOLUL I PIATA FARMACEUTICĂ SI PIATA MONDIALA 1.1. Industria farmaceutica 1.2. Costurile industriei farmaceutice 1.3. Principalii competitori si ofertele lor (tabel mare + detalii despre primii 3) 1.4.. Importanta industriei farmaceutice in economia tarilor din Uniunea Europeana CAPITOLUL 2 PIATA PRODUSELOR FARMACEUTICE IN ROMANIA 2.1. Cadrul legislativ 2.2. Competitori pe piata locala 2.2.1….

  • Impozitele Locale

    Cuprins Introducere Cap. I. Considerații cu privire la administrațiile publice locale Organizarea administrațiilor publice locale Descentralizarea și autonomia locală Finanțarea administrațiilor publice locale Cap. II. Bugetul local instrument de planificare financiară la nivel local 2.1. Conceptul de buget local și sistem bugetar local 2.2. Principiile bugetare 2.3. Procesul bugetar local 2.4. Principalele surse de venituri…