The Sizing Rule of Thumb for Any Arduino Motor Driver Module

The most common mistake in embedded robotics is sizing a motor driver based on the motor's nominal running current. When a motor starts from a dead stop or hits a mechanical bind, it draws stall current—often 5 to 10 times higher than its running current. If your driver cannot handle this spike, it will trigger thermal shutdown or release the magic smoke.

The Golden Sizing Rule: Your Arduino motor driver module must have a continuous current rating of at least 1.5 times the motor's stall current, and a peak current rating that exceeds the stall current entirely.

Worked Load Example: Sizing a 12V Actuator Drive

Suppose you are building an automated linear actuator using a standard 12V brushed DC motor (like the Pololu #3485 775 motor). The datasheet lists a nominal running current of 3.2A and a stall current of 15.5A at 12V.

  • Incorrect Sizing: Choosing a 5A driver because the motor 'only pulls 3 amps when moving.' The 15.5A startup spike will instantly fry a 5A H-bridge.
  • Correct Sizing: 15.5A (stall) × 1.5 = 23.25A. You need a driver rated for at least 24A continuous. A high-current module like the BTS7960 (rated ~24A continuous with adequate heat sinking, 43A peak) or a dual VNH5019 shield is required. A standard 2A L298N module will fail catastrophically here.

For a deeper look at how DC motor characteristics translate to driver requirements, Pololu's Brushed DC Motor Basics guide provides excellent torque-speed curve breakdowns.

Motor Type Comparison: Torque Curves and Driver Demands

Steppers, servos, and brushed DC motors have fundamentally different torque profiles and control requirements. Treating them as interchangeable is a fast track to bricked components. Below is a comparison of the three most common motor types used in microcontroller projects.

Motor Type Torque Curve Profile Control Needs Typical Cost Ideal Arduino Motor Driver Module
Brushed DC (e.g., 775, N20) Maximum torque at zero RPM (stall); drops linearly as speed increases. Simple H-bridge for direction; PWM for speed control. $3 - $15 TB6612FNG (low power) or BTS7960 (high power)
Bipolar Stepper (e.g., NEMA 17) Constant holding torque when energized; drops sharply at high RPMs due to coil inductance. Sequenced coil energization (microstepping); requires precise current limiting. $10 - $25 A4988 or TMC2209 (step/dir interface, not standard H-bridges)
Standard Servo (e.g., MG996R) High torque at low speeds; internal gearbox multiplies output. Drops off past rated speed. 50Hz PWM signal (1-2ms pulse width) for absolute position targeting. $4 - $18 No H-bridge needed. Use a PCA9685 I2C PWM board or direct Arduino GPIO with separate 6V BEC.

Notice that servos do not use a traditional H-bridge motor driver. They contain internal driver circuitry and only require a logic-level PWM signal and a robust 5V-6V power supply. Attempting to wire a servo through an L298N will result in erratic jitter and brownouts.

Wiring Identification and Logic vs. Motor Power

Modern motor drivers separate logic voltage (VCC) from motor voltage (VMOT). Confusing these two will instantly destroy your microcontroller. Here is the standard terminal identification for a MOSFET-based driver like the TB6612FNG or the DRV8871:

  • VMOT (or V_M): The raw, unregulated power supply for the motor (e.g., 12V or 24V battery). This line experiences massive current spikes.
  • VCC (or V_LOGIC): The logic power for the driver's internal IC (usually 3.3V or 5V). Connect this to the Arduino's 5V or 3.3V pin.
  • GND: Crucial: The ground for VMOT and the ground for VCC must be tied together and connected to the Arduino's GND. Without a shared reference ground, the PWM signals will float, causing the motor to spin out of control.
  • PWM / EN: Receives the Pulse Width Modulation signal from the Arduino to dictate speed or voltage duty cycle.
  • IN1 / IN2 (or DIR): Logic pins that determine the polarity of the H-bridge, dictating forward or reverse rotation.
  • OUT1 / OUT2: The high-current outputs that connect directly to the motor terminals.
Never power the motor from the Arduino's 5V pin. The onboard voltage regulator on an Uno or Nano can only supply ~500mA safely. A motor drawing 1A will cause the regulator to overheat and trigger thermal shutdown, resetting your board mid-cycle.

Diagnosing Failure Signatures: Hum, Overheat, and Stall

When an Arduino motor driver module misbehaves, it usually communicates the failure through physical symptoms before it dies completely. Here is how to read those signatures using a multimeter and your senses.

1. The High-Pitched Hum or Whine

Symptom: The motor vibrates or emits an audible high-frequency whine but does not rotate, or rotates very weakly.
Cause: PWM frequency mismatch or stalled rotor. If your Arduino analogWrite() frequency is too low (default is ~490Hz on most pins), the motor coils will physically vibrate at that frequency. If the motor is mechanically bound, it will draw stall current and hum.
Fix: Change the PWM pin to one that supports higher frequencies (like pin 5 or 6 on an Uno, which run at ~980Hz), or use a hardware timer library to push the PWM to 16kHz+ (above human hearing). Mechanically, check for jammed gears.

2. The 'Too Hot to Touch' Overheat

Symptom: The driver IC is burning hot, and the motor receives less voltage than expected.
Cause: You are likely using a BJT-based driver like the L298N. The L298N uses Darlington transistor pairs, which inherently drop 2V to 3V across the H-bridge. If you feed it 12V, your motor only sees 9V, and the driver dissipates the remaining 3V as heat (Watts = Volts × Amps).
Fix: Replace the L298N with a MOSFET-based driver like the TB6612FNG or DRV8871. MOSFETs have an R_DS(on) of mere milliohms, dropping less than 0.5V and running cool to the touch. For a comprehensive overview of modern MOSFET drivers, check the Texas Instruments Motor Driver portfolio.

3. Intermittent Stalling and Random Direction Changes

Symptom: The motor runs fine, then suddenly stops, or the Arduino resets entirely when the motor changes direction.
Cause: Voltage sag and inductive kickback. When a motor reverses, the collapsing magnetic field generates a massive reverse voltage spike (back-EMF). If this spike isn't clamped, it travels back into the Arduino's power rail, causing a brownout.
Fix: Ensure your driver module has flyback diodes populated. Add a large decoupling capacitor (e.g., 1000µF electrolytic, rated for at least 1.5x your VMOT voltage) directly across the VMOT and GND terminals on the driver board to absorb transient spikes.

Frequently Asked Questions

Can I use a standard L298N Arduino motor driver module for a high-torque stepper motor?

Technically yes, but practically no. The L298N is a simple dual H-bridge designed for brushed DC motors. While you can wire a bipolar stepper to it and sequence the coils via code, the L298N lacks active current limiting and microstepping capabilities. A NEMA 17 stepper rated for 1.5A per phase will overheat and lose torque if driven by a raw voltage H-bridge without current chopping. Always use dedicated chopper drivers like the A4988, DRV8825, or TMC2209 for steppers. These modules handle the complex microstepping decay modes automatically and require only two Arduino pins (STEP and DIR).

Why does my Arduino reset every time the motor starts moving?

This is almost always a power supply brownout caused by shared power rails or inadequate decoupling. When the motor starts, it draws stall current, which pulls the voltage of your power supply down. If the Arduino and the motor share the same battery or voltage regulator, the Arduino's operating voltage drops below its brownout threshold (usually around 4V for a 5V Uno), triggering a hardware reset.
The Fix: Use a dedicated power supply for the motor (connected to VMOT), and only share the Ground (GND) connection with the Arduino. If you must use a single battery, solder a 470µF to 1000µF electrolytic capacitor across the motor driver's power input terminals to supply the instantaneous current spike without sagging the main rail.

Do I need to add external flyback diodes on modern motor driver modules?

It depends on the silicon inside the module. Older or cheaper modules based on discrete BJT transistors (like basic L298N boards) require external 1N4007 flyback diodes wired in reverse-parallel across the motor terminals to safely route back-EMF to ground. Fortunately, most modern ICs—such as the TI DRV8871 or the Toshiba TB6612FNG—feature integrated clamp diodes inside the silicon package. If you are using a breakout board for one of these modern ICs, external diodes are redundant. Always verify by checking the specific IC datasheet; for instance, the Arduino official motor documentation outlines which legacy shields require external protection versus modern integrated shields.