# Simplifying H-Bridge Design

Joined Nov 4, 2018
3
Hi everyone,

I am currently trying to build a PWM H-bridge, it has a power line of 12 V and the arduino uno provides the PWM. The MOSFETS I have are: IRLZ44S (N-channel) and FQD11P06TM (P-channel). Basically, the p-type MOSFETS go in the upper side of the circuit and the n-channel go at the bottom. I would be building 6 of these circuits to run 6 motors in an ROV. At the moment I am using this circuit (see image below) but I have been told that it might have problems due to problems of straight through currents which could burn the MOSFETS so I would have to add some capacitors. I honestly don't know which resistor values I should use and where to place the capacitors (or their values). Any help will be appreciated. I am more than welcome to accept a different H-bridge circuit which is simpler than the other one as it uses BJTs and, ideally, I would only like to use a simple circuit with only 4 transistors (the MOSFETS). Thank you for your support.

#### Attachments

• 326.4 KB Views: 28

#### crutschow

Joined Mar 14, 2008
23,772
Unfortunately there's no really simple way to do this.
To avoid shoot-through in an H-bridge, you need a non-overlapping clock (both signals never high at the same time).
Below is the LTspice simulation of a circuit that does that with a CD4001 NOR gate IC and a CD4050 non-inverter-buffer IC.
Note how the V1 and V2 signals are non-overlapping. The shown RC values give a non-overlap of about 1μs.

Three of the buffers on each output are paralleled to better drive the high MOSFET gate capacitance.
The P-MOSFET gates are cross-coupled with the N-MOSFET drains to get the proper phase and delay.

Last edited:

Joined Nov 4, 2018
3
Hi, thanks for your reply. That is really a complex circuit. I was thinking, could this be solved by writing down a delay in the arduino code ? If this could be solved in this manner, I am using arduino uno PWM, how long should the delay be ?

#### crutschow

Joined Mar 14, 2008
23,772
That is really a complex circuit. I was thinking, could this be solved by writing down a delay in the arduino code ? If this could be solved in this manner, I am using arduino uno PWM, how long should the delay be ?
Two IC chips, two capacitors, and two resistors are not really that complex, but yes, it might be possible to do the delay in code, however I'm not familiar with doing that.

Note that this is a non-overlap delay (two outputs never high at the same time), not a simple delay of the signal .
My simulation has a delay of about 1μs.

But you still need a driver to give a fast rise/fall time signal at the MOSFETs' high-capacitance gates.
Several CD4049 or CD4050 in parallel can be used for that.

#### BobTPH

Joined Jun 5, 2013
2,109
You would have to modify the circuit to have 4 separate controls, one for each MOSFET, then you can turn the on and off individually with delays. I do not know about Arduino, but PICs have PWM modules that are able to do this automatically with a programmable delay.

Bob

#### crutschow

Joined Mar 14, 2008
23,772
PICs have PWM modules that are able to do this automatically with a programmable delay.
Can they do a separate delay or duty-cycle variation for the rise and fall to generate the non-overlap waveform, such as shown below?

#### djsfantasi

Joined Apr 11, 2010
5,838
Not quite so simple with the Arduino, but doable.

Code:
int SDelay = 50 // milliseconds
...
digitalWrite(pin1,state1);
delay(SDelay);
digitslWrite(pin2,state2);
...
Goven that pin1 & pin2 are connected to the MOSFETs and state1 & state2 are the desired signal (LIW/HIGH).

#### djsfantasi

Joined Apr 11, 2010
5,838
Can they do a separate delay or duty-cycle variation for the rise and fall to generate the non-overlap waveform, such as shown below?

View attachment 172959
Similar to my previous example, you can customize the delay times. (Sorry that I cant be more detailed; I’m sitting in a theatet)

#### crutschow

Joined Mar 14, 2008
23,772
Not quite so simple with the Arduino, but doable.

Code:
int SDelay = 50 // milliseconds
...
digitalWrite(pin1,state1);
delay(SDelay);
digitslWrite(pin2,state2);
...
Goven that pin1 & pin2 are connected to the MOSFETs and state1 & state2 are the desired signal (LIW/HIGH).
So that can be done with different delays for the rise and fall of each waveform?

#### BobTPH

Joined Jun 5, 2013
2,109
Can they do a separate delay or duty-cycle variation for the rise and fall to generate the non-overlap waveform, such as shown below?

View attachment 172959
Not sure, I would have to read the details in the datasheet. But it is intended for driving H-bridges and avoiding shoot-through.

Bob

#### djsfantasi

Joined Apr 11, 2010
5,838
So that can be done with different delays for the rise and fall of each waveform?
Yes.

#### pmd34

Joined Feb 22, 2014
499
Some of the Atmel microcontrollers also have this ability:
See for example section 18- AWeX in the data sheet for the ATXMEGA micrcontrollers:

For some more information on FET switching, driving and shoot-through, this application note is very good:
https://www.vishay.com/docs/70611/70611.pdf

But to be honest it is much easier just using and off-the-shelf H-bridge IC such as the A4952, it can also look after current limiting, and you don't have to worry about any of the potential problems, such as back EMF voltage spikes from the switching.

Joined Nov 4, 2018
3
Hi, thank you all for your replies but I still do not know how to fix this circuit. Please if someone knows a better (and simpler) H-bridge than this one would you posting it, please ? Or at least tell me exactly how to fix this one ? Thanks.

#### crutschow

Joined Mar 14, 2008
23,772
Hi, thank you all for your replies but I still do not know how to fix this circuit. Please if someone knows a better (and simpler) H-bridge than this one would you posting it, please ? Or at least tell me exactly how to fix this one ? Thanks.
My post #2 is a simple as I know.

Your other choices already given to to you, are to use a micro, or a dedicated bridge driver such as pdm34 suggested.

I doubt you will find anything simpler.