DC motor speed control is the method of regulating a direct current motor's rotational velocity (RPM) by varying either the armature voltage, the field flux, or the duty cycle of a pulsed power supply. In a real circuit or installation, implementing speed control changes the back-EMF equilibrium point, which shifts the motor's torque-speed curve and directly dictates the thermal dissipation requirements of your driver components. Whether you are building an automated conveyor or an e-bike throttle, understanding how to manipulate this curve is the difference between a smooth, efficient drive and a melted MOSFET.
The Core Physics of DC Motor Speed Control
To control a DC motor, you must understand the relationship between voltage, current, speed, and torque. In a permanent magnet brushed DC motor, speed is strictly proportional to the applied armature voltage, while torque is strictly proportional to the armature current.
When you apply voltage, the motor spins and generates its own internal voltage called Back-EMF (Electromotive Force) that opposes the supply. The motor reaches a steady speed when the supply voltage equals the Back-EMF plus the small voltage drop across the armature resistance. Therefore, to slow the motor down, you must lower the effective supply voltage so it balances at a lower Back-EMF (lower RPM).
Imagine water flowing through a pipe to spin a waterwheel. Linear control is like partially closing a valve to restrict flow; the valve absorbs the pressure difference and gets hot. PWM (Pulse Width Modulation) is like leaving the valve fully open, but rapidly snapping it completely open and completely shut 1,000 times a second. The waterwheel's inertia smooths out the pulses, spinning at a fraction of full speed, while the valve stays cool because it is never partially restricting flow.
Linear Voltage Dropping vs. PWM: A Numeric Breakdown
Beginners often try to control speed by simply dropping the voltage using a linear regulator or a transistor operating in its active (linear) region. This is a thermal nightmare. Let us look at a worked numeric example to prove why PWM is the industry standard.
The Scenario: You have a 24V nominal brushed DC motor. You want to run it at an effective 18V to achieve 75% of its no-load speed. Under this mechanical load, the motor draws 5 Amps.
Method 1: Linear Voltage Dropping
You use a power transistor to drop the 24V supply down to 18V. The transistor must absorb the 6V difference.
- Power dissipated as heat = Voltage Drop × Current
- Heat = 6V × 5A = 30 Watts
A 30W heat load requires a massive, expensive aluminum heatsink and active cooling. Without it, the transistor will undergo thermal runaway and fail in seconds.
Method 2: PWM (Pulse Width Modulation)
You use a logic-level MOSFET (like the IRFZ44N) driven by a 1kHz PWM signal. To get 18V effective from a 24V source, your duty cycle is 18 / 24 = 75%. The MOSFET is either fully ON or fully OFF.
- When OFF: Current is 0A. Heat = 0W.
- When ON: The IRFZ44N has an Rds(on) of roughly 0.028Ω. Voltage drop = 5A × 0.028Ω = 0.14V.
- Conduction heat = I² × R = 25 × 0.028 = 0.7 Watts.
By switching to PWM, you reduced the heat dissipation from 30W to less than 1W. The MOSFET runs cool to the touch without a heatsink. For a deeper look into MOSFET selection for motor driving, review the Texas Instruments Motor Driver Overview for gate charge and Rds(on) trade-offs.
Where You Meet DC Speed Control in Practice
You will encounter DC speed control circuitry across a wide spectrum of hobbyist and industrial applications:
- E-Bikes and Electric Scooters: The hand throttle is just a potentiometer sending a 0-5V signal to a microcontroller, which then outputs a variable duty cycle PWM to a high-power BLDC (Brushless DC) controller.
- 3D Printer Extruders and CNC Spindles: Precision speed control is required to maintain consistent material flow or cutting feed-rates. These often use closed-loop control with encoders to prevent RPM droop under heavy cutting loads.
- RC Crawlers and Winches: Low-speed, high-torque control requires very fine PWM resolution at low frequencies to prevent the motor from cogging or stalling when crawling over rocks.
- Automated Blinds and Conveyor Belts: Simple open-loop PWM is used to set a fixed speed, relying on the mechanical load to remain relatively constant.
Decision Tree: Picking the Right Controller for Your Build
Choosing the wrong motor driver is the most common cause of project failure. Use this decision tree to select the correct architecture and part number for your specific build.
| If your motor is... | And your requirements are... | Then choose this architecture... | Concrete Part / Module Pick |
|---|---|---|---|
| Brushed DC, < 2A | Bidirectional, battery-powered, space-constrained | Dual H-Bridge IC | TB6612FNG (High efficiency, low voltage drop) |
| Brushed DC, 2A - 40A | High torque, unidirectional or bidirectional, 12V-24V | High-Power Half/Full Bridge PWM | BTS7960 43A Module (Robust, handles high inrush) |
| Brushless (BLDC), Open-Loop | RC cars, drones, high RPM, no position feedback | Sensorless ESC (Electronic Speed Controller) | FLYCOLOR Raptor 390 (Standard RC ESC) |
| Brushless (BLDC), Closed-Loop | CNC, robotics, precise velocity/position holding | FOC (Field Oriented Control) Driver | ODrive Pro (Industry standard for makers) |
Common Confusions and Bench Mistakes
When troubleshooting speed control DC motors on the bench, watch out for these frequent conceptual errors:
Confusing Duty Cycle with Actual Voltage
A 50% PWM duty cycle does not mean the motor "sees" 6V from a 12V battery in a strict DC sense. It sees 12V pulses that average out to a 6V equivalent. If you measure the output of a PWM driver with a standard multimeter set to DC Volts, you will get erratic readings. You must use an oscilloscope to verify the PWM frequency and duty cycle, or a multimeter with a dedicated duty-cycle/frequency mode.
Forgetting the Flyback (Snubber) Diode
DC motors are massive inductors. When your PWM signal turns the MOSFET OFF, the collapsing magnetic field in the motor windings generates a massive reverse voltage spike (inductive kickback). Without a flyback diode wired in reverse parallel across the motor terminals, this spike will instantly punch through your MOSFET's drain-source junction, destroying the driver. Many modern modules (like the BTS7960) include these internally, but if you are rolling your own H-bridge on a breadboard, you must add a Schottky diode (like a 1N5822) externally.
Open-Loop vs. Closed-Loop Speed Control
PWM is open-loop. If you set a 60% duty cycle, the motor will spin at a target RPM. But if you suddenly apply a heavy mechanical load, the RPM will drop, and the controller will not know or care. Closed-loop control uses an encoder or Hall-effect sensor to measure actual RPM and dynamically adjusts the PWM duty cycle to maintain the target speed regardless of load. Do not use open-loop PWM for applications like CNC spindles where speed droop ruins the workpiece.
FAQ: Quick Answers for the Workbench
What PWM frequency should I use for DC motors?
For most brushed DC motors, 1 kHz to 5 kHz is the sweet spot. If you go below 500 Hz, the motor will whine audibly and you may experience cogging at low speeds. If you go above 20 kHz, the acoustic noise moves out of human hearing range, but you will incur higher switching losses in your MOSFETs, requiring better heat management and faster gate drivers.
Can I use a standard Arduino Motor Shield for a 12V 10A motor?
No. The classic Adafruit Motor Shield V2 uses the TB6612 or similar drivers that max out around 1.2A to 3A per channel. Pushing 10A through it will trigger the thermal shutdown or melt the PCB traces. Step up to a dedicated high-current module like the BTS7960 or a VNH5019-based carrier.
Why does my motor squeal at low speeds with PWM?
This is magnetostriction and mechanical resonance caused by the PWM switching frequency vibrating the motor's stator laminations. Increase your PWM frequency to at least 18 kHz or 20 kHz to push the acoustic noise above the range of human hearing. Ensure your microcontroller's timer prescalers are configured correctly to output the true target frequency.






