diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2024-10-20 22:11:25 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2024-10-26 22:11:02 -0400 |
commit | 31fe50ffa387ed4a45950c1043a3b214a9d554dd (patch) | |
tree | e2bb642099945667e31af047bb04395fa83d1e0e | |
parent | b381f509d11f022022536f41343fcc868484a396 (diff) | |
download | kutter-31fe50ffa387ed4a45950c1043a3b214a9d554dd.tar.gz kutter-31fe50ffa387ed4a45950c1043a3b214a9d554dd.tar.xz kutter-31fe50ffa387ed4a45950c1043a3b214a9d554dd.zip |
homing: Log a warning if probe alters stepper kinematic positions
After a probe attempt the toolhead position needs to be recalculated
to the position that the toolhead ultimately halted at. Check that
the position setting wouldn't actually change the internal view of the
stepper motor and log a warning if any skew is detected.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r-- | klippy/extras/homing.py | 14 | ||||
-rw-r--r-- | klippy/stepper.py | 6 |
2 files changed, 16 insertions, 4 deletions
diff --git a/klippy/extras/homing.py b/klippy/extras/homing.py index 06b52f1e..bbad5337 100644 --- a/klippy/extras/homing.py +++ b/klippy/extras/homing.py @@ -1,6 +1,6 @@ # Helper code for implementing homing operations # -# Copyright (C) 2016-2021 Kevin O'Connor <kevin@koconnor.net> +# Copyright (C) 2016-2024 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. import logging, math @@ -29,10 +29,17 @@ class StepperPosition: self.endstop_name = endstop_name self.stepper_name = stepper.get_name() self.start_pos = stepper.get_mcu_position() + self.start_cmd_pos = stepper.mcu_to_commanded_position(self.start_pos) self.halt_pos = self.trig_pos = None def note_home_end(self, trigger_time): self.halt_pos = self.stepper.get_mcu_position() self.trig_pos = self.stepper.get_past_mcu_position(trigger_time) + def verify_no_probe_skew(self, haltpos): + new_start_pos = self.stepper.get_mcu_position(self.start_cmd_pos) + if new_start_pos != self.start_pos: + logging.warning( + "Stepper '%s' position skew after probe: pos %d now %d", + self.stepper.get_name(), self.start_pos, new_start_pos) # Implementation of homing/probing moves class HomingMove: @@ -121,6 +128,9 @@ class HomingMove: haltpos = trigpos = self.calc_toolhead_pos(kin_spos, trig_steps) if trig_steps != halt_steps: haltpos = self.calc_toolhead_pos(kin_spos, halt_steps) + self.toolhead.set_position(haltpos) + for sp in self.stepper_positions: + sp.verify_no_probe_skew(haltpos) else: haltpos = trigpos = movepos over_steps = {sp.stepper_name: sp.halt_pos - sp.trig_pos @@ -130,7 +140,7 @@ class HomingMove: halt_kin_spos = {s.get_name(): s.get_commanded_position() for s in kin.get_steppers()} haltpos = self.calc_toolhead_pos(halt_kin_spos, over_steps) - self.toolhead.set_position(haltpos) + self.toolhead.set_position(haltpos) # Signal homing/probing move complete try: self.printer.send_event("homing:homing_move_end", self) diff --git a/klippy/stepper.py b/klippy/stepper.py index 9b692904..05e56cca 100644 --- a/klippy/stepper.py +++ b/klippy/stepper.py @@ -138,8 +138,10 @@ class MCU_stepper: def get_commanded_position(self): ffi_main, ffi_lib = chelper.get_ffi() return ffi_lib.itersolve_get_commanded_pos(self._stepper_kinematics) - def get_mcu_position(self): - mcu_pos_dist = self.get_commanded_position() + self._mcu_position_offset + def get_mcu_position(self, cmd_pos=None): + if cmd_pos is None: + cmd_pos = self.get_commanded_position() + mcu_pos_dist = cmd_pos + self._mcu_position_offset mcu_pos = mcu_pos_dist / self._step_dist if mcu_pos >= 0.: return int(mcu_pos + 0.5) |