Stepper motor jumps when turned off

I have an application which has a low duty cycle but a need for accurate positioning of a stepper motor - model train turntable. To get the necessary smoothness and short movements, I am using microstepping and a direct drive 200-step bipolar NEMA17 motor. I also want to be able to turn off the motor when it isn't operating in order to reduce heating in the motor and driver. The microstepping code works well and accurately.

The problem I am having is that when I turn off the motor (current in both coils shut off), the motor gives a little positional jump, and it jumps again again when I re-enable the motor for the next move. The jump is usually just big enough to cause problems, but it seems to be unpredictable in size and direction.

So here's my question. Since stepper motor motion is driven by a combination of current in the A and B coils, I haven't been able to find a specification for what happens when there is no current in both at once. What can be expected to happen when I do this, and is there any way I can shut down the motor without this jump occurring? I don't need any holding torque when idle, since the load will hold its position well enough without.

I have tried:

  • My own microstepping code and a 12 volt motor. (Actually not my code, but it's probably unique)).
  • Accelstepper routines and the 12 volt motor.
  • "Big Easy Driver" (SparkFun) and a 3 volt stepper motor. The BED generates the microsteps for me.
    All 3 give good positioning results but exhibit the jump when I turn off the motor.
    Just for interest, I tried AccelStepper and full steps - same issue (but useless for my application).
    The issue doesn't seem to be in how I generate the motor steps, but what happens when I stop.

I also tried using the PWM digital outputs from the Arduino to give a lower average current on idle and reduce heating and it was possible to eliminate the jumps, but the motor then started whistling.

So really I want to know whether what I want to do is fairly standard, and whether anybody else has come across this issue and how it was solved.

Thanks.
Paul.

paulfryer:
The problem I am having is that when I turn off the motor (current in both coils shut off), the motor gives a little positional jump, and it jumps again again when I re-enable the motor for the next move. The jump is usually just big enough to cause problems, but it seems to be unpredictable in size and direction.

Yes, that's how they work. If the power is removed they lose position (typically either deflecting to
a local minimum of reluctance, or if the load is too large, getting back-driven by the load). The current
is the only thing holding them in position!

If you want to save power without losing position you need a stepper driver that can dynamically
reduce the current level. Its fairly common to drop current by 50% when a stepper is idle, since
the stationary hold-in torque is a lot more than the dynamic torque for the same current, and dropping
the current 50% reduces power consumption 4-fold.

Thank you MarkT for that explanation. It looks like what I was doing by just turning off the current is never going to work.

Any thoughts on specific devices or classes of stepper driver to get this current reduction? - and 50% should be enough. I started to look for drivers that allow the idle current to be reduced, and now that I know there are probably several out there. I quickly found the Polulu MP6500 based on the MPS chip which allows the arduino to reduce the current - which I could work with - and there seem to be devices with Active Gain Control which look more complex to understand but which might ultimately be better in the long run. I'll keep looking, but any pointers would be welcome.

Paul.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.