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

Photo of author

By Jackson Taylor


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;
}