I made an H bridge consisting of 2 PNP and 2 NPN transistors. See the schematic below. enter image description here Here is the problem: When I set pin 9 on the Arduino HIGH and pin 8 LOW (now the upperright PNP and buttomleft NPN should be on and the other 2 off), the bottomright NPN gets very hot, hotter than the 2 transistors which are on. And the motor I am driving doesn't turn fast. When I set pin 8 HIGH and pin 9 LOW, the circuit works just fine. The transistors which are on are getting hot a little bit, and the other 2 transistors stay cool and the motor does turn fast.

Does anyone know where the problem lies? Thanks!

closed as off-topic by gre_gor, VE7JRO, sempaiscuba, Greenonline, per1234 Sep 2 '18 at 22:44

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "This question does not appear to be about Arduino, within the scope defined in the help center." – gre_gor, VE7JRO, sempaiscuba, Greenonline, per1234
If this question can be reworded to fit the rules in the help center, please edit the question.


Your problem is to do with the way you are driving the circuit. That is - your circuit is a 9V circuit, but you are trying to control it with 5V. Both your PNP transistors will be allowing current through, since you can never turn them off properly. That means the current through your motor will be massively reduced, and your transistors will just get hot.

There is a reason people use H-bridge chips: unless you have the same voltage everywhere driving the H-bridge is difficult. Integrated devices take those problems away from you by including the proper driver circuit.

If you do really want to go the route of doing it manually I'd suggest:

  1. Replace your BJTs with MOSFETS (P in the top, and N in the bottom).
  2. Pull up the P-channel's gates to +9v, and pull the N-channel's down to 0V, with resistors (10kΩ would suffice).
  3. Add two more N-channel MOSFETs to switch the P-channel's gates to ground to turn them on
  4. Separate out your control signals to give you manual control over each of the four signals (otherwise you'd need to add even more circuitry to invert either the upper or lower control signals).


simulate this circuit – Schematic created using CircuitLab

Of course, make sure your MOSFETs have suitable thresholds for logic levels.

  • Set A1 and B2 HIGH and the others LOW for one direction.
  • Set B1 and A2 HIGH and the others LOW for the other direction.
  • Set A1 and A2 HIGH and B1 and B2 LOW (or the other way around) for brake.

Take care to never switch both A1 and B1 HIGH at the same time (or A2 and B2), or you'll toast your circuit. You'll create a dead short circuit between 9V and GND and your MOSFETs will explode (or at least get very hot and your battery will go flat very rapidly). It's best to always switch all outputs to LOW before making any change to the driving state for safety (all LOW is "freewheel" mode).

Not the answer you're looking for? Browse other questions tagged or ask your own question.