PWM DC Motor Speed Control

(C) 1997, G. Forrest Cook

Power this project from sunlight with a CirKits solar power circuit kit.

PWM0 Circuit

Circuit Description

This is a circuit for controlling the speed of small DC motors, it works nicely as a speed controller for an HO or N gauge model railroad.


The left half of the 556 dual timer IC is used as a fixed frequency square wave oscillator. The oscillator signal is fed into the right half of the 556 which is configured as a variable pulse width one-shot monostable multivibrator (pulse stretcher). The output of the one-shot is a variable width square wave pulse, the pulse width is set with the speed control pot on the timer control voltage input. The variable width output pulse switches the IRF521 MOSFET transistor on and off. The MOSFET transistor amplifies the current of this signal so that it is powerful enough to control a small DC motor.

The LM311N comparator is used to cut off the one-shot via the timer reset pin when the control voltage is below a certain threshold. The LM311N is also controlled by the speed control pot. The cut off circuit is required to prevent the 556 one-shot circuit from outputing a narrow pulse when the control voltage is at zero.


Adjust the 10K cutoff pot so that the motor is completely off when the speed pot is fully counter clockwise.


Connect a source of 12V DC power to the DC power input, connect a DC motor to the DC motor output. Adjust the speed control for the desired motor speed.

See the PWM Motor Speed Controller page for an improved single-IC PWM circuit.

Back to FC's PWM Circuits page.