stepper: If homing_endstop_phase is configured, make 0.0 be at a full step

If the stepper phases are known then it is possible to arrange for the
0.0 position to occur at a full step.  On cartesian style printer,
this makes it possible for the Z levels to occur at full steps (which
may help reduce "Z ribbing").

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2017-10-03 19:32:08 -04:00
parent ce9523fb90
commit 381304aa6f
1 changed files with 14 additions and 0 deletions

View File

@ -86,6 +86,20 @@ class PrinterHomingStepper(PrinterStepper):
self.homing_endstop_phase = config.getint( self.homing_endstop_phase = config.getint(
'homing_endstop_phase', None, minval=0 'homing_endstop_phase', None, minval=0
, maxval=self.homing_stepper_phases-1) , maxval=self.homing_stepper_phases-1)
if self.homing_endstop_phase is not None:
# Adjust the endstop position so 0.0 is always at a full step
micro_steps = self.homing_stepper_phases // 4
phase_offset = (
((self.homing_endstop_phase + micro_steps // 2) % micro_steps)
- micro_steps // 2) * self.step_dist
full_step = micro_steps * self.step_dist
es_pos = (int(self.position_endstop / full_step + .5) * full_step
+ phase_offset)
if es_pos != self.position_endstop:
logging.info("Changing %s endstop position to %.3f"
" (from %.3f)", self.name, es_pos,
self.position_endstop)
self.position_endstop = es_pos
if endstop_accuracy is None: if endstop_accuracy is None:
self.homing_endstop_accuracy = self.homing_stepper_phases//2 - 1 self.homing_endstop_accuracy = self.homing_stepper_phases//2 - 1
elif self.homing_endstop_phase is not None: elif self.homing_endstop_phase is not None: