If you need variable speed and high starting torque for a DIY conveyor, winch, or robotics chassis, the direct answer is to use a brushed DC gearmotor paired with a MOSFET-based PWM driver sized at 2x the motor’s stall current. Pulse width modulation (PWM) motor speed control is the most efficient way to throttle a DC motor because it avoids the massive heat dissipation of linear resistors. Instead of burning off excess voltage as heat, a PWM driver rapidly switches the full supply voltage on and off, relying on the motor’s internal inductance to smooth the current into a steady rotational force.

The Physics of the Chop: How PWM Dictates Motor Speed

PWM does not actually lower the voltage applied to the motor terminals; it chops the time the voltage is applied. The ratio of 'on' time to the total cycle time is the duty cycle, expressed as a percentage.

When you apply a 50% duty cycle to a 12V motor, the average voltage is 6V. However, the Root Mean Square (RMS) voltage—which dictates the heating effect in the motor windings—is actually 8.48V ($V_{rms} = V_{in} \times \sqrt{DutyCycle}$). This is a critical distinction: a motor running at 50% PWM will run hotter than a motor fed a pure, steady 6V DC source from a buck converter.

Frequency Selection Rule: The switching frequency of your PWM signal matters immensely.
  • Below 1 kHz: The motor windings will physically vibrate at the switching frequency, creating an audible, annoying whine.
  • 1 kHz to 16 kHz: The sweet spot for most hobby and industrial brushed DC drivers. It pushes the acoustic noise into the upper limits of human hearing while keeping MOSFET switching losses manageable.
  • Above 20 kHz: Silent to human ears, but switching losses in the driver's MOSFETs increase dramatically, requiring massive heatsinks and generating high-frequency electromagnetic interference (EMI) that can reset your microcontroller.

Motor Type Matrix: What Actually Accepts Raw PWM?

Not all motors respond to a raw PWM signal on their power terminals. Feeding raw PWM into the wrong motor type will result in stuttering, zero movement, or catastrophic driver failure. Here is how the common motor types stack up when you need variable speed control.

Motor Type Torque Curve Control Needs Relative Cost
Brushed DC Maximum torque at 0 RPM (stall), drops linearly as speed increases. Accepts raw PWM directly across terminals. Simplest drive. $ (Low)
BLDC (Brushless) High torque, flat across a wide speed range. High efficiency. Requires a 3-phase Electronic Speed Controller (ESC) to commutate phases. Raw PWM will not work. $$$ (High)
Stepper High holding torque, but torque drops off sharply at high speeds. Requires step/direction pulses. Speed is controlled by pulse frequency, not PWM duty cycle. $$ (Medium)
AC Induction Low starting torque, peaks near synchronous speed. Requires a Variable Frequency Drive (VFD) to alter both voltage and AC frequency simultaneously. $$ (Medium)

For applications demanding high starting torque under heavy loads (like a winch pulling a dead weight), the brushed DC gearmotor is the undisputed choice. Stepper motors will skip steps under high inertial loads, and BLDC motors require complex sensorless or sensored ESCs that are overkill for simple point-A-to-point-B throttling. For a deeper look into selecting the right electromechanical actuator, the Adafruit Motor Selection Guide provides excellent baseline comparisons for hobbyist-scale builds.

Sizing the Driver: Rules of Thumb and a Worked Load Example

The most common mistake in PWM motor speed control is sizing the driver based on the motor's nominal running current. Motors draw exponentially more current when starting, reversing, or stalling.

The Golden Rule: Your PWM driver’s continuous current rating must be at least 2x the motor’s stall current, or 4x the nominal running current, whichever is higher. This accounts for the thermal mass of the driver's MOSFETs and the inductive kickback generated during switching.

Worked Load Example: 12V Windshield Wiper Motor
You are building a DIY automated chicken coop door using a salvaged 12V wiper motor.
  • Nominal Current: 4A (measured while spinning freely).
  • Stall Current: 16A (measured when the shaft is physically locked at 12V).
  • Required Driver Sizing: 16A × 2 = 32A minimum continuous rating.
If you buy a cheap '10A' PWM module from an online marketplace, the MOSFETs will melt the first time the door hits the mechanical limit switch and the motor stalls.

Wiring and Terminal Identification

For the wiper motor example above, the ideal concrete pick is the Cytron MD30C (30A continuous, 80A peak for 10 seconds) or the budget-friendly BTS7960 43A module. Here is the standard wiring terminal identification for a high-power bidirectional PWM driver like the Cytron MD30C:

Terminal Connection Wire Gauge / Notes
B+ / B- Main Power Supply (12V Battery/PSU) 10 AWG silicone wire. Keep leads short to minimize inductance.
M+ / M- Motor Terminals 12 AWG. Solder and use heat shrink; mechanical vibrations loosen screw terminals.
PWM Microcontroller PWM Pin (e.g., Arduino Pin 9) 22 AWG solid core. Add a 100Ω series resistor to protect the GPIO pin from EMI spikes.
DIR Direction Control (HIGH = CW, LOW = CCW) 22 AWG. Tie to GND if only unidirectional control is needed.
GND Logic Ground Must be shared with the microcontroller's GND.

Safety Note: Always place a fast-blow automotive fuse (e.g., 20A for the wiper motor) on the main B+ line within 6 inches of the battery positive terminal to protect against dead shorts. For comprehensive circuit protection strategies, refer to All About Circuits' guide on DC motor protection.

Failure Signatures: Decoding Hum, Overheat, and Stall

When a PWM motor drive fails, it rarely does so silently. The physical symptoms tell you exactly what is going wrong in the electrical domain.

1. The Audible Hum or Whine

Cause: Your PWM frequency is set too low (typically below 1 kHz), causing the motor's stator laminations to magnetostrict at the switching frequency. Alternatively, the motor is physically stalled under a heavy load at a very low duty cycle, and the driver is hammering it with high-current pulses it cannot convert into motion.
Fix: Increase the microcontroller's PWM timer frequency to at least 4 kHz. If the hum only happens at startup, implement a software 'kickstart' (see below).

2. Driver Overheat (MOSFET Thermal Runaway)

Cause: Switching losses. Every time a MOSFET transitions from OFF to ON, it passes through its linear (active) region where it acts like a resistor and dissipates massive heat. If your PWM frequency is too high (e.g., 30 kHz+ on a driver not designed for it), the MOSFET spends too much time in this transition zone.
Fix: Drop the PWM frequency to 8 kHz. Ensure the driver's logic-level gate drive voltage is sufficient (most hobby drivers need a full 5V logic signal to fully enhance the MOSFET gate; a 3.3V ESP32 GPIO might leave the MOSFET partially on, causing instant overheating).

3. Low-Speed Stall and Cogging

Cause: Static friction. At a 10% duty cycle on a 12V system, the average voltage is only 1.2V. This is not enough to overcome the mechanical static friction of the gearbox, so the motor sits still, drawing stall current and heating up without moving.
Fix: Program a PWM Kickstart in your firmware. Command 100% duty cycle for 50 milliseconds to break static friction, then immediately drop to your desired 10% running duty cycle.

The Decision Tree: Pick Your Exact Motor and Driver Combo

Stop guessing. Use this decision matrix to select the exact hardware for your pulse width modulation motor speed control project based on your mechanical load profile.

Load Profile Motor Pick Driver Pick
High Torque, Low Speed, High Inertia
(Winches, conveyors, heavy robot chassis, linear actuators)
12V or 24V Brushed DC Gearmotor (e.g., 775 size or automotive wiper motor) Cytron MD30C (30A Cont.) or BTS7960 (43A Peak)
Medium Torque, High Speed, Reversing
(Small RC cars, desk CNC routers, tape drives)
Coreless or standard Brushed DC Motor (N20 to RS-550 size) Pololu DRV8835 or TB6612FNG (Dual H-Bridge)
Precision Positioning, Holding Torque
(3D printers, camera gimbals, pick-and-place)
NEMA 17 or NEMA 23 Bipolar Stepper Motor TMC2209 (SilentStepStick) or DM542T (Industrial)
The Final Verdict: If you are building a general-purpose high-torque DIY automation project (like a heavy-duty sliding gate or a motorized workbench lift) and need reliable pulse width modulation motor speed control, buy a 12V 775-size brushed DC gearmotor with a 30:1 reduction ratio, and drive it with a Cytron MD30C. Wire it with 10 AWG silicone leads, set your microcontroller PWM frequency to 8 kHz, and implement a 50ms 100% duty-cycle kickstart in your code to eliminate low-speed stalling. This combination provides industrial-level stall tolerance at a hobbyist price point.