Using microsteps is nice, since it reduces noise and machine resonance. But, microsteps have less torque than full steps. When 3D printing on a CoreXY printer with microstepping turned on, and a layer height that is a multiple of the full step size, I think it would be better for homing to “line up” the layer heights with the full steps, to maximize torque. Does Klipper do anything like this? Would this be possible and worthwhile to add?
Hello @ademuri !
If you say, full-step, half-step or quarter-step is precise enough for the printer, just reduce the microsteps in the settings of the stepper driver.
What you can’t do is to shift the full-step origin to a certain angle of the stepper motor.
The full-step positions are defined by the construction of the stepper motor - in detail - the positions of the coils and the magnets.
On certain printer configurations this is actually possible. From the manual:
- If one is using a traditional stepper controlled Z axis (as on a cartesian or corexy printer) along with traditional bed leveling screws then it is also possible to use this system to arrange for each print layer to be performed on a “full step” boundary. To enable this feature be sure the G-Code slicer is configured with a layer height that is a multiple of a “full step”, manually enable the endstop_align_zero option in the endstop_phase config section (see config reference for further details), and then re-level the bed screws.
@w00sh - great find, thank you!
Actually, I wonder if the maximum maximum precision is achieved at full stepper steps, or in-between steps (at half-steps)? Because when a rotor is pulled towards a single pole, it could have some dead zone near that pole. And when both coils are energized, they both pull the rotor, so there dead zone could be smaller. @koconnor Kevin, you have been experimenting with the angle sensor, I wonder if you have collected some data regarding that? I.e. if the stepper motor is commanded to go at full step, or in the middle between full steps, is there any difference in positional error once the motor comes to a stop? This might be interesting for Z axis motion.
I did do some positional accuracy tests during angle sensor calibration on my Voron Zero test printer. I did find that the positions were slightly more repeatable at full step positions than at “half step” positions, but the effect was small. Even at full step positions there is quite a bit of jitter. (I suspect this is primarily due to detent forces within the stepper motor.) It is worth noting that tmc drivers subtly alter the microstep position when changing micro-step resolution. So be aware of that if running your own tests. (Specifically, when microsteps=1, the driver will actually cycle through phases 128, 384, 640, 896; and there is a similar effect for other microstep settings.)
I didn’t run any in-depth tests involving stopping the motor at a particular position to measure drift. I did notice that when moving at constant velocity that there is a regular pattern of drift. This effect is in the microns though. It’s also difficult to quantify because the jitter is high.
Separately, it is a “common myth” that using full steps increases torque. Using full steps increases “torque wobble” - an undesirable jitter induced by uneven application of torque. It is true that in some cases this torque wobble can make it less likely one “loses steps”, but that’s a complex interaction. In general, if more torque is desired, the best way to achieve that is to use a higher run_current setting.
Cheers,
-Kevin
Thank you Kevin for sharing these results! OK, they speak in favor of the current implementation of [endstop_phase], which allows to align the position of the endstop with the full step. And it is great to get a practical confirmation.
Even at full step positions there is quite a bit of jitter.
Yeah, I suspect this cannot be helped. On the other hand, with sufficiently fine Z steps (e.g. with a lead screw) that’s hopefully not a big problem.