I would like to calculate the maximum safe acceleration for my printer using the following parameters as input:

  • printhead weight
  • torque at the desired speed
  • steps/mm and steps/revolution
  • microsteps

Elasticity of frame and belts are ignored.

The Excel file to obtain the torque at the desired speed is available here.

The other parameters are known in advance.

The formula I used for the maximum acceleration is the usual $a=F/m$, where $F=torque*radius$:

$acceleration = torque\ *\ (steps/rev\ /\ steps/mm\ *\ microsteps\ /\ pi\ /\ 2) / mass$

Using 450 g, 0.15 N/m (as predicted for my stepper at 200 mm/s with 24 V), 200 steps/rev, 80 steps/mm, 16 microsteps I obtain about 2100 mm/s2 which seems reasonable and pretty close to standard values.

However, from what I understood the Excel file provides the prediction of a full-step torque, but torque is known to decrease significantly with increasing microsteps.

How to introduce the effect of reduced (incremental) torque for microsteps to calculate a safe maximum acceleration value for a printer?

For information: my stepper and my printer were sold back then with about that acceleration value preset and with that torque at nominal speed (half voltage, half speed than I assumed here).

The print quality was fine, which seems counterintuitive considering the much reduced torque expected at 16X microsteps, about 1/10 of the value I used.

I would expect many lost microsteps with the predefined settings. Or maybe it happens: if all the microsteps are lost, the positioning error would be 16 (micro)steps / 80 steps/mm = 0.2 mm.

Important edit!!!

As maybe someone noticed, the formula I used


is wrong. The correct one is


Taking this change into account, the final formula is:

$acceleration = torque\ /\ (steps/rev\ /\ steps/mm\ *\ microsteps\ /\ pi\ /\ 2) / mass$

which results, with the given input values, in 52 mm/s2.

This is much less than what is normally set in printers. I doubt that belt stretching and frame flexibility can affect the setting so much, therefore in addition to the microstep aspect, this one should be answered too, since the question is about "theoretically calculate the maximum acceleration".

  • 2
    $\begingroup$ You made an error in your units. The result of the computation is 52 meters per second squared, not 52 millimeters per second squared. $\endgroup$ Nov 21, 2019 at 9:22

1 Answer 1


You do not appear to have a correct understanding of how microstepping affects torque.

What is calculated in the article you refer to is incremental torque. The word "incremental" is very important.

A stepper motor consists of a permanent magnet rotor and an electromagnet stator. The electromagnets generate a magnetic field, to which the stator wants to align itself. Imagine the stepper motor being at rest. As we apply a torque to it, the rotor will start to deflect from its resting state in which it is aligned with the magnetic field. As you apply more torque, the stator will deflect more.

Eventually, if we keep increasing the torque, the motor will no longer be able to hold its position and snap over to the next step. The torque at which this is happens is the holding torque. Essentially, you can think of the holding torque as the torque required to cause a full step deflection of the rotor's position (compared to where it would be aligned with the magnetic field). The deflection in response to a given torque load is called the static load angle.

The article calculates incremental torque for microstepping. The incremental microstepping torque is the torque required to cause a microstep deflection. So, if we are using half stepping, the incremental torque is the torque required to cause a half step deflection. Naturally the torque required to cause a half step deflection is (much) lower than the torque required to cause a full step deflection.

This is actually irrespective of what level of microstepping the motor is configured for. Causing a half step deflection requires the same amount of torque, regardless of whether the motor is using full or half stepping. All lower incremental torque means is that we're specifying the torque for a smaller deflection. It does not mean torque is reduced overall.

I would expect many lost microsteps with the predefined settings.

You cannot "lose" a microstep. The rotor of a stepper motor has physical increments, and losing a step is when it snaps to the next increment. The only thing you can lose is a full step.

The stator of a stepper motor creates a rotating magnetic field. The rotor tries to follow this magnetic field, but (if under load) always lags behind it a little because the coupling between the two magnets behaves like a spring. In full-step mode, the rotating magnetic field moves in discrete steps. All enabling microstepping does is make the field rotate more "smoothly". However, it doesn't change the magnitude of the field.

If you were to look at the graph of the acceleration of the rotor on a very small time scale, you would get a sawtooth wave. Each time the motor made a full step (i.e., the magnetic field jumps), the acceleration would be high (as the misalignment between the fields would be large) and then gradually drop as the rotor aligned itself again with the magnetic field.

If you would use 16x microstepping, you would again see a sawtooth wave, but with a 16x higher frequency and with a lower peak-to-peak amplitude. However, the average value would be the same as for full step mode. The reduction in peak-to-peak amplitude corresponds to the reduction in incremental torque (and, for smooth acceleration, this reduction is actually good).

The main reason to be interested in incremental torque is to determine the positioning error. If you imagine the printhead being at rest, a single microstep may not cause any motion because the incremental torque is too low to overcome static friction. So, using 16x microstepping will not allow 16x as precise positioning. However, maximum acceleration is not affected.

The second part of your question, where you get the unrealistically low value of 52mm/s2, is based on a simple calculation error. The correct value is 52m/s2 or 52000mm/s2.

  • $\begingroup$ You clarified very well, thanks. However I made a mistake in the formula, therefore the issue with microsteps is now the minor one. Can you update the answer? $\endgroup$
    – FarO
    Nov 21, 2019 at 9:01
  • 2
    $\begingroup$ @FarO It is less than ideal to change the question after it has been answered. $\endgroup$ Nov 21, 2019 at 9:28
  • $\begingroup$ In this case it's easy however: mention in the first line of your answer that the units are wrong, so that's not an issue, then leave the rest as it is, since it's a good answer for the second part of the question. But yes, I was unsure how to proceed considering your answer, but I didn't know how to modify the question without deleting the reason of the part you answered $\endgroup$
    – FarO
    Nov 21, 2019 at 9:59
  • $\begingroup$ Just to summarize to check that I actually understood, the conclusion is that if I want to more or less ensure that the positioning error will stay within a microstep, I should keep the acceleration within ~1/10 of the value I calculated. If I want to keep the swinging during acceleration within a full step, I should use the full value I calculated. On the opposite case, I can run the motor up to the rpm which produces 10x the torque that I need based on the chosen acceleration. $\endgroup$
    – FarO
    Nov 21, 2019 at 11:59
  • $\begingroup$ @FarO If you run at 10th of the acceleration it will stay within a microstep, though friction will increase the positioning error beyond this theoretical value. I'm not sure what you mean by the sentence that starts with "on the opposite case" and I'm not sure if that's correct. The 52m/s^2 is a hard limit beyond which you're guaranteed to skip steps. $\endgroup$ Nov 21, 2019 at 15:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .