Alright, let’s talk about messing around with H-bridges using MOSFETs. I needed to get a DC motor spinning both ways for a little project I was tinkering with, and the good ol’ H-bridge seemed like the way to go. Relays are too clunky and slow sometimes.

Getting Started – The Parts
First thing, I dug through my component drawers. Found a bunch of MOSFETs. I decided to try a mix initially – some N-channel ones for the low side, and P-channel ones for the high side. Seemed simpler on paper, less fuss than dealing with gate drivers for all N-channel, or so I thought at first. Grabbed some resistors too, you know, for the gates and maybe some pull-downs, gotta keep things from floating around.
- Grabbed four MOSFETs (two N-ch, two P-ch initially).
- Got some 10k resistors, maybe some lower values too for the gates.
- Needed a breadboard and jumper wires, obviously.
- Found a small DC motor to test with.
Putting it Together – Breadboard Time
I sketched out a basic diagram on a notepad. Looked simple enough. Then, I started plugging things into the breadboard. Pushed the four MOSFETs in, trying to keep the layout logical – like an ‘H’. Then came the wiring. Connecting the drains and sources together to form the bridge structure that the motor would sit across. Connected the sources of the N-channels to ground and the sources of the P-channels to the positive supply voltage.
Important bit: Wiring up the gates. I put resistors between my control signals (just jumper wires simulating a microcontroller signal for now) and the gates. Also added pull-down resistors on the N-channel gates and pull-up resistors on the P-channel gates to make sure they stayed off unless I specifically turned them on. Didn’t want any accidental shorts!
First Power Up – The Smoke Test (Almost)
Okay, time for the initial test. I didn’t connect the motor yet. Just used my multimeter and sometimes an LED with a resistor to check if the outputs were going high and low correctly. Used a bench power supply, set to a low voltage and current limit first – always a good idea.
So, I’d ground the gate of one N-channel and apply a positive voltage (like 5V) to the gate of the diagonally opposite P-channel. Checked the output voltage. Seemed okay. Then tried the other pair. Did this manually quite a few times, making sure only diagonal pairs were on at the same time. Never turn on two FETs on the same side (e.g., high-left and low-left) simultaneously – that’s a direct short from power to ground, bad news.

Hooking Up the Motor & Real Control
Felt brave enough to connect the motor. Also, I slapped some flyback diodes across the motor terminals, pointing inwards towards the supply rails. Motors can generate nasty voltage spikes when turned off, and those diodes help protect the MOSFETs. Didn’t have the exact perfect diodes, just used some regular rectifier diodes I had lying around, seemed okay for this small motor.
Then, I ditched the manual jumper wires and hooked up a simple Arduino board. Wrote a quick bit of code to switch the control pins – making sure to include a ‘dead time’ where all FETs are off for a tiny moment when switching direction. This prevents that shoot-through condition I mentioned.
Example sequence (simplified):
- Turn OFF all FETs.
- Wait a millisecond (dead time).
- Turn ON High-Left P-ch and Low-Right N-ch.
- Motor spins one way.
- To reverse: Turn OFF all FETs.
- Wait a millisecond.
- Turn ON High-Right P-ch and Low-Left N-ch.
- Motor spins the other way.
Observations and Tweaks
It worked! The motor spun forwards and backwards. Success. I noticed the P-channel MOSFETs got a bit warmer than the N-channel ones. That’s pretty common because they often have higher ‘on-resistance’. For this little motor, it wasn’t a big deal. If I were driving something bigger, I’d definitely consider using all N-channel FETs with proper gate drivers, or at least putting some small heat sinks on the P-channels.
Also double-checked the gate resistors. Too high, and the switching is slow (bad for efficiency, FETs heat up more). Too low, and you might pull too much current from your controller, or cause ringing. I think I settled on something like 100-ohm resistors directly on the gates for this setup.

So yeah, that was my process. Started with parts, breadboarded it carefully, tested outputs first, then connected the motor with protection diodes, and finally used a microcontroller for proper switching with dead time. It’s a pretty standard build, but going through the steps yourself really helps cement it in your head.