The Core Problem: Why Arduino Needs an H-Bridge

When building robotics or automated systems, connecting a DC motor directly to an H bridge Arduino setup is a mandatory intermediate step. The ATmega328P microcontroller on a standard Arduino Uno has a strict GPIO current limit. Each I/O pin can safely source or sink only 20mA (with an absolute maximum of 40mA before risking permanent silicon damage). Even a small 5V hobby DC motor can draw 200mA at no-load and exceed 1.5A during stall conditions. Attempting to drive this directly will instantly fry the microcontroller's output transistors.

An H-bridge solves this by acting as a high-current, bidirectional switch. It uses a low-power logic signal from the Arduino to control a separate, high-power circuit that drives the motor. This quick reference guide covers the most critical FAQs, component selections, and edge-case troubleshooting techniques for H-bridge motor control in 2026.

Quick Reference: Top H-Bridge ICs & Modules

Choosing the right driver depends on your voltage requirements, continuous current draw, and efficiency needs. Below is a comparison of the most widely used modules in the maker ecosystem.

Module / IC Topology Voltage Range Continuous Current Peak Current Typical Price (2026) Best Use Case
L298N BJT (Bipolar) 5V - 35V 2.0A per channel 3.0A $4.00 - $6.00 High-voltage, low-efficiency prototyping
DRV8833 NMOS 2.7V - 10.8V 1.5A per channel 2.0A $2.00 - $3.50 Low-voltage battery robots (2S LiPo)
TB6612FNG MOSFET 2.5V - 13.5V (VM) 1.2A per channel 3.2A $5.00 - $8.00 Efficient PWM speed control, compact bots
BTS7960 High-Power MOSFET 5.5V - 27V 43A (with heatsink) 50A+ $15.00 - $25.00 Heavy-duty actuators, e-bikes, winches

Frequently Asked Questions (FAQ)

1. How do I correctly wire a standard dual H-bridge to an Arduino Uno?

While pinouts vary slightly by manufacturer, the logical wiring for a standard dual-channel module (like the L298N or TB6612FNG) follows a universal pattern:

  • Logic Power (VCC / VDD): Connect to the Arduino's 5V pin. This powers the internal optocouplers or logic-level translation ICs.
  • Motor Power (VS / VM): Connect to the positive terminal of your external battery pack (e.g., 7.4V LiPo or 12V SLA).
  • Ground (GND): Critical Step. You must connect the H-bridge GND, the external battery GND, and the Arduino GND together. Without a common ground reference, the Arduino's 5V logic signals will float relative to the H-bridge, resulting in erratic motor behavior or no movement at all.
  • Direction Pins (IN1, IN2, IN3, IN4): Connect to standard digital I/O pins (e.g., D4, D5, D6, D7). Setting IN1 HIGH and IN2 LOW spins Motor A forward; reversing them spins it backward.
  • Enable/PWM Pins (ENA, ENB): Connect to Arduino hardware PWM pins (marked with a ~, such as D9, D10, D11). Remove the physical jumper caps on the module to allow the Arduino to dictate speed via analogWrite().

2. Why is my L298N module getting dangerously hot?

This is the most common complaint among beginners. The L298N utilizes older Bipolar Junction Transistor (BJT) technology. According to the STMicroelectronics L298N datasheet, the internal BJT switches exhibit a voltage drop of approximately 1.8V to 2.5V across the H-bridge at typical operating currents.

The Math: If your motor draws 1.5A at 12V, the L298N drops roughly 2V. This means 2V × 1.5A = 3 Watts of pure heat dissipated directly into the silicon junction. The module's small aluminum tab is entirely insufficient for continuous 3W dissipation, leading to thermal shutdown.

The Fix: If your application requires continuous currents above 1A, abandon the L298N. Upgrade to a MOSFET-based driver like the Pololu TB6612FNG or the Texas Instruments DRV8833. MOSFETs are rated by their RDS(on) (On-Resistance), which is typically under 0.5Ω, resulting in a voltage drop of less than 0.2V and drastically reduced heat generation.

3. How do I eliminate the high-pitched whine from my DC motors?

When using the analogWrite() function to control motor speed via PWM, the Arduino defaults to a frequency of roughly 490Hz (or 980Hz on pins 5 and 6). This frequency falls squarely within the range of human hearing. The motor's internal inductance and physical casing act as a speaker, translating the 490Hz electrical pulses into an audible, irritating whine.

The Fix: You must push the PWM frequency above the human hearing threshold (ideally >20kHz, typically 31.25kHz). You can achieve this by modifying the Arduino's hardware timer prescalers. For example, modifying Timer 1 (which controls pins 9 and 10 on the Uno) to use no prescaling will yield a 31.25kHz PWM signal, rendering the motor operation virtually silent. Refer to the official Arduino analogWrite() documentation for notes on how timer manipulation affects other libraries like Servo.

4. My Arduino randomly resets when the motor changes direction. How do I fix this?

This is a classic symptom of Inductive Kickback (Back-EMF) and ground-loop voltage sag. DC motors are inductive loads. When you abruptly cut power or reverse polarity, the collapsing magnetic field generates a massive reverse voltage spike that can easily exceed 50V. If this spike finds its way into your logic rail, it triggers the Arduino's brown-out detection (BOD) circuit, causing an immediate reset.

Actionable Troubleshooting Steps:

  1. Verify Flyback Diodes: Modules like the L298N have built-in 1N4007 diodes. However, these are slow-recovery rectifiers. For high-speed PWM or custom TB6612FNG breadboard builds, solder 1N5819 Schottky diodes across the motor terminals. Schottky diodes have near-zero reverse recovery time, clamping the spike instantly.
  2. Implement Decoupling Capacitors: Solder a 100nF (0.1µF) ceramic capacitor directly across the motor's physical terminals to suppress high-frequency brush noise. Additionally, place a bulk 220µF to 470µF electrolytic capacitor across the H-bridge's main power input terminals to provide instantaneous current during motor startup, preventing battery voltage sag.
  3. Adopt Star Grounding: Never daisy-chain your grounds. Run a dedicated ground wire from the battery negative terminal to the H-bridge GND, and a separate ground wire from the battery negative to the Arduino GND. This 'star' topology prevents noisy motor return currents from flowing through the Arduino's sensitive logic ground plane.

5. What is the correct power supply sizing for high-stall motors?

Makers frequently undersize their battery packs, focusing only on the motor's 'no-load' current. A motor that draws 200mA while spinning freely can draw 2.5A when stalled or starting from a dead stop. If your H-bridge is rated for 2A continuous, but your battery's Battery Management System (BMS) trips at 3A, your robot will shut down every time it hits a carpet edge or incline.

Rule of Thumb: Calculate the total stall current of all motors operating simultaneously. Select a Lithium-Ion or LiPo battery pack with a continuous discharge rating (C-Rating × Capacity) that is at least 1.5 times higher than your calculated total stall current. For a two-motor rover with 2A stall currents each (4A total), you need a battery capable of delivering at least 6A continuously without severe voltage depression.

Essential Multimeter Troubleshooting Checklist

Before writing a single line of code, verify your hardware with a digital multimeter (DMM):

  • Logic Voltage Check: Measure between the H-bridge VCC and GND. It must read a stable 4.8V - 5.2V. If it reads 3.3V, you are likely using a 3.3V Arduino (like the Due or ESP32) and may need a logic-level shifter for older 5V H-bridge ICs.
  • PWM Signal Verification: Set your DMM to DC Voltage. Run an analogWrite(pin, 127) sketch. You should read approximately 2.5V (50% duty cycle of 5V). If you read 0V or 5V, you have wired the Enable pin to a non-PWM digital pin.
  • Motor Terminal Output: With the motor disconnected, measure the voltage across Output A and Output B while commanding forward and reverse. The polarity should swap cleanly. If it hovers around 0V, your direction logic pins are likely floating or improperly grounded.

By understanding the physical limitations of BJT versus MOSFET topologies, managing inductive kickback with proper diode selection, and adhering to strict star-grounding practices, your H bridge Arduino projects will transition from frustrating prototypes to reliable, deployment-ready systems.