The speed of a brushed DC motor is directly proportional to the applied voltage and inversely proportional to the magnetic flux. To control DC motor speed efficiently without wasting power as heat in a linear resistor, you use Pulse Width Modulation (PWM). The golden rule for sizing a DC motor speed controller is strict: select a driver rated for at least 1.5 times the motor’s stall current, not its continuous running current. Ignoring this ratio is the primary reason hobbyist motor drivers melt during startup.

This guide provides the exact physics, sizing math, wiring protocols, and failure diagnostics needed to match a brushed DC load to the correct PWM driver, terminating in a concrete hardware recommendation.

The Physics of DC Motor Speed and Load Sizing

The rotational speed ($N$) of a DC motor is governed by the back-electromotive force (back-EMF) equation:

$N \propto \frac{V - I_a R_a}{\Phi}$

Where $V$ is supply voltage, $I_a$ is armature current, $R_a$ is armature resistance, and $\Phi$ is magnetic flux.

As the motor spins, it generates a reverse voltage (back-EMF) that opposes the supply. When you apply a PWM signal, you are rapidly switching the full supply voltage on and off. The motor's internal inductance smooths this pulsed voltage into an effective average DC voltage, dictating the speed. For a deep dive into the underlying electromagnetic theory, the All About Circuits DC Motor chapter provides excellent foundational math.

Sizing Rule of Thumb: Always size your PWM driver for the stall current, not the nominal continuous current. When a motor starts from zero RPM, back-EMF is zero. The only thing limiting current is the tiny armature resistance ($R_a$), resulting in a massive current spike (stall current) that can be 5x to 8x the running current.

Worked Load Example: 12V Conveyor Drive

Suppose you are driving a small conveyor belt with a 12V brushed DC motor. The datasheet specifies:

  • Nominal Voltage: 12V DC
  • Continuous Running Current: 5A
  • Stall Current: 25A

If you size a driver for the 5A continuous load (e.g., a standard 10A L298N module), the 25A startup spike will instantly trigger the driver's over-current protection or melt its internal bond wires. Applying the 1.5x safety margin for startup transients and thermal derating:

Required Driver Peak Current = 25A (Stall) × 1.5 = 37.5A.

You must select a driver capable of handling at least 40A peak. Furthermore, the PWM frequency should be set between 1 kHz and 20 kHz—low enough to minimize MOSFET switching losses, but high enough to remain above human hearing range and allow the motor inductance to smooth the ripple.

Motor Type Comparison: Where Brushed DC Wins

Not every load requires a brushed DC motor, but for variable speed control under high starting loads, it remains the most cost-effective choice. Steppers and servos are fundamentally different architectures and are not interchangeable with standard DC drives.

Motor Type Torque Curve Control Needs Relative Cost Best Application
Brushed DC Maximum torque at zero RPM (stall), drops linearly as speed increases. Simple PWM for speed; H-bridge for direction. $ Conveyors, winches, traction drives, variable-speed pumps.
Stepper High holding torque at zero RPM, but torque collapses rapidly at high speeds. Step/Direction pulses; requires dedicated chopper driver (e.g., A4988, TMC2209). $$ 3D printers, CNC routers, precise open-loop positioning.
BLDC (Brushless) High torque across a wide speed band; highly efficient. 3-phase commutation via ESC; requires Hall sensors or sensorless back-EMF zero-crossing detection. $$$ Drones, RC vehicles, high-speed spindles, HVAC fans.
AC Induction Low starting torque (without caps); peaks near synchronous speed. VFD (Variable Frequency Drive) for speed control; complex parameter tuning. $$$$ Industrial compressors, heavy machinery, mains-powered blowers.

For our 12V conveyor example, the Brushed DC motor is the correct fit. It delivers the highest starting torque to break the static friction of the belt, and its speed can be smoothly adjusted via a single PWM pin on a microcontroller.

Wiring and Terminal Identification for PWM Control

When wiring a high-power PWM driver (like an H-bridge or single-MOSFET module) to a brushed DC motor, separating the high-current power path from the low-voltage logic path is critical to prevent ground loops and logic brownouts.

Standard High-Power Driver Terminals

  • B+ / V_MOT: Connects to the positive terminal of your battery or power supply. Use thick wire (e.g., 10 AWG for a 40A load) and crimped ring terminals.
  • B- / GND_MOT: Connects to the power supply negative. Crucial: This heavy ground must be bonded to the microcontroller's logic ground at a single star point to ensure the PWM signal has a common reference.
  • M+ / M-: The motor output terminals. Polarity dictates direction if using an H-bridge.
  • VCC / V_LOGIC: The 5V or 3.3V logic supply for the driver's optocouplers or gate driver ICs. Connect to your Arduino/ESP32 5V pin.
  • PWM_IN / R_PWM: The signal input. Connect to a hardware PWM-capable GPIO pin on your microcontroller.
  • EN / R_EN: Enable pin. Must be pulled HIGH (to VCC) to activate the driver. Leaving this floating will result in erratic motor behavior.
Flyback Diode Requirement: DC motors are massive inductors. When the PWM MOSFET turns off, the collapsing magnetic field generates a high-voltage reverse spike. If your driver module does not have built-in Schottky clamp diodes (most modern modules do), you must wire an external fast-recovery or Schottky diode (e.g., 100V, 10A) in reverse parallel across the motor terminals. Failure to do so will punch through the MOSFET's drain-source junction, destroying the driver instantly.

Failure Signatures: Diagnosing Hum, Overheat, and Stall

Motor drives rarely fail without warning. By monitoring acoustic and thermal signatures, you can diagnose issues before silicon melts. For comprehensive thermal management guidelines, refer to the Texas Instruments Motor Driver design resources.

Symptom Root Cause Measurement / Fix
Audible Hum / Whine PWM frequency is set too low (typically < 1 kHz), causing the motor laminations to physically vibrate at the switching frequency. Increase PWM frequency in code to at least 4 kHz. If humming persists at 20 kHz, check for mechanical cogging or bearing wear.
Driver Overheat Continuous RMS current exceeds the MOSFET's thermal limit, or PWM frequency is too high, causing excessive switching losses in the gate. Measure current with a clamp meter. If drawing >80% of driver rating, add forced air cooling or downgrade the PWM frequency to reduce switching heat.
Motor Stalls / Clicks Load torque exceeds the motor's breakdown torque at the current PWM duty cycle. Current spikes to stall level, tripping the driver's Over-Current Protection (OCP). Increase the PWM duty cycle to provide more average voltage and torque. If it still stalls at 100% duty, the motor is physically undersized for the mechanical load.
Erratic Speed / Jitter Logic ground bounce. The high-current motor return path is sharing a thin wire with the microcontroller ground, corrupting the PWM signal. Verify the star-ground topology. Ensure the heavy B- wire does not pass through the same breadboard or terminal block as the logic GND.

The Decision Path: Picking Your Exact Driver

Selecting the right driver eliminates guesswork. Use the decision matrix below based on your motor's stall current and voltage requirements. Do not size based on continuous current.

If Your Motor Stall Current Is... And Voltage Is... Then Select This Driver Architecture Concrete Part / Module Pick
Under 3A Up to 15V Dual H-Bridge (MOSFET based) TB6612FNG (Avoid the L298N; its BJT design wastes 2V-3V as heat).
3A to 15A Up to 24V Single or Dual High-Current H-Bridge VNH5019 Motor Shield or DRV8870 breakout.
15A to 50A Up to 27V Infineon High-Power Half-Bridge ICs IBT-2 Module (Dual BTS7960 ICs configured as an H-bridge).
Over 50A 12V - 48V Discrete MOSFET H-Bridge or ESC Custom discrete IRFB4110 MOSFET bridge or a repurposed VESC (Vedder ESC).

Final Recommendation for the Worked Example

Returning to our 12V conveyor drive with a 25A stall current: the load falls squarely into the 15A to 50A tier. The default, most robust, and cost-effective pick is the IBT-2 module (based on dual BTS7960 ICs).

The IBT-2 handles up to 43A peak, features built-in Schottky clamp diodes, includes optocouplers for logic isolation, and costs roughly $12 to $15. Wire your 12V battery to B+ and B-, connect the motor to M+ and M-, tie the R_EN and L_EN pins to the Arduino 5V rail, and feed your PWM signal into R_PWM. Set your microcontroller's PWM frequency to 4 kHz, and you will have smooth, thermally stable DC motor speed control that will survive the daily abuse of startup stall currents.