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.