Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

H_Bridge controlled by two signals

Status
Not open for further replies.

jean12

Advanced Member level 2
Advanced Member level 2
Joined
Aug 27, 2013
Messages
529
Helped
5
Reputation
12
Reaction score
6
Trophy points
18
Activity points
5,497
Hello,can anyone her help me to control my H_Bridge with two signals;I want to make a dc-ac converter by using Half bridge which gives 440VDC then I want this to be applied on an H_Bridge then this be able of giving 220VAC at the output by controlling using only two signals because of the problem of MOSFET drivers I have.

Can anyone help me by modifying the attached circuit?

I am using HV400IP as MOSFET drive.

Thanks.!!
 

Attachments

  • H_Bridge.zip
    36.3 KB · Views: 151

hai jean.
did u get any solution for ur problem, I too facing similar problem explained below.. please help
I am designing a variable inverter, output- 100V-300V, (40Hz-70Hz) 10W and input-12V,1A. for this I chose one DC-DC converter and DC-AC converter.
my first step is to get a max. DC voltage from DC-DC converter, give the output of this converter to the supply voltage of MOSFET in DC-AC converter Hbridge, provide a SPWM signal according to the desired output AC voltage, and finaly design a filter to get pure AC wave.

in DC-DC converter: I use pushpull topology (50Khz) , PIC16F716, IR2113 (driver), IRF3205 (MOSFET). the outpout of transformer is fed to the bridge rectifier (UF4007) and finally to a filter 47uF/400V. I got the output as ~400VDC, when i connected an LED through 200K resistor.
-duty cycle is 50%.
-10K is used form gate to ground
-using a 0.01uF and 56ohm (snubber) in parallel to primary.

In the DC-AC converter: I use full bridge topology (30KHz), PIC 16F716, IR2113 (driver), IRF830 (MOSFET). I use only 60 devision for sin wave generation. when I am connecting 12V in place of MOSFET supply, I am getting a SPWM signal across a 1K resistor, and nearly 8V AC on multimeter.

But when I connected the DC-DC converter output to MOSFET supply, the two MOSFET in one side of H Bridge burned.
I used 22uF/50V (electro) in parallel to 0.1uF as bootstrap cap.
-the load is 1K resistor
-the ground is common for entire circuit.
-12K is connected from gate to source.
-no snubber connected.
 

Can you tell me how you are generating the SPWM;I used the same topology but me I want to use the guidance of Tahmid blog;unfortunately I don't understand how the sine table is designed and the value he called SET_FREQ;can you please help me on that signal generation.

For your information I saw that Tahmid used two signlas of 50Hz and generate the carrier signal which is a bit high comparing to the 50Hz he generated.

Consider the following links:https://tahmidmc.blogspot.com/2012/10/generation-of-sine-wave-using-spwm-in_10.html;https://tahmidmc.blogspot.com/2013/02/demystifying-use-of-table-pointer-in.html.


Please help on those calculations and consider the links provided for knowing how you connect diferents signals I think
on low side you might connect the carriers and high side you connect the two signals of 50Hz.


Thanks.
 

Can you tell me how you are generating the SPWM;I used the same topology but me I want to use the guidance of Tahmid blog;unfortunately I don't understand how the sine table is designed and the value he called SET_FREQ;can you please help me on that signal generation.

For your information I saw that Tahmid used two signlas of 50Hz and generate the carrier signal which is a bit high comparing to the 50Hz he generated.

Consider the following links:https://tahmidmc.blogspot.com/2012/10/generation-of-sine-wave-using-spwm-in_10.html;https://tahmidmc.blogspot.com/2013/02/demystifying-use-of-table-pointer-in.html.


Please help on those calculations and consider the links provided for knowing how you connect diferents signals I think
on low side you might connect the carriers and high side you connect the two signals of 50Hz.


Thanks.


jean,
here tahmid devide the sine wave into total 64 devisions,
so in one half cycle there will be 32 devision.
so we need to provide sufficient voltages corresponds to the sine wave using equation V x sin theta
so first devide 360 degree into 64 equla devisions, 5.625 degree.
then make the sine table, as Vsin0, Vsin 5.625, Vsin 11.25, Vsin 16.875........Vsin 90 (32 values for half cycle)
V is peak voltage
ie, V*0, V*0.098, V*0.1950, V*0.2902,.......V*1
ie, 0%*V, 9.8%*V, 19.5%*V, 29.02%*V......100%*V

find the CCPR1L values corresponds to 0,9.8%, 19.5%,.....100%, these values are shown in sin_table[] array..

Here sin freq is 50Hz, so next we need to devide the total time into 64 dev.
ie, total time= 0.02s
one single dev=0.02/64=312.5uS
ie, we should provide each values in sin_table[] to CCPR1L for 312.5uS, you shoud repeat the 32 values for next cycle (making revesre by setting appropriate bit)
as here using 16KHz as switching freq. in one devision there will be 5 pulsues (62.5*5=312.5) of same dutycyle.
this is the basic idea of the program...

regards
Ratheesh
 

Yeah,this one I understand but when implementing I get wrong signals,why?
For example help me to design an H_Bridge controlling signal as Tahmid did with two terminals at 50Hz and two others at 18KHz for example tell me the following values in the sine table and let me know how you found them:
1.SET_FREQ=?
2.Number of sign table digits ;are they 32,64 or what?How many?
3.TBL_POINTER_SHIFT = TBL_POINTER_NEW >>?


Thanks you for example see what I did here below but I am getting wrong signal:
PHP:
unsigned char sin_table[64]={0, 10, 21, 31, 41, 50, 59, 68, 76, 83, 89,
94, 99, 102, 105, 106, 107, 106, 105, 102, 99, 94, 89, 83, 76, 68, 59,
50, 41, 31, 21, 10};



unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ;
unsigned int TBL_temp;
unsigned char DUTY_CYCLE;

void interrupt(){
if (TMR2IF_bit == 1){
TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ;
if (TBL_POINTER_NEW < TBL_POINTER_OLD){
CCP1CON.P1M1 = ~CCP1CON.P1M1; //Reverse direction of full-bridge
}
TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 10;
DUTY_CYCLE = TBL_POINTER_SHIFT;
CCPR1L = sin_table[DUTY_CYCLE];
TBL_POINTER_OLD = TBL_POINTER_NEW;
TMR2IF_bit = 0;
}
}

void main() {
SET_FREQ = 256;
TBL_POINTER_SHIFT = 0;
TBL_POINTER_NEW = 0;
TBL_POINTER_OLD = 0;
DUTY_CYCLE = 0;
//ANSEL = 0; //Disable ADC commenetd myself
// CMCON0 = 7; //Disable Comparator commenetd myself
//PR2 = 249;
PR2=187; ///for 16Khz at 12MHZ of quartz
// TRISC = 0x3F; commenetd myself
TRISB=0x3F;//defined myself for PWM output pins
CCP1CON = 0x4C;
TMR2IF_bit = 0;
T2CON = 4; //TMR2 on, prescaler and postscaler 1:1
while (TMR2IF_bit == 0);
TMR2IF_bit = 0;
TRISB=0; //defined my self for PWM out
// TRISC = 0; commenetd myself the PIC doesn't have portc
TMR2IE_bit = 1;
GIE_bit = 1;
PEIE_bit = 1;

while(1);
}

Please help.Thanks.
 

Yeah,this one I understand but when implementing I get wrong signals,why?
For example help me to design an H_Bridge controlling signal as Tahmid did with two terminals at 50Hz and two others at 18KHz for example tell me the following values in the sine table and let me know how you found them:
1.SET_FREQ=?
2.Number of sign table digits ;are they 32,64 or what?How many?
3.TBL_POINTER_SHIFT = TBL_POINTER_NEW >>?


Thanks you for example see what I did here below but I am getting wrong signal:
PHP:
unsigned char sin_table[64]={0, 10, 21, 31, 41, 50, 59, 68, 76, 83, 89,
94, 99, 102, 105, 106, 107, 106, 105, 102, 99, 94, 89, 83, 76, 68, 59,
50, 41, 31, 21, 10};



unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ;
unsigned int TBL_temp;
unsigned char DUTY_CYCLE;

void interrupt(){
if (TMR2IF_bit == 1){
TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ;
if (TBL_POINTER_NEW < TBL_POINTER_OLD){
CCP1CON.P1M1 = ~CCP1CON.P1M1; //Reverse direction of full-bridge
}
TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 10;
DUTY_CYCLE = TBL_POINTER_SHIFT;
CCPR1L = sin_table[DUTY_CYCLE];
TBL_POINTER_OLD = TBL_POINTER_NEW;
TMR2IF_bit = 0;
}
}

void main() {
SET_FREQ = 256;
TBL_POINTER_SHIFT = 0;
TBL_POINTER_NEW = 0;
TBL_POINTER_OLD = 0;
DUTY_CYCLE = 0;
//ANSEL = 0; //Disable ADC commenetd myself
// CMCON0 = 7; //Disable Comparator commenetd myself
//PR2 = 249;
PR2=187; ///for 16Khz at 12MHZ of quartz
// TRISC = 0x3F; commenetd myself
TRISB=0x3F;//defined myself for PWM output pins
CCP1CON = 0x4C;
TMR2IF_bit = 0;
T2CON = 4; //TMR2 on, prescaler and postscaler 1:1
while (TMR2IF_bit == 0);
TMR2IF_bit = 0;
TRISB=0; //defined my self for PWM out
// TRISC = 0; commenetd myself the PIC doesn't have portc
TMR2IE_bit = 1;
GIE_bit = 1;
PEIE_bit = 1;

while(1);
}

Please help.Thanks.

no of sine table is 32,

SET_FREQ=65536/32/5=409.6,
where 65536 is max of integet
32 is no. of sine table
5 is after each 5 carrier pulse cycle, the sine table pointer incriments, to get 312.5us delay

as there is 32 values in sin table, 65536/32=2048= 2 raise to 11, (>>11), this will be same as devide by 2048.......

if the freq= 18Khz, you need to alter the program, as 2 65536/36=1820.4, and 2raise to 10 is 1024.....

hope it will help....
 

jean,
In my circuit I tied microcontroller gnd, driver gnd and Mosfet voltage together, is ther any fault..
what about your connection... in your attached file I can only see the bitmap image.. that is not complete....
please tell me about the gnd connection.....
 

I connected the same way like you but it might be a fault even if I have not yet connected all together again for visualizing the global output ,but tomorrow I will connect I let you.
Few weeks ago I showed the circuit to one friend who is an expert more than me then he told me that I have to use more Optocoupler for isolating the ground but I don't understand how to isolate it.

By tomorrow I connect I tell you,but for me even the 8VAC you said you are getting me I don't get it.

Thanks,think far..!!

- - - Updated - - -

Hello ratheeshvaram@yahoo.com,can you please help me to calculate the good values,because with the formula you provided I am getting wrong signal.
see the graphs on the attachment I am getting with my oscilloscope ,those are the output of The MOSFET Drive IC7667.!!

Please help
 

Attachments

  • Signals for one Side.pdf
    177.4 KB · Views: 165
Last edited:

- - - Updated - - -

Hello ratheeshvaram@yahoo.com,can you please help me to calculate the good values,because with the formula you provided I am getting wrong signal.
see the graphs on the attachment I am getting with my oscilloscope ,those are the output of The MOSFET Drive IC7667.!!

Please help

I cannot understand why u said, wrong signal.. in the output of driver for high side u are getting 50hz and low side u are getting SPWM (50 hz with carrieer 16Khz) am I right...?, also in the next driver also u are geting same signal...... I think this is what we need
- did u connect these signal to ur H-bridge?
-if so, u might get SPWM with positive and negative cycle across the load....
-if u connect the appropriate filter only u can see the pure sine wave...
 

Hello,I connected the signal but I ma getting nothing at the output,I first connected 30VDC but I am getting nothing at the output.
The signals I am getting don't has the frequency you are saying,me also I don't know why.

See the code here for generating a SPMW of 28KHZ and 50Hz but I am not getting them I don't know why.
PHP:
unsigned char sin_table[32]={0, 10, 21, 31, 41, 50, 59, 68, 76, 83, 89,
94, 99, 102, 105, 106, 107, 106, 105, 102, 99, 94, 89, 83, 76, 68, 59,
50, 41, 31, 21, 10};



unsigned int TBL_POINTER_NEW, TBL_POINTER_OLD, TBL_POINTER_SHIFT, SET_FREQ;
unsigned int TBL_temp;
unsigned char DUTY_CYCLE;

void interrupt(){
if (TMR2IF_bit == 1){
TBL_POINTER_NEW = TBL_POINTER_OLD + SET_FREQ;
if (TBL_POINTER_NEW < TBL_POINTER_OLD){
CCP1CON.P1M1 = ~CCP1CON.P1M1; //Reverse direction of full-bridge
}
TBL_POINTER_SHIFT = TBL_POINTER_NEW >> 11;
DUTY_CYCLE = TBL_POINTER_SHIFT;
CCPR1L = sin_table[DUTY_CYCLE];
TBL_POINTER_OLD = TBL_POINTER_NEW;
TMR2IF_bit = 0;
}
}

void main() {
SET_FREQ = 410;
TBL_POINTER_SHIFT = 0;
TBL_POINTER_NEW = 0;
TBL_POINTER_OLD = 0;
DUTY_CYCLE = 0;
PR2=107; ///for 28Khz at 12MHZ of quartz

TRISB=0x3F;//defined myself for PWM output pins
CCP1CON = 0x4C;
TMR2IF_bit = 0;
T2CON = 4; //TMR2 on, prescaler and postscaler 1:1
while (TMR2IF_bit == 0);
TMR2IF_bit = 0;
TRISB=0; //defined my self for PWM out
TMR2IE_bit = 1;
GIE_bit = 1;
PEIE_bit = 1;

while(1);
}
;I think this linkhttps://www.intersil.com/content/dam/Intersil/documents/an96/an9611.pdf can alos be helpful.!ç!
 

jean, your driver out is correct, if u are not getting across load, there may be some thing wrong in driver circuit..
-please show the full circuit
-and wave form across load...
 

Me what I am doing is a reparation of a DC-AC Converter which has had a card which is out of operation ,on that card (board)there was clock generator for the half wave circuit (12VDC-440VDC)and the H-bridge for 440VDC-220VAC;so now I realized a simple I clocking signal (square) with the following codes
PHP:
#include "16f1827.h"
//#device ADC=8
#fuses  NOWDT,HS,NODEBUG,NOCPD,PUT,NOLVP
#use delay(clock=4000000)

void main()
{

set_tris_b(0x00);
output_b(0x00);

while(1)
{

   /*output_high(PIN_B5);
   output_low(PIN_B4);
    delay_us(40);
 */
 
   output_high(PIN_B3);
   output_high(PIN_B7);
   output_low(PIN_B5);
   output_low(PIN_B6);
    delay_ms(20);
 
    output_low(PIN_B3);
   output_low(PIN_B7);
   output_low(PIN_B5);
   output_low(PIN_B6);
 delay_us(5);
 
 
 
  output_low(PIN_B3);
  output_low(PIN_B7);
  output_high(PIN_B5);
  output_high(PIN_B6);
    delay_ms(20);
  output_low(PIN_B3);
  output_low(PIN_B7);
  output_low(PIN_B5);
  output_low(PIN_B6);
 delay_us(5);
 /*
  output_low(PIN_B5);
   output_low(PIN_B4);
   delay_us(5); //it was 5us
   
   
   output_low(PIN_B5);
   output_high(PIN_B4);
    delay_us(40);   
 
   output_low(PIN_B5);
   output_low(PIN_B4);
  delay_us(5); //it was 5us
   */
   
}
   
   
   }
;I noticed that the MOSFET were in good operation mode becuase I get the 8VAC just immediately on the Sources Pins of the High Side MOSFETs;but eve when applying 270VDC I remain on the 8VAC even with 12VDC the output remain on the 8VAC;But after filtering of the AC I get nothing .

Meanwhile there is no wave form because there is no output after the Filtering circuit.!!

But you have to pay attention on the grounding;I don't know what to do with it but the ground is a problem.

Can you give me a copy of the codes you are using?I have been unable to calculate for SPWM generation.

Thanks,please help.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top