A customer has asked:

I want to slow down a small hobby sized DC motor to a user variable range that runs from slow to zero RPM. I would simply use a wall wart for a power supply and a potentiometer to set the speed but the load on the motor might change slightly. Although the drag on the motor will be very low, if that drag does change, I would like the speed of the motor to stay fairly steady in spite of this.

A couple of people told me to use a PWM controller for this purpose because a PWM has a range of 0 to 100%. Of course this in not in RPM. One other person said that the motor might not slow down properly because the hertz rating on the PWM could be to high to allow this or because the pulses might not have an adequate amount of strength to excite motor enough to move it at all when the motor speed is set near zero.

I thought about using a steper motor so I looked a an Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0 but I know almost nothing about this stuff so I don't know if this would be just the right thing either.

I want to turn a knob to vary the speed of a motor form a few parts of an RPM up to a "slow" speed ...say 60 RPM? ...maybe?

Oh ...comparatively inexpensive and simple to set up would be great as well !

Any thoughts?

  • 7
    \$\begingroup\$ How about using gear? \$\endgroup\$ Dec 21, 2009 at 7:38
  • \$\begingroup\$ Hey I was going to comment that \$\endgroup\$
    – skyler
    Apr 7, 2013 at 21:10

6 Answers 6


DC motors don't work well at low RPMs. They stall and have horrible torque. (i.e. they can't turn very hard) So people have created gear motors: motors with integrated gearing. The result looks like a slightly bulkier motor, but one that has low RPMs and high torque. If you were to take apart a running a gear motor, you'd see the motor part actually runs at several thousand RPMs, but it's geared down to something like 60 RPM max.

A common specialized one is the standard hobby servo, which has some additional electronic bits but is fundamentally a gear motor. Check out any place that sells motors for robotics or surplus electronics and you'll see several different gear motors to choose from.

DC gear motors are controlled just like normal DC motors, so an Arduino motor shield works just fine with them.

  • 3
    \$\begingroup\$ gearmotors are a must for slow speeds! \$\endgroup\$
    – Jason S
    Dec 21, 2009 at 12:42
  • \$\begingroup\$ Presuming the OP is in Sydney, check out the local surplus store Oatley Electronics for gearhead motors. Jaycar has 'em too. \$\endgroup\$ Feb 24, 2011 at 7:10
  • \$\begingroup\$ Why you not mentioned stepper motors? \$\endgroup\$
    – Kamil
    Jul 3, 2014 at 16:36

The torque of a typical motor will vary as it rotates, based upon the motor's position within each commutator "step". This varying torque makes it very difficult to turn a motor smoothly at very slow speeds.

A common remedy is to hit the motor with short bursts of current, where each burst is long enough to move the motor by at least one commutator step. The longer the bursts, the more predictable the behavior of the motor will be, but the more 'jerky' the output. Note that there are two ways of doing this: (1) Let the motor freewheel after each burst of current; (2) dynamic-brake the motor after each burst. Using approach #1 will require typically much less power to achieve any given speed, but approach #2 offers much finer control of speed. Note that when using approach #2, the motor will be drawing nearly its full stall current (and dissipating its full stall power) for much of the time that it is on; if a motor would have a 1 amp stall current and a 100mA running current, running the motor at a 1% duty cycle would be safe, but running it at something like 50% could easily cause it to overheat (it could generate nearly 50 times as much heat as it would running normally).

If your goal is to make the motor run at a nicely-controllable rate that's about 1% of normal speed, and if power consumption isn't a concern, approach #2 may be good. If mechanical loading is consistent, approach #1 may be good. Otherwise you may need some motor-speed feedback.

  • 1
    \$\begingroup\$ Fantastic you are the only one that has said something ! Anybody can say gears . \$\endgroup\$
    – Autistic
    Nov 19, 2015 at 10:42

Generally speaking, a potentiometer will not be a good choice for controlling the speed of a DC motor, unless it's a very small one (think a few 100 mA draw) as the pot must be rated for the current drawn by the motor. Additionally, as you restrict current, you're also sapping power from the motor. So, at slow speeds using a current-limiting mechanism, you'll find it can only elicit a small fraction of the torque it can at high speeds.

DC Gear motors, as pointed out, are more appropriate for reducing speed. Alternatively, you can fashion your own gear chain, but it's not likely to be cost-effective. Dayton makes a well-priced range of 12V DC gear motors going as low as 0.6RPM (IIRC).

Then, if you wish to use the rated speed as the max speed, then a PWM speed controller can be quite handy. While there's nothing wrong with the adafruit motor shield for DC motor control, I do prefer an external speed controller, like the L298 Compact Driver from Solarbotics for larger DC gear motors.

Your friend is right, that each motor will have different characteristics as to the lowest PWM duty cycle it will reliably respond to. For most of my motors, it seems to limit around 25-35% duty cycle.

Yes, another excellent way to control output speed is by using a stepper. It lets you take discrete steps whensoever you choose. While a servo also lets you take discrete steps, less expensive ones tend to be limited to 1degree minimum movements, and are designed to move as quickly as possible from the current position to the defined position. A standard 200-step stepper motor, with an 8x microstepping driver, will give you effectively about 4 times the resolution, and therefor the ability to make smoother, smaller increments.


Stepper motor would be perfect for what it sounds like you want to do. The typical drawback of a stepper is their slow speeds. Considering however that you said you want to go from slow to slower it would work

  • \$\begingroup\$ Yes, however for smoothness at extremely low speeds a micro-stepping drive may be desired, which basically amounts to driving the motor with a set of A/C (ie sinusoidal) waveforms synthesized at the synchronous speed. Using square wave drive the motor will "cog" from step to step which could be noticeable if the step rate is low. \$\endgroup\$ Nov 21, 2011 at 3:27

There are "digital BLDC motors" like the ones made by ThinGap that make a motor which is both lightweight, small, and has excellent response at extremely low torque (slow, high power) as well as high speeds (RPM) without the need for any gear.


Has anyone tried to control speed of low voltage DC motors using a pulse width modulator (PWM) circuit? Instead of controlling speed by reducing voltage (which kills the motor's torque), the PWM simply controls the duty cycle of the DC voltage used. In other words, the full DC voltage is applied to the motor, but it is switched on and off many times a second. The key point is that everytime the voltage is applied to the motor, it affords full torque. As a result, there is no vibration or noise which is typical of motors trying to overcome inertia.

Small PWM circuits are available for around $20.00 that will handle up to 1.0 amps at 12 VDC. I use it to control HO gage model railroad engines. It allow them to creep without making a sound.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.