aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2024-10-20 22:11:25 -0400
committerKevin O'Connor <kevin@koconnor.net>2024-10-26 22:11:02 -0400
commit31fe50ffa387ed4a45950c1043a3b214a9d554dd (patch)
treee2bb642099945667e31af047bb04395fa83d1e0e
parentb381f509d11f022022536f41343fcc868484a396 (diff)
downloadkutter-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.py14
-rw-r--r--klippy/stepper.py6
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)