The circuit of a DC motor is rarely just a power source and two wires. To control speed, direction, and torque reliably, you must design a power stage that handles inductive kickback, manages thermal dissipation, and matches the motor's commutation requirements. Whether you are driving a simple brushed gearmotor for a conveyor or a 3-phase brushless (BLDC) motor for a robotic joint, the driver topology dictates your success.
For brushed DC motors, the foundational circuit is the H-bridge, which allows bidirectional current flow and PWM speed control. For BLDC motors, you need a 3-phase inverter paired with either hall-effect sensors or sensorless back-EMF zero-crossing detection. This guide cuts through the theory to give you exact sizing rules, wiring pinouts, and a concrete decision path for your next build.
The Core Decision: Brushed vs. BLDC Circuit Architecture
Choosing the motor type dictates the complexity of your circuit. Brushed motors handle commutation mechanically via carbon brushes and a split-ring commutator, keeping the external circuit simple. BLDC motors move commutation to the electronic controller, requiring a more complex 3-phase drive but offering superior efficiency and lifespan.
| Criteria | Brushed DC (BDC) | Brushless DC (BLDC) |
|---|---|---|
| Torque Curve | Maximum torque at stall (0 RPM); drops linearly as speed increases. | Flat torque curve up to base speed; drops off in the constant-power region. |
| Circuit Topology | H-Bridge (4 MOSFETs/BJTs) or single MOSFET for unidirectional. | 3-Phase Inverter (6 MOSFETs) + Gate Drivers + Commutation Logic. |
| Control Needs | Simple PWM for speed; polarity swap for direction. | Requires rotor position feedback (Hall sensors or sensorless BEMF). |
| Typical Cost (2026) | $5 - $25 (Motor + basic driver IC) | $40 - $150+ (Motor + FOC controller) |
| Best Load Profile | Intermittent duty, high starting torque, low precision (e.g., winches, linear actuators). | Continuous duty, high RPM, high precision (e.g., CNC spindles, robot joints). |
Sizing the Drive: A Worked Load Example
A common mistake is sizing a motor driver based on the motor's continuous current rating. Motors draw significantly more current when starting from a dead stop or stalling under heavy load. If your driver cannot handle the stall current, the MOSFETs will overheat and fail in seconds.
Driver Peak Current Rating ≥ 1.5 × Motor Stall Current.
Driver Continuous Current Rating ≥ 1.25 × Motor Continuous Current.
Worked Example: 12V Conveyor Gearmotor
Assume you are driving a 12V nominal brushed gearmotor. The datasheet specifies:
- Continuous Current ($I_{cont}$): 3.0 A
- Stall Current ($I_{stall}$): 14.0 A
- Ambient Temperature: 25°C (no active cooling on the driver)
Calculation:
- Required Peak Driver Current: $14.0 \text{ A} \times 1.5 = 21.0 \text{ A}$
- Required Continuous Driver Current: $3.0 \text{ A} \times 1.25 = 3.75 \text{ A}$
Component Selection: You need an H-bridge rated for at least 21A peak. The Pololu Dual VNH5019 Motor Driver is a perfect fit. It handles 12A continuous (well above 3.75A) and can sustain 30A peak for short bursts, safely clearing the 21A requirement without triggering its internal thermal shutdown.
Wiring and Terminal Identification
Correct terminal identification prevents catastrophic shoot-through (where high and low-side MOSFETs on the same leg conduct simultaneously, shorting the power supply).
Brushed DC (H-Bridge) Terminals
- VM / VCC: Motor supply voltage (e.g., 12V or 24V from your battery/PSU).
- VDD / VLOGIC: Logic supply (usually 3.3V or 5V from your microcontroller). Never tie VM and VDD together unless the datasheet explicitly permits it.
- OUT1 / OUT2 (or M1 / M2): The motor terminals. Polarity here determines rotation direction.
- IN1 / IN2: Logic inputs. (IN1=HIGH, IN2=LOW) drives forward; (IN1=LOW, IN2=HIGH) drives reverse.
- PWM: Speed control input. Feed a 1kHz to 20kHz square wave here.
Brushed motors are massive inductors. When the H-bridge turns off, the collapsing magnetic field generates a high-voltage spike ($V = L \frac{di}{dt}$). Most modern driver ICs (like the TI DRV8871) include internal clamping diodes. However, if you are building a discrete MOSFET H-bridge, you must add external Schottky flyback diodes across the motor terminals to prevent the back-EMF from punching through the MOSFET drain-source junction.
BLDC (3-Phase) Terminals
- U, V, W: The three motor phases. Swapping any two will reverse the motor direction, but doing so while powered will destroy the inverter.
- Hall A, B, C: Rotor position feedback signals (if sensored).
- DC+, DC-: High-voltage DC bus input. Requires heavy gauge wire and low-ESR bulk capacitors (e.g., 470μF, 50V) placed physically close to the inverter to absorb high-frequency ripple.
Matching the Controller to the Motor
The controller must match both the voltage domain and the commutation logic of the motor. Here is how to pair them based on your application.
| Motor Type | Recommended Driver IC / Board | Control Logic / Library | Approx. 2026 Price |
|---|---|---|---|
| Brushed (< 5A) | Texas Instruments DRV8871 Breakout | Simple analog PWM via Arduino analogWrite() |
$6 - $10 |
| Brushed (5A - 30A) | STMicroelectronics VNH5019 or BTS7960 Module | PWM with current-sense feedback via ADC | $15 - $25 |
| BLDC (Sensored) | ODrive v3.6 or SimpleFOC Shield | Field Oriented Control (FOC) via UART/CAN | $80 - $140 |
| BLDC (Sensorless) | Turnigy Multistar BLHeli_32 ESC | DShot protocol (RC hobby standard) | $25 - $40 |
For BLDC circuits utilizing Field Oriented Control (FOC), the ODrive robotics controller remains the gold standard for hobbyists and light-industrial prototyping. It handles the complex Clarke and Park transforms internally, allowing you to command exact torque or position via simple serial commands.
Failure Signatures: Diagnosing Hum, Overheat, and Stall
When your motor circuit misbehaves, the physical symptoms point directly to the electrical fault. Use this diagnostic matrix before replacing components.
| Symptom | Root Cause | The Fix |
|---|---|---|
| Audible Hum / Whine | PWM frequency is in the human hearing range (typically 400Hz - 1kHz). | Increase microcontroller PWM frequency to ≥ 20kHz (ultrasonic). For Arduino, adjust Timer1 registers. |
| Driver Overheat (Idle) | Running a brushed motor at low duty cycle (e.g., 10%) without active cooling. RMS current remains high while the motor's internal fan spins too slowly to cool itself. | Add a dedicated heatsink to the driver MOSFETs, or increase the gear reduction so the motor runs at a higher duty cycle. |
| Sudden Driver Death (Magic Smoke) | Inductive kickback destroyed the H-bridge due to missing or undersized flyback diodes, or excessive parasitic inductance in long motor wires. | Keep motor wires short and twisted. Verify TVS diodes or Schottky clamps are present across the load. |
| BLDC Stutter / Cogging | Hall sensor wiring mismatch or incorrect pole-pair count configured in the FOC controller. | Verify Hall A/B/C sequence with an oscilloscope. Update the controller firmware with the exact motor pole-pair count (e.g., 7 for a 14-pole motor). |
The Final Decision Path: Pick Your Drive
Stop guessing. Follow this decision tree to lock in your motor and driver selection based on your mechanical load profile.
- IF your load requires high holding torque at zero speed, precise micro-stepping, and open-loop position control → Stop. You need a Stepper Motor (e.g., NEMA 23 with a TMC2209 driver), not a DC motor.
- IF your load requires continuous high RPM (>3000 RPM), high efficiency, and zero maintenance → Pick a BLDC Motor paired with an ODrive v3.6 controller.
- IF your load requires massive starting torque, operates intermittently, and cost is a primary constraint → Pick a Brushed DC Gearmotor.
If you are building a standard DIY robotics platform, automated gate, or linear actuator and need a reliable, high-torque brushed circuit without over-engineering it, use this exact combination:
1. Motor: 12V 100W Brushed Planetary Gearmotor (e.g., BaneBots RS-550 or equivalent 775-class motor with a 10:1 reduction).
2. Driver: Pololu Dual VNH5019 Motor Driver Shield for Arduino.
3. Power: 3S LiPo Battery (11.1V nominal, 12.6V fully charged) with a 40A XT60 fuse.
This setup provides 30A of peak headroom, native Arduino pin mapping, and built-in current sensing for stall detection, giving you a robust circuit of a DC motor that will survive the inevitable mistakes of prototyping.






