SOFT-SWITCHING BIDIRECTIONAL DC-DC CONVERTER USING A LOSSLESS ACTIVE SNUBBER


BASIC CIRCUIT

HARDWARE

SIMULATION

zvs in matlab for switch S1


HARDWARE


  • BATTERY -4V AND 12V 
  • Micro controller -dspic30f2010
  • drivers -fan7392 and tlp250
  • MOSFET -CSD19534 (OR USE IRF540)
  • DIODE -BYQ28E


waveforms
zvs waveforms for switch S1
waveforms S1-gate and Vds1 without snubber (no zvs)

 

 
waveforms S1-gate and Vds1 with snubber ( zvs)
zvs waveforms for switch S2

waveforms S2-gate and Vds2 without snubber (no zvs)


waveforms S1-gate and Vds1 with snubber ( zvs)

gate waveforms at S1(yellow) and   S2(blue)
gate waveforms at S1(yellow) and   S3(blue)

gate waveforms at S1(yellow) and   S4(blue)

gate waveforms at S2(driver output)
gate waveforms at S1(driver output-blue)

voltage across main inductor

voltage across auxilary inductor
output

Design
DUTY CYCLE CALCULATION
Gain of converter = 1/1-D
D is duty ratio
VOUT / VIN =1/1-D
 1-D = 1/ (VOUT / VIN)
D = 1- 1/ (VOUT / VIN)
D = 1- 1/ ( 14/ 4)
D = 0.71
INDUCTOR VALUE CALCULATION
 IN boost MODE (MODE 1), WHEN THE SWITCH S1 IS ON , VOLTAGE ACROSS THE INDUCTOR WILL BE EQUAL THE VOLTAGE OF THE BATTERY
 VIN = VL =4
FOR AN INDUCTOR VOLTAGE CURRENT BASIC RELATION IS
VL = L * dI / dt        
THEN,  L = VL  *  dt  / dI
L =  VIN  *  dt   / dI 

HERE dt = DUTY CYCLE / FREQUENCY
Assume that operating frequency of the switch (mosfet here) =50 kHz
AND dI IS THE RIPPLE CURRENT OF INDUCTOR
IL = IIN=5A
Assume that inductor ripple current = 20% of inductor current
dI =10%  *  IL
dI =10%  *  5A
dI =10%  *  5A
dI = 0.5A

L =  VIN  *  dt   / dI 
L = VIN  *  D   / (F * di)
 L = 4V  * 0.71   / (50000 Hz * .5A)
L = 112uH
 Auxiliary Inductor design
Current across switch is
Is1 =Vhi * ∆Ts / 2L2
∆Ts is the dead time between switch S1 and S2 which is taken as 1uS
For boost mode
Is1 = 5A
5A =Vhi * ∆Ts / 2L2
5A =14 * 1 uS / 2L2
L2 =14 * 1 uS / (2*5A)
L2 =14 * 1 uS / (2*5A)
L2 =1.4 uH
Auxiliary Capacitor design
The voltage across the auxiliary capacitor is given by,
 Vca =Vhi / 2
Vca =14 / 2
Vca =7
During the dead time ,that is when both main switches are of  current through capacitor will be
Ica = Is1 = Il2= 5A
FOR A CAPACITOR VOLTAGE CURRENT BASIC RELATION IS
I = C * dV / dt  
C = I * dt / dV  
 dV  is capacitor ripple voltage. Assume that output ripple voltage is about 1% of output voltage
dV = 7
C = I * dt / dV  
C = I * dt / dV  
C = 5 * 1uS/  7  
C = 0.71uF = 1uF (Standard value) 
program(mikroc -dsPIC30f2010) (boost operation only)
//crystal of 16 MHz
#define boostgates1  LATE.F0          //S1
#define buckgates2  LATE.F1           //S2
#define snubberlowergates3  LATE.F2   //S3
#define snubberupperergates4  LATE.F3  //S4
void main()
{
TRISE.F0=0;TRISE.F1=0;TRISE.F2=0;TRISE.F3=0;
snubberupperergates4=0;
boostgates1=0;
snubberlowergates3=0;
buckgates2 =0;
while (1)
{
buckgates2 =1;snubberupperergates4=1;Delay_us(1);  //s2 & s4 is on  ,time =1
buckgates2 =0; Delay_us(1);          //s2 off
boostgates1=1;Delay_us(11);          //s2 off, s4 and s1 on,time =12
snubberupperergates4=0;//s4 -off & s1 on     ,time =12
snubberlowergates3=1;  Delay_us(1);//s3 on & s1 on  ,time =13
boostgates1=0;Delay_us(1);  //s1 off ,s3 on , time =13
buckgates2 =1;   Delay_us(6);
snubberlowergates3=0;
}
}

program(mikroc -dsPIC30f2010) (buck or boost mode using mode switch)
//crystal of 16 MHz
#define boostgates1  LATE.F0          //S1
#define buckgates2  LATE.F1           //S2
#define snubberlowergates3  LATE.F2   //S3
#define snubberupperergates4  LATE.F3  //S4
#define modeswitch  PORTD.F0  //modeswitch
void offallswitches(void);
int time=14,f=0;
void main()
{
TRISE.F0=0;TRISE.F1=0;TRISE.F2=0;TRISE.F3=0;  //gates as output
TRISD.F0=1;    //modeswitch
offallswitches();

while (1)
{
if(f==0)  //boost mode duty
{
buckgates2 =1;snubberupperergates4=1;Delay_us(1);  //s2 & s4 is on  ,time =1
buckgates2 =0; Delay_us(1);          //s2 off
boostgates1=1;Delay_us(14); //11         //s2 off, s4 and s1 on,time =12
snubberupperergates4=0;//s4 -off & s1 on     ,time =12
snubberlowergates3=1;  Delay_us(1);//s3 on & s1 on  ,time =13
boostgates1=0;Delay_us(1);  //s1 off ,s3 on , time =13
buckgates2 =1;   Delay_us(4);  //6
snubberlowergates3=0;
}
else if(f==1)       //buck mode duty
{
buckgates2 =1;snubberupperergates4=1;Delay_us(1);  //s2 & s4 is on  ,time =1
buckgates2 =0; Delay_us(1);          //s2 off
boostgates1=1;Delay_us(9); //11         //s2 off, s4 and s1 on,time =12
snubberupperergates4=0;//s4 -off & s1 on     ,time =12
snubberlowergates3=1;  Delay_us(1);//s3 on & s1 on  ,time =13
boostgates1=0;Delay_us(1);  //s1 off ,s3 on , time =13
buckgates2 =1;   Delay_us(4);  //6
snubberlowergates3=0;
}
if(modeswitch==0)
{ offallswitches();
if(f==0) f=1; else f=0;
Delay_ms(1000);
}


}
}

void offallswitches(void)
{
snubberupperergates4=0;
boostgates1=0;
snubberlowergates3=0;
buckgates2 =0;
}