Blog
PWM DC Motor Speed Control Introduction
Your average DC motor works like this: hook it up to a proper DC power supply, and it’ll spin at full speed right away. Flip the power connections, and it’ll spin in the opposite direction. Now, though, in real-world use, we often need the motor to run at different speeds. So how do we make that happen?
What is PWM DC motor speed controller?
A PWM DC motor speed controller is one of the go-to types of DC motor controllers — and it’s the key hardware for making PWM motor control happen. It’s specifically designed to use PWM (Pulse-Width Modulation) tech for precise control over a DC motor’s speed.
Compared to old-school resistor-based speed controllers, it’s way more practical — which is why it’s now the go-to solution in the DC motor speed control game. You’ll find it everywhere: from tiny toy motors to industrial-grade drive motors, and it’s especially great for 12V DC motors.
How PWM works in microcontroller?
If you want to learn how to control the speed of a motor, start by getting the basic idea behind PWM speed control.
Generating PWM signals: A microcontroller (like an Arduino) or a dedicated chip puts out periodic pulses. By adjusting the duty cycle, it changes the average voltage sent to the motor. For example, with a 50% duty cycle, the motor only gets full voltage (say 12V) half the time in each cycle.
How speed relates to voltage: The formula for a DC motor’s speed is N ≈ (V_avg − IR)/(Kφ). Here, V_avg (average voltage) is directly set by the PWM duty cycle. The higher the duty cycle, the higher V_avg is, and the faster the motor spins (that’s N). That’s the core idea of using PWM to control motor speed.
What the microcontroller does: In Arduino PWM DC motor speed control, the microcontroller uses the analogWrite() function to output values from 0-255. These map to a 0%-100% duty cycle, letting you digitally control the PWM signal.
DC motor speed control circuit
The DC motor speed control circuit in a PWM speed control system breaks down into three main parts:
The control unit: That’s a microcontroller (like an Arduino) or a PWM signal generator (such as a 555 timer). Its job? Putting out the PWM control signals.
The driver module: It uses a PWM half-bridge or full-bridge (H-bridge) setup—think modules like the L298N or TB6612. This fixes the problem of microcontrollers not putting out enough current, and actually powers the motor.
Protection and feedback: Things like freewheeling diodes (to suppress the motor’s back EMF) and fuses (for overcurrent protection).
H-Bridge
When the microcontroller outputs a high level, the transistor turns on, the motor gets power, and it runs at full speed. When it outputs a low level, the transistor shuts off—no voltage goes across the motor, so it stops. Once the microcontroller puts out a square wave with an adjustable duty cycle, the PWM signal can tweak the voltage across the motor. And that’s how you control the motor’s speed.
An H-bridge is made up of four switching components (Q1 to Q4), with the motor hooked up to the middle crossbar of the “H” shape. Here’s how it works: when Q1 and Q4 turn on, current flows through the motor from left to right, and the motor spins clockwise. Flip things around—when Q2 and Q3 turn on, the current reverses, and the motor spins the other way.
Now, you’ve got to keep switches on the same side from turning on at the same time—if they do, it’ll short the power supply. To prevent that, you use either hardware logic (like combinations of AND gates and NOT gates) or set up “dead time” in software (usually 200ns to 1μs). This dead time makes sure there’s a tiny gap where all switches are off when switching between them. For example, the advanced timers in microcontrollers like STM32 can insert this dead time via hardware, stopping the upper and lower bridge arms from turning on simultaneously.
Since the motor acts as an inductive load, it generates back EMF when power is cut. To handle that, you connect freewheeling diodes in parallel across each switch (or use MOSFETs with built-in diodes)—this dissipates that leftover energy and protects the components.
Bootstrap Circuit
A bootstrap circuit is basically a temporary power supply that “jumps along” with the source voltage of the high-side MOSFET. Here’s why it’s needed: in an H-bridge, the high-side MOSFET (the one on top) has a source voltage that bounces around with the motor current—sometimes it’s close to the positive power supply (Vcc), other times it gets pulled near ground (GND). But for a MOSFET to turn on, its gate needs to be 2~4V higher than its source. A regular power supply is fixed; it can’t keep up with the source voltage. That’s where the bootstrap circuit comes in.
When the low-side MOSFET is on and the high-side one is off, the high-side source gets pulled close to ground. This is when the power supply sends current through a one-way diode to “charge up” the bootstrap capacitor. The voltage stored is roughly “power supply voltage minus the diode’s loss”—say the power supply is 12V and the diode loses 0.3V, the capacitor stores 11.7V.
Then, when it’s the high-side MOSFET’s turn to switch on (and the low-side turns off), the high-side source suddenly jumps up near the power supply voltage. But the voltage in a capacitor “can’t change instantly,” so the positive side of the capacitor jumps up with the source. Originally, the capacitor’s positive side was at 12V and negative at 0V (storing 11.7V). Now the source (and the capacitor’s negative side) jumps to 12V, so the positive side ends up at 23.7V. With the gate connected to the capacitor’s positive side and the source at 12V, the gate is 11.7V higher than the source—way more than the 2~4V the MOSFET needs. That keeps it solidly on.
And since motors need to reverse direction—using “diagonal bridge arm combinations” (like Q1+Q4 on for forward, Q2+Q3 on for reverse)—both high-side MOSFETs (Q1 and Q3) have sources that bounce around. So each needs its own bootstrap circuit. This makes current switching smoother when reversing, so the motor doesn’t jerk suddenly.
Put simply, a bootstrap circuit is like a portable charger for the high-side MOSFET that “jumps” with the source voltage. No matter how much the source bounces, it keeps the gate at a high enough “lead voltage” to make the MOSFET behave.
Freewheeling Diode
The RS1J is a fast recovery diode, and in this circuit, it works as a freewheeling protection device. When the upper bridge arm of the H-bridge shuts off, the stored current in the motor windings freewheels through the RS1J. This stops the back EMF from frying the power components.
For a freewheeling diode, its VRRM should be at least 2× the supply voltage Vcc. The RS1J’s 600V rating covers most low-voltage setups easily. The motor’s peak current needs to stay below the RS1J’s IFSM (30A), and the average current should be ≤1A. For instance, if your motor draws 5A when starting up, the RS1J’s 30A surge capacity can handle that short burst.
If you want more detailed circuit designs, grab a DC motor control circuit diagram PDF or DC motor speed control PDF. They’re solid references when building a DC motor speed control circuit.



how do you wire up a DC motor speed controller?
This wiring is super easy and straightforward. Just make sure you match the positive and negative power ports — hook up a 4.5V to 35V power supply to the PWM DC motor speed controller module. Then connect the DC motor to the module too. Once that’s done, turn on the power, twist the potentiometer knob, and you’ll see the motor spin at different speeds!
FAQ
can i put a speed controller on any motor?
No, that won’t work. AC motors (like the ones in household fans) need a dedicated AC speed controller. Even for DC motors, you still have to match the controller’s voltage — for example, a 12V motor needs a 12V DC motor speed controller — and power: the controller’s rated current should be at least the motor’s operating current. Otherwise, you could end up frying the equipment.
how to control the speed of a 12 volt DC motor?
Mostly, we use a 12V PWM DC motor speed controller — it adjusts the duty cycle to change the average voltage. Alternatively, you could control speed by wiring a resistor in series (but that’s low-efficiency and generates lots of heat) or by adjusting the excitation current (which only works for separately excited motors). But the PWM method is easily the best overall in terms of performance.
can we use a fan regulator to control DC motor speed?
No, you can’t do that. Traditional fan speed controls — things like inductive or capacitive types — are designed for AC voltage regulation. If you use them directly with a DC motor, the unstable voltage waveform will cause the motor to jitter, a sudden drop in efficiency, or even burn the motor out.
how to select PWM frequency for DC motor?
Too low a frequency will make the motor buzz noticeably and vibrate. Too high, and it’ll crank up the losses in the driver module. For 12V small motors (under 100W), I’d go with 5kHz to 10kHz. For bigger ones (over 100W), 1kHz to 5kHz works better. You can tweak this by adjusting the PWM frequency register in your microcontroller code.
what are the three methods of speed control of dc motors?
Armature voltage control: Like PWM speed control. Field control: Adjusting the excitation current, works for separately excited or shunt motors (dc shunt motor speed control). Armature resistance control: Adding a series resistor, but it’s low efficiency.
Advantages and Application Scenarios
Pros:
- Wide speed range (0% to 100%) with high precision
- High efficiency (up to around 90% — way higher than resistor-based speed control)
- Fast response, enabling real-time control
Application Scenarios:
- Speed control for robot drive wheels
- Smart home devices (e.g., curtain motors, fans)
- Speed adjustment for industrial conveyor belts
- Control for car windshield wipers and sunroof motors
DIY dc motor speed controller and Purchase
how to make a dc motor speed controller?
A budget-friendly setup for newbies (using a 555 timer + MOSFET):
- Parts you’ll need: 555 timer chip, N-channel MOSFET (like the IRF540), 10kΩ potentiometer, freewheeling diode (1N4007), 12V power supply.
- Building the DC motor speed control circuit: Follow the 555 timer datasheet to wire up the oscillator circuit. Feed the PWM signal to the MOSFET’s gate, hook the MOSFET’s drain to the motor, and ground its source.
- Tinkering with it: Twist the potentiometer and watch the motor speed change. Use an oscilloscope to tweak the potentiometer until the PWM frequency settles around 5kHz.
DC motor speed controller
- Entry-level (12V 5A): Handles basic speed control — good for toy motors, small fans.
- Mid-range (12V 20A): Comes with forward/reverse control and overload protection, works for robot motors, conveyor belt motors.
- Industrial-grade (12V 50A+): Supports RS485 communication and speed feedback, ideal for automated production lines.
Purchase Link: https://easyelecmodule.com/product/pwm-dc-motor-speed-controller-4-5-35v/
Vedio Link: https://youtube.com/shorts/SVXAqVhsjkM?si=3ZH8EXS2uGzyBUlZ