## Pages

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

BASIC CIRCUIT

HARDWARE

SIMULATION

zvs in matlab for switch S1

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