Stepper vs DC vs Servo

Hi guys, I am working on a project that basically moves a panel around (up and down), depending on the values I send it.

I want to know how to move this panel, I have something similar to this:

(a gear on a gear-rack)

and I want the motor to move that gear-rack up and down. However I want the rack to stay put when not moving. This gave me the idea of using a stepper motor instead of a dc motor.

I also want position control, as I want to know how high this thing is going up/down. This gave me the idea of a servo, however servos have limited motion AFAIK, (180 degrees the most i’ve seen).

So I was wondering if there’s a way to do it with a DC motor (since from what i’ve seen they’re the cheapest and most power efficient).

Precise positioning with a DC motor will be very complicated.

A servo is by far the easiest to use - both mechanically and programmatically. If 180deg is not enough you can get sail-winch servos that can move about 3 revolutions. You can also get continuous rotation servos but you can only control their speed, not their position.

A stepper motor will give much more precise control than a servo. Before going down this route make sure that you understand why stepper motors work best with specialized stepper motor driver boards. The Pololu A4988 is an example. You could also read about the Allegro A4988 chip that is used on that board.


My choice would be a dc motor with a worm gear drive. The worm gear drive would hold the position of what is being driven when the motor is not powered. Beyond that, more information is needed to make suggestions, i.e., what scale are we talking about (weight, size, etc.)?- Scotty

Why not a stepper ?

Lets clarify a few details:

Do you want the panel to stay put when the power is removed?

How heavy is the panel? What size gear pinion? That will determine the needed torque.

What precision do you want?

Have you considered a linear actuator?

To get absolute position information you will need an absolute encoder or a homing switch and an incremental encoder. Or even a linear encoder on the rack. This will affect the cost more than the motor perhaps.

Is this mains or battery powered? Stepper motors are very power hungry, usually unsuitable for battery power.

Why not a stepper ?

Battery powered or not, it's just a waste of power to hold in position, especially if the panel is not in continuous use. Depending on motor size, cost for a stepper and driver may be an issue too . There is an abundance of high torque, low cost dc motor solutions. But nothing firm can be suggested until the OP provides us with more information on this project. - Scotty

scottyjr: My choice would be a dc motor with a worm gear drive.

That's not what the OP has in his nice diagram.


The below sail winch servo makes 6 turns.

The technical term for that arrangement is "rack and pinion".

It sounds like what you want is a servo, but where the range of motion is the linear actuator you've made, not the rotation of the pinion gear in your diagram. The problem here is that the term "servo" is overloaded to mean two things: - it's the technical name for a feedback system used to achieve positioning with a motor. and - it's the name given to small modules that implement servo feedback, and commonly found in RC toys.

There are servos, including linear servos, that come in very large sizes, but they can cost a lot ($10^4). At the largest sizes, the motors are often BLDC and feedback is via optical encoders rather than potentiometers, but it's the same principle: you say "move here" and it does.

In terms of solving your problem with cheap parts, can you attach a linear potentiometer to your rack so that it indicates the position? If so, then you can wire that into a hobby servo module (which is driving the pinion gear) in place of the built-in feedback potentiometer, and presto, you've built a linear servo. Or you can use a DC-gearmotor module controlled by your linear feedback potentiometer and a PID loop in the arduino.

If a linear pot is too hard then you can still do it with a rotary pot, just gear the pot down (again, driven from the pinion that drives the rack) so that about 270 degrees rotation of the pot corresponds to the full range of motion of the rack. You may get backlash and instability with this arrangement if you're not careful, but it can be made to work.

If being cheap and low power are the main concerns, and you have a couple of pins spare, I think DC motor with worm gear drive and micro switches to check for open/shut travel.
If the hatch only has to be fully open or shut, encoders seem an overly complex method.
Servos are good but can still drift (a bit) and you still have no actual feedback as to whether the hatch is shut, only in what the servo thinks it has done.
A DC motor is cheaper in comparison, driving your mechanism with a worm gear on the opposite side of the cog to the rack. The worm gear will ‘jam’ and stop the hatch falling down so won’t need power to keep it open (although you might want to copy chicken coop door openers here and have a counterweight too if its a heavy door).
A micro switch at either end of the door’s travel would provide appropriate control signals.