NEMA 17 Pulse On vs Off Width

I'm creating a project using a feature of the core code for my micro-controller that does precise "wave forms". Basically, it allows me to define the HIGH and LOW durations. The same core code is used for things like making sounds and controlling servos. I'm creating a library, using this core code, to drive a NEMA 17 stepper motor. All is working great.

My question is of a more esoteric nature. I've notice many threads on the forum where the subject of the relative HIGH and LOW durations are discussed. Particularly, Robin2 mentions on some of these threads that the HIGH pulse of even 1 micro-second is good enough. I have not found an explanation as to the pros/cons of either option.

Is there any practical reason why I would want to use something at this extreme versus merely using equal HIGH and LOW durations? I am wondering if there are stepper motor or driver heat or longevity issues that might suggest using the 1 uSec version. That Robin2 seems to be recommending this (and his rating shows he in an expert) I tend to follow that advice. However, I see some coding efficiencies if equal length HIGH and LOWs are used... less callback adjustments... they're all the same length.

I've tried both options and hear and see no differences in the motor's behavior. If its pertinent, I'm currently driving the step pin on an A4988.


The length of the pulse needed to create a step for a stepper motor is determined by the stepper motor driver you are using. For example the Figure 1 on page 6 of datasheet for the Allegro A4988 states that the minimum pulse width is 1 microsecond. Other drivers might be very different.

Note, also, that this step pulse width has nothing at all to do with the speed at which the motor can move. The speed at which the motor moves is determined by the interval between pulses.

If it is more convenient to use the same duration for the step pulse and the interval then that will certainly work. In effect, then the interval between steps is divided in two parts - one being the step pulse width and the other half the time until the next pulse. I have not come across anything that suggests there is an upper limit to the pulse width.

However I have always found it logically easier to use a short fixed pulse width and put all of the "data" for the speed in the interval between pulses.


Isn't it the case that a longer pulse width is going to lead to a larger current?

Isn't it the case that a longer pulse width is going to lead to a larger current?

Not with drivers like the A4988 or DRV8825. The stepper coil current is controlled only by the setting of the Vref on the driver.

And the actual width of the positive (HIGH) pulse is not relevant, it is the low to high transition (edge) that triggers a step (as long as the pulse width meets the minimum requirement).

groundFungus -


I understood the relations for speed. It was purely the relative lengths of HIGH/LOW I was after... not the total period. There are runtime code cycles to be gained with equal length periods. And for my use case, not wasting code cycles is important.

Thank you for your help.