Pololu Robotics & Electronics
My account Comments or questions? About Pololu Contact Ordering information Distributors

Stepper microstepping not constant



I´ve build a pan/tilt-head for a DSLR.

There is only a reduction by the pulleys of 1:4,5 on both axis. And there is no high load, which needs to be moved.

I’am using the DRV8825 stepper drivers and 1209-steppers. (pololu.com/product/1209)
The drivers are controled by a Arduino MEGA. For the tests, I have just put the step-output in an slow ON-OFF-Loop.

Since I need a higher resolution, I want to use at least 1/8-steps.

After setting up everything and running couple tests, I have noticed, that the steps are not running constantly.

In the videos, you can see the unconstant movements. Trying different adjustments of the regulator on the DRV8825, did not improve the behaviour. To get fairly aceptable results, I have to set the regulator so high, that the stepper and the driver are getting hot (which is bad, because it is a portable setup, so I have limited battery-capacity and I don´t want to lose energy by heating up the components.)

I´ve also tested other steppers (0.9° and a little bigger). Same here, it is not possible to get equaly spaced steps.

The cable is about 1,5m long.

What could cause those unequal microsteppings? Would a special stepper or different drivers help?



It sounds like you meant to include links to videos showing the described behavior. Do you have videos you can post? What did you set the current limit to? Could you try setting it to 1A (or just under) by measuring the voltage on the Vref via as described under the “Current limiting” heading of the DRV8825 product page? It is not unusual for stepper motors and drivers to run hot, so if your motor and driver are getting hot when you have the current limit set like this, it is probably normal. How fast are you trying to step the motor? You might also try running the motor with no load to see if the problem persists.



Here are some videos. All tests were made with 1/8-microstepping and the same program on the Arduino, I just swaped the drivers.

Here is the Arduino-Code:

digitalWrite(24,HIGH); digitalWrite(24,low); delay(400);

This is the DRV8825 set to Vref=0,5V (=1A):

After applying this mod, it got better (still @ Vref=0,5V):

Using the Pololu A4988 with this mod(Vref=0,4V):

Setting Vref to 0,64V with the unmodified DRV8825:

I can only get good results with setting the driver in FAST decay mode, otherwise it is not possible to get evenly steps in microstepping-mode. It´s still not 100% perfect, but much better then running the driver unmodified.

After modifying the drivers, I noticed, that the sound of the steppers got higher, which is some kind of annoying.

It is a pan/tilt-head, so I will just make 1-2 steps, pause some seconds, make 1-2 steps etc. To get a good and smooth video, it is absolutely necessary to have steps which make the same distance, otherwise you will see stutters in the video.

Are there some other methods I could try to get even better microstepping-results?


Thanks for posting the videos and the links; they are very interesting. I noticed that your code drives the STEP pin high and then low again in back-to-back commands. The DRV8825 requires the high part of the step signal to be at least 1.9us and the A4988 requires at least 1us. You might try putting a small delay between those commands to see if it makes a difference.

I have heard of people changing the decay mode on these drivers to get better results in particular applications. It sounds reasonable that it could help with your application.

Changing the current limit might change the noise you are hearing. You might try making small adjustments to it to see if that helps. You might also consider using the enable pin to disable the driver when the stepper motor is sitting stationary for a few seconds. Although, this might not work well if you have a sizable load on the shaft, since it might change the shaft’s position while it isn’t holding. Also, if you are on a microstep, the motor might kick back to the nearest step.



I´ve changed the code and added a delay of 20 us between ON and OFF. There was no improvement…

I´ve already tried all possible settings of the current limit, but the high sounds still remains. On this website:


it says, that fast decay mode is responsible for higher sounds of the stepper. So I guess there is no solution to this.

I was able to record the distance every single step makes. As you can see, full-stepping is equally. Since I need a higher resolution, I will need microstepping…

The NEMA 14 is running very irregular, so it can not be used in my project.

I´ve discovered a NEMA 17 stepper from Trinamic, which is described as “optimised for microstepping”. The results are much better then with the NEMA 14 from Pololu.

Are there any other methods I could try to improve the microstepping behaviour?

PS: It would be great if you could somehow integrate a pin/jumper on the DRV8825 to be able to switch between FAST decay-mode and the standard-setting. It is very inconvenient to solder the pin directly on the IC, if you want to have FAST decay-mode…


It is NOT wise to count on microstepping for accurate steps, no matter what driver you use. Use appropriate gearing instead and take backlash into account.

Here is some discussion on microstepping, from professionals, that points out the serious problems and the few advantages of microstepping (no doubt there are many other such discussions) : micromo.com/microstepping-my … ities.aspx