I'm wondering if there is a clear and measurable difference or benefit to using a stepper motor as opposed to a standard DC motor controlled via solid state relay?

For my application, I need to move a particular distance, but am having some real difficulty getting my 12v stepper motor (not sure of brand) and Velleman Arduino shield to play nicely.

I've gotten solid-state relays to work no problem, so wondering if I just switch to using a DC motor connected to the relays will that be a similar result?

  • 1
    \$\begingroup\$ 12v rating steppers are almost invariably disappointing. Do some reading in the sidebar topics as this has been covered before extensively. \$\endgroup\$ Commented Aug 1, 2016 at 1:08
  • \$\begingroup\$ @ChrisStratton You just have to drive them right. What matters in NOT the voltage, it is the current. Steppers MUST be run with chopper drives for good performance. \$\endgroup\$
    – dpdt
    Commented Aug 1, 2016 at 1:59
  • \$\begingroup\$ @dpdt... which means that you need a supply voltage several times the rated current voltage, or conversely if you want to supply 12v through a chopper you should look for a motor rated less than 4v. But my point was not to explain this all over again, but to direct the poster to the many times it has been explained here before. \$\endgroup\$ Commented Aug 1, 2016 at 2:01

1 Answer 1



Stepper motors, as I'm sure you know, move in steps: whenever your Arduino tells the motor to take a step, it takes one step: often 1/200th of a rotation. They are designed for very high accuracy at the expense of efficiency.

However, that said, they are good motors, you just have to drive them right and not ask them to do what they can't. 95% of problems people have with steppers come from expecting something unreasonable.

The secret to steppers is that the voltage rating means (almost) nothing. In order to get a stepper to produce torque, you have to get current flowing through the windings, which are just big coils of wire with lots of inductance. The result is that, if you're stepping quickly, the current doesn't have time to ramp up to it's full draw.

Graphic example here: I once was driving a medium-sized stepper the same way you were. When it was sitting still, it would draw about 0.7 A/coil. When it was spinning at 5 revs/sec, it would draw about 0.15 A/coil. That's a lot of lost torque.

The solution is to turn up the voltage. With a LOT of voltage, the current will increase MUCH faster, leading to more torque at higher speeds. However, this requires trickery. If you were to just turn up the voltage on your supply, you motor would overheat when it was sitting still. The solution is to have a special drive that can limit the current and turn down the voltage the instant the current hits the rated value.

In fact, this is so much better that some steppers don't list voltage ratings - just current ones.

Some tips for getting them to work:

  1. Don't use the Velleman motor shield. It's just a L298, legendary for bad performance with high internal resistance and no current limiting - a must for good performance (as described above).
  2. For a solid constant-current driver, take a look at the DRV8825: I've used these with success before, and they're dead easy to wire up.
  3. With a constant-current drive, the higher the voltage, the better. You don't have to worry about too much current with the special driver, and more voltage = current ramps up faster = more torque at higher speed. THe ones that I've linked above can run at up to 45V (I recommend you go with 36V or less, due to voltage spikes), but it's not uncommon for big steppers to run at 80V or more.
    1. Don't forget to ramp your motors up and down! It is a HUGE mistake to just try to start out at the speed you want: your car can't go from 0 to 60 in an instant and neither can your motor. Arduino has a great AccelStepper library that makes this pretty easy.

Brushed DC motors (the 2 wire kind you can control with a relay, NOT the 3 wire brushless motors) turn whenever power is applied across them. They just spin until you cut the power. They have moderate efficiency, good torque, and have lousy inherent positional accuracy. Whereas with a stepper, you could just trust to the stepper's natural positional accuracy, with the brushed DC motor you will need separate sensors to determine the position (like encoders). Brushed gearmotors with encoders (basically servos) are VERY good for speed, efficiency, and torque.

Your system may work with brushed motors, but it will take a redesign.

  • \$\begingroup\$ The real question is, if I measure how far a DC motor will travel in X seconds, can I get a similar result. \$\endgroup\$ Commented Aug 1, 2016 at 0:41
  • \$\begingroup\$ @AutomationNation NO! DC motors do not have a consistent speed - it depends on the load. Simple demo: put a power supply across the motor so that it spins, and see how it slows down when you provide some resistance. Steppers, however, will go to exactly the position you tell them to no matter the load (as long as it's not enough to make them skip steps). \$\endgroup\$
    – dpdt
    Commented Aug 1, 2016 at 0:53
  • \$\begingroup\$ Where bidirectional precision is not needed, a gearmotor and measuring device like an encoder will often work better. \$\endgroup\$ Commented Aug 1, 2016 at 1:10

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.