Selecting an Arduino motor driver isn't about picking the cheapest breakout board; it is about matching the driver's continuous and peak current limits to your motor's specific stall and running currents. A mismatched driver will either brownout your microcontroller via ground bounce or melt its internal H-bridge MOSFETs. The ubiquitous L298N, for example, drops over 2V across its bipolar Darlington transistors, starving low-voltage motors and wasting power as heat. Modern designs demand MOSFET-based drivers with precise current chopping and low Rds(on) resistance.
Here is the exact framework for pairing motors with drivers, sizing the silicon, and wiring the terminals without frying your setup.
Motor Types and Their Driver Demands
Before selecting a driver, you must define the motor's torque curve and commutation needs. Treating a stepper motor and an RC servo as interchangeable is a critical error: a stepper holds position via magnetic detents and open-loop pulse counting, while a servo uses an internal potentiometer or encoder for closed-loop absolute position feedback. Driving a stepper with a servo signal (or vice versa) will result in immediate mechanical failure or lost position data.
| Motor Type | Torque Curve Profile | Control Needs | Recommended Driver ICs | Approx Cost |
|---|---|---|---|---|
| DC Brushed | Max torque at stall (0 RPM); drops linearly as speed increases. | H-bridge for polarity (DIR); PWM for speed control. | TB6612FNG, DRV8871, VNH5019 | $3 - $8 |
| Stepper (Bipolar) | Max holding torque at 0 RPM; drops sharply at high RPM due to coil inductance. | Dual H-bridge with step/dir pulse translation and active current chopping. | TMC2209, A4988, DRV8825 | $5 - $14 |
| BLDC (Outrunner/Inrunner) | High efficiency, flat torque curve in the mid-band; requires active commutation. | 3-phase commutation (6 MOSFETs) and back-EMF or Hall sensor feedback. | DRV8313, SimpleFOC shields, ESCs | $12 - $30 |
| RC Servo | High torque at low speed via internal gearbox; limited continuous rotation. | 50Hz PWM pulse width (1-2ms). No external H-bridge needed. | PCA9685 (I2C multiplexer), direct GPIO | $2 - $6 (PCA9685) |
Sizing Your Arduino Motor Driver: The Worked Load Example
The most common mistake hobbyists make is sizing a driver based on the motor's running current. The correct sizing rule of thumb dictates that the driver's continuous current rating must exceed the motor's expected running current by at least 50%, and the driver's peak current rating must exceed the motor's stall current. If the driver lacks hardware current limiting, a mechanical jam will force the motor into a stall, drawing maximum current and triggering the driver's thermal shutdown (or causing catastrophic silicon failure).
Worked Sizing Example: 12V Planetary Gearmotor
Let's size a driver for a 12V DC planetary gear motor driving a small conveyor belt. We pull the datasheet and measure the following:
- No-load current: 0.3A
- Running current (under expected 2kg load): 1.5A
- Stall current (shaft locked): 4.0A
The Math:
Minimum Continuous Rating = 1.5A × 1.5 = 2.25A
Minimum Peak Rating = 4.0A
Driver Selection:
A standard TB6612FNG breakout is rated for 1.2A continuous and 3.2A peak. It will fail this application because the 4.0A stall exceeds its peak limit, and 1.5A exceeds its continuous limit. Instead, we select a TI DRV8871 carrier board, rated for 3.6A continuous. Because the DRV8871 handles the continuous load with headroom and its overcurrent protection (OCP) will safely throttle the 4.0A stall without melting, it is the correct choice. For high-side margin, a VNH5019 (12A continuous) is practically bulletproof for this load.
Wiring Terminals and Failure Signatures
Modern MOSFET drivers share a common terminal topology, but miswiring the logic and motor grounds is the fastest way to destroy an Arduino's ATmega328P or ESP32 GPIO pins.
| Terminal | Function | Wiring Rule |
|---|---|---|
| VM / V+ | Motor Power Supply | Connect to main battery/PSU. Add a 100µF electrolytic capacitor across VM and GND to absorb inductive kickback. |
| VCC / VDD | Logic Power Supply | Connect to Arduino 5V or 3.3V. Must match the microcontroller's logic level. |
| GND | Common Ground | CRITICAL: Must be tied to both the Motor PSU ground and the Arduino GND. No common ground = floating logic signals. |
| PWM / IN1 | Speed / Direction A | Connect to an Arduino hardware PWM pin (e.g., Pin 3, 5, 6, 9, 10, 11 on Uno). |
| DIR / IN2 | Direction / Brake | Connect to any standard digital GPIO pin. |
| STBY / SLP | Standby / Sleep | Tie to VCC for always-on, or control via GPIO to save quiescent current. |
Diagnosing Failure Signatures
When a motor system fails, the physical symptoms tell you exactly where the mismatch occurred. Do not just swap parts; read the signatures.
- Humming or Buzzing (Stepper Motors): The rotor is vibrating but not turning. This indicates the driver's current limit (VREF) is set too low to overcome the rotor's inertia, or the acceleration ramp in your code is too aggressive, causing the rotor to slip magnetic detents (missed steps). Fix: Adjust the trimpot VREF (for an A4988, Vref = Imax / 2) or lower the
setMaxAcceleration()value in your AccelStepper library. - Driver Overheat (DC/Stepper): The IC is too hot to touch (>85°C). On modern MOSFET drivers, this means you exceeded the continuous Rds(on) thermal limits without a heatsink or forced air, or your PWM frequency is too high, causing excessive switching losses. Fix: Calculate I²R losses, add a copper heatsink, or drop the PWM frequency from 20kHz down to 1kHz-4kHz for heavy inductive loads.
- Stalling Under Load (DC Motors): The motor stops moving, and the driver gets hot. The mechanical load exceeded the motor's torque curve at that specific RPM, forcing it into a stall. The driver is now dumping the full stall current as heat. Fix: Increase gear reduction or use a higher-torque motor. Increasing the voltage will only increase the speed, not necessarily the stall torque, and may exceed the driver's VM rating.
Quick-Start Decision Framework
Use this framework to lock in your motor and driver architecture before writing a single line of code:
- High speed, low precision (wheels, conveyors, winches): Choose a DC Brushed Motor paired with a PWM H-bridge driver (DRV8871 or TB6612FNG). Use encoders on the motor shaft if you need closed-loop speed control.
- Low speed, high precision open-loop (3D printers, CNC routers, linear actuators): Choose a Bipolar Stepper Motor paired with a chopper driver (TMC2209 for silent operation, A4988 for budget builds). Ensure your power supply voltage is at least 4x the motor's rated voltage to overcome coil inductance at speed.
- High dynamic response, closed-loop (robotic arms, gimbals, camera sliders): Choose a BLDC Motor paired with a Field Oriented Control (FOC) driver (SimpleFOC shield) or a High-Torque Servo. These require complex commutation but offer superior torque density and efficiency.
By matching the torque curve to the application and sizing the driver for the worst-case stall condition, you eliminate the thermal and electrical gremlins that plague most embedded motion projects.






