Composite Energy Storage System with Photovoltaic Power Generation and UPS Function

Photo of author

By Jackson Taylor

YouTube video
Circuit diagram

CIRCUIT

Push‑Pull waveforms

WAVEFORMS

Gate signals of inverter MOSFET

GATE SIGNALS OF INVERTER MOSFET

Step‑up transformer

The transformer rating is 12‑0‑12V, 8A. AC (centre tapped) at primary and 230V, 0.9A across the secondary winding. The 230V appearing across the secondary is the RMS value of the waveform and the peak value would be 230 × 1.414 = 325.22V.

PROGRAM ( COMPILER MIKRO C)

//used crystal of 4 MHz
// duty_50% = (clock frequency/ (output_frequency*4* 2*1)) -1 =19999
#define modeswitch  PORTE.F8  //modeswitch
#define relay LATC.F14  //relay
#define charge_switch LATC.F13  //relay
int boostvoltage,solarvoltage;
int maximum_duty=5;
int maximum_duty_solar=5;
unsigned long int pwm_period, current_duty ;
unsigned int current_duty2,current_duty3;
unsigned int pwm_period2, pwm_period3;
int f=0;
void pins_init(void);
void inverter_init(void);
void solarboost_init(void);
void charger_boost_init(void);
void boostcontrol(void);
void solar_boost_control(void);
void off_inverter_and_boost(void);
void on_inverter_and_boost(void);
void mode_control(void);
void main()
{
    pins_init() ;
    inverter_init();
    charger_boost_init();
    solarboost_init();
    ADC1_Init();
    relay=0;
    while (1)
    {
        if(f==0)  //boost mode duty
        {
            boostcontrol();
        }
        solar_boost_control();
        mode_control();
    }
}
void mode_control(void)
{
    if(modeswitch==0)
    {
        if(f==0)   //change to rectifier mode
        {
            f=1; off_inverter_and_boost();Delay_ms(1000);
            relay=1;charge_switch=1;
        }
        else     //change to inverter mode
        {
            relay=0;charge_switch=0;Delay_ms(1000);
            f=0;on_inverter_and_boost();
        }
    }
}
void off_inverter_and_boost(void)
{
    PWM1_Mc_Stop(); PWM_Stop(2);
}
void on_inverter_and_boost(void)
{
    PWM1_MC_Start();  PWM_Start(2);
}
void solar_boost_control(void)
{
    solarvoltage = ADC1_Read(1)*0.054; Delay_ms(1);
    if(solarvoltage>12)
    {
        current_duty2=current_duty2-1;
         if(current_duty2<1)current_duty2=0;
        PWM_Set_Duty(current_duty2,  1);
    }
    else if (solarvoltage<14 )
    {
        current_duty2=current_duty2+1;
         if(current_duty2>maximum_duty_solar)current_duty2=maximum_duty_solar;
        PWM_Set_Duty(current_duty2,  1);
    }
}
void boostcontrol(void)
{
    boostvoltage = ADC1_Read(0)*0.054; Delay_ms(100);
    if(boostvoltage>13)
    {
        current_duty3=current_duty3-1;
         if(current_duty3<1)current_duty3=0;
         PWM_Set_Duty(current_duty3, 2);
    }
    else if (boostvoltage<11 )
    {
        current_duty3=current_duty3+1;
         if(current_duty3>maximum_duty)current_duty3=maximum_duty;
         PWM_Set_Duty(current_duty3, 2);
    }
}
void inverter_init(void)
{
    current_duty=20000;                   //duty ratio 50% =99
    pwm_period = PWM1_MC_Init(50, 0, 0x11, 0);      //enable 1L AND 1H pwm pins
    PWM1_MC_Set_Duty (current_duty, 1) ;
    PWM1_MC_Start();
    DTCON1=511;     //DEAD TIME CONTROL   maximum 79
    ////Delay_ms(2000); PWM1_Mc_Stop();
}
void solarboost_init(void)  //pwm 2
{
    current_duty2  =1;      //80% IS 24,MAXIMUM  33 
    pwm_period2 = PWM_Init(30000 , 1, 1, 2);//FREQ,CHANNEL,PRESCALE,TIMER NAME
    PWM_Start(1);
    PWM_Set_Duty(current_duty2,  1);            // Set current duty for PWM1                         // initial value for current_duty1
}
void charger_boost_init(void) //pwm 3
{
    current_duty3 = 1;                        // initial value for current_duty1
    pwm_period3 = PWM_Init(30000, 2, 1, 3);
    PWM_Start(2);
    PWM_Set_Duty(current_duty3, 2);
}
void pins_init(void) //pwm 3
{
    TRISB.F0 = 1; TRISB.F1 = 1; //feed back
    TRISE.F8 = 1;   //mode switch
    TRISD.F0 = 0; TRISD.F1 = 0;  //pwm boost
    TRISE.F0 = 0; TRISE.F1 = 0;  //inverter
    TRISC.F14 = 0;   //RELAY
    TRISC.F13 = 0;   //charger mosfet
}
See also
BRUSH LESS DC MOTOR (BLDC ) INSIDE VIEW (USED E BIKE -36V ,250W)