Stepper Motor Back EMF

Some simple measurements using that Pololu driver in its default mixed decay mode and that Arduino sync generator. The captions give the operating conditions; basically, I’m varying the rotation speed by cranking the signal generator driving the Pololu board.

At 1 rev/s, it’s about as good as it gets:

Back EMF - 9V 400mA 1 RPS
Back EMF - 9V 400mA 1 RPS

At 5 rev/s, the driver has trouble getting current out of the winding:

Back EMF - 9V 400mA 5 RPS
Back EMF - 9V 400mA 5 RPS

At 10 rev/s, things are getting ugly:

Back EMF - 9V 400mA 10 RPS
Back EMF - 9V 400mA 10 RPS

At 20 rev/s, the back EMF has pretty much taken control of the current and the driver is going along for the ride:

Back EMF - 9V 400mA 20 RPS
Back EMF - 9V 400mA 20 RPS

At 25 rev/s, the driver produces only occasional dents in the waveform:

Back EMF - 9V 400mA 25 RPS
Back EMF - 9V 400mA 25 RPS

At 25.3 rev/s, the motor stalled. Even with no back EMF (what with the rotor being stopped and buzzing in frustration), the driver can’t force the current to behave:

Back EMF - 9V 400mA 25.3 RPS
Back EMF - 9V 400mA 25.3 RPS

I don’t have any way to measure the motor’s output torque, but at 1500 RPM there won’t be any worth mentioning.

For what it’s worth, 25 rev/s means the driver is handling 40 k steps/sec = 25 µs/step. The motors in a Thing-O-Matic run at 3 rev/s to move the XY stages at 100 mm/s, so scale what you see here accordingly.

9 thoughts on “Stepper Motor Back EMF

  1. “I don’t have any way to measure the motor’s output torque […]”

    Sure you do! You just may not realize that you most likely have all the equipment already :-)

    It doesn’t take much more than a weighing scale, a weight, a piece of string and a wheel that fits the shaft of the stepper motor. Basically a De Prony-brake, which is a dynamometer. No need for fancy, expensive electronic sensors, it’s pretty basic physics stuff. They’ve been measuring output torque of (steam) engines since long before they knew about electrickery.

    Not exactly what you need to measure torque of a motor, but here is the setup I used to measure input torque and determine mechanical input power and conversion efficiency of homebuilt alternators:

    1. OK, I should have prefixed that with “At the moment, …” [grin]

      I was planning to back-drive a stepper as a generator, apply a known load, and see how that worked. I think also cobbling up a reliable De Prony brake will exceed my enthusiasm budget, but it’d be a nice comparison.

      Thanks for the suggestions and examples!

  2. Hi,
    Here’s a method of measuring the torque of a step motor outlined by Mariss @ Geckodrive on his Yahoo-group in -03.


    Yes, strange but true, it can be done and accurately as well. All you need is an efficient step motor drive, a calculator, a paper towel, a pair of channel lock pliers and a multimeter (or two).

    How to do it:

    1) Attach the test motor and drive to your power supply.

    2) Set the multimeter to “DC Amps” and put it in series with the power supply “+” to drive lead.

    3) Run the motor (unloaded) up to the test speed you want to measure it’s torque at.

    4) Measure the DC current flowing from your power supply.

    5) Measure the power supply voltage while the motor is running unloaded at the test speed.

    6) Multiply the results of (5) and (6) and save the answer.

    7) Load the test motor with the paper towel folded over several times until it is only 1/2″ wide. It makes a great brake-shoe. For bigger motors you will need the channel-lock pliers to apply sufficient pressure. You may also want to wet it a little to keep it from smoking or catching on fire when you do.

    8) Slowly load the motor while watching the DC ammeter as you do.
    Note the reading the instant the motor stalls. Note the power supply voltage as well at stall if it is unregulated. This may need to be repeated several times until you get the hang of it.

    9) Again, multiply the current and voltage readings you got in (8) at the instant of motor stall.

    10) Now for the calculator work. Subtract the results of (6) from the results of (9). The difference is the mechanical Watts the motor delivered to the paper towel brake.

    Knowing that and the speed of the motor, the following identity gives you the torque at the test speed:

    in-oz = Watts * full steps per second / 4506
    The above formula was wrong and was in a later message corrected to:
    in-oz = Watts * 4506 / full steps per second

    I have a carefully maintained and calibrated 500W dynomometer accurate to +/- 0.5% I use to generate speed-torque curves. It is of my own design utilizing a low-inertia DC servomotor as the test motor load. It has been compared against a really nice Varitrol hysterisis type dyno I splurged on a month ago. Both agree within 1%.

    The amazing part is the results of the plier-multimeter method (I call it the Delta W method) agree with the dyno results within 2% over a speed range from 500 full steps per second on up.

    The Delta W method falls apart at very low speeds because “delta W”
    necessarily trends towards zero for near zero speeds. It requires exquisite care in measurement technique at speeds near 100 full steps per second to get meaningful results. Above 500 though it is very accurate in its results.

    I’m killing time until I get the final G2002 boards next week. That’s why I’m doing this fun stuff.


    1. Note the reading the instant the motor stalls.

      In yard tools, that’s what’s called the “Sears Horsepower” rating: the absolute maximum optimistic full-throttle horsepower, measured milliseconds before the engine explodes. The actual useful horsepower is perhaps an order of magnitude lower…

      I have the sinking feeling I must do this thing… [grin]

  3. Anything interesting show up if you force the motor to skip a step? I’d love for my printer to re-home if a skip was detected.

    1. I don’t know how to force a motor to miss one step: when it doesn’t have enough torque for the load, it’ll stall and miss all the steps up to (at least) the next direction change. After that, the best you can do is scrap the part and start over, because you have literally no idea what’s gone wrong.

      The fact that the motor can’t produce the required torque tells you that the system wasn’t designed properly, so there’s not much justification for adding gadgetry to detect failures. It’d be cheaper and better to design it properly in the first place, but that’s sometimes overlooked in the rush to get a product out the door.

  4. Steppers may skip steps when attempting to accelerate or decelerate an inertial load more quickly than the available torque will allow. Frictional loads beyond the available torque tend to just cause the motor to stall.

    All of these torque problems, to the heat failure of the windings, can be overcome with closed-loop commutation. If you have ever seen a demonstration of closed-loop commutation of a stepper motor you may have been as amazed as I was. All the torque and velocity of a dc-servo motor with the positional accuracy of a micro-stepped stepper motor, very cool operation and never a skipped step.

    1. attempting to accelerate or decelerate an inertial load

      Aye, there’s the rub. The key limitation is the available torque: once the load exceeds that, then the poor motor sheds steps until the load drops and it’s game over for accurate positioning.

      I like the closed-loop control notion, but the sensors really belong inside the motor where they can report directly on the rotor position. Grafting them onto a random stepper seems fraught with peril: yet another printer mod! [grin]

      1. There are two approaches to that I am aware of. I’ve seen it done with external, high-speed, high-resolution, quadrature rotary encoders (around 3200 lines of resolution per revolution.) I’ve heard about an approach requiring no additional physical components using back-emf to control the commutation angle such as is done with brushless DC servo motors.

Comments are closed.