aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/homing.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2016-11-28 11:23:26 -0500
committerKevin O'Connor <kevin@koconnor.net>2016-11-28 11:23:26 -0500
commit9755182adfa09de6886a0b482aa03d236f75f3ce (patch)
treef2ef020bec3105b3c702b1ce90aaf8af0654e598 /klippy/homing.py
parenta5637bb9d486969db3f1127c1ac75fb9bbeb9a7c (diff)
downloadkutter-9755182adfa09de6886a0b482aa03d236f75f3ce.tar.gz
kutter-9755182adfa09de6886a0b482aa03d236f75f3ce.tar.xz
kutter-9755182adfa09de6886a0b482aa03d236f75f3ce.zip
homing: Check homing distance to verify endstop trigger after retract
Instead of checking the endstop trigger directly after a retract move, verify some distance is traveled during the following homing operation. This reduces the amount of synchronization between mcu and host during homing. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/homing.py')
-rw-r--r--klippy/homing.py41
1 files changed, 15 insertions, 26 deletions
diff --git a/klippy/homing.py b/klippy/homing.py
index 1beebd57..4d5ab505 100644
--- a/klippy/homing.py
+++ b/klippy/homing.py
@@ -10,20 +10,25 @@ class Homing:
def __init__(self, toolhead, changed_axes):
self.toolhead = toolhead
self.changed_axes = changed_axes
+ self.verify_retract = True
self.eventtime = 0.
self.states = []
self.endstops = []
+ def set_no_verify_retract(self):
+ self.verify_retract = False
def set_axes(self, axes):
self.changed_axes = axes
def get_axes(self):
return self.changed_axes
def plan_home(self, forcepos, movepos, steppers, speed):
self.states.append((self.do_home, (forcepos, movepos, steppers, speed)))
- self.states.append((self.do_wait_endstop, ()))
+ self.states.append((self.do_wait_endstop, (False,)))
+ def plan_second_home(self, forcepos, movepos, steppers, speed):
+ self.states.append((self.do_home, (forcepos, movepos, steppers, speed)))
+ self.states.append((self.do_wait_endstop, (self.verify_retract,)))
def plan_retract(self, newpos, steppers, speed):
self.states.append((self.do_retract, (newpos, steppers, speed)))
- self.states.append((self.do_verify_retract, ()))
def plan_calc_position(self, callback):
self.states.append((self.do_calc_position, (callback,)))
def plan_axes_update(self, callback):
@@ -50,13 +55,7 @@ class Homing:
thcoord[i] = coord[i]
return thcoord
def do_retract(self, newpos, steppers, speed):
- # Issue a move command
self.toolhead.move(self.fill_coord(newpos), speed)
- # Query endstops
- print_time = self.toolhead.get_last_move_time()
- for s in steppers:
- es = s.query_endstop(print_time)
- self.endstops.append((s.name, es))
return False
def do_home(self, forcepos, movepos, steppers, speed):
# Alter kinematics class to think printer is at forcepos
@@ -65,37 +64,27 @@ class Homing:
print_time = self.toolhead.get_last_move_time()
for s in steppers:
es = s.enable_endstop_checking(print_time, s.step_dist / speed)
- self.endstops.append((s.name, es))
+ self.endstops.append((s, es, s.mcu_stepper.get_mcu_position()))
self.toolhead.move(self.fill_coord(movepos), speed)
move_end_print_time = self.toolhead.get_last_move_time()
self.toolhead.reset_print_time()
- for name, es in self.endstops:
+ for s, es, last_pos in self.endstops:
es.home_finalize(es.print_to_mcu_time(move_end_print_time))
return False
- def do_wait_endstop(self):
+ def do_wait_endstop(self, verify_retract):
# Check if endstops have triggered
while self.endstops:
- name, es = self.endstops[0]
+ stepper, es, last_pos = self.endstops[0]
try:
if es.check_busy(self.eventtime):
return True
except mcu.MCUError, e:
raise EndstopError("Failed to home stepper %s: %s" % (
- name, str(e)))
- self.endstops.pop(0)
- return False
- def do_verify_retract(self):
- while self.endstops:
- name, es = self.endstops[0]
- try:
- if es.check_busy(self.eventtime):
- return True
- except mcu.MCUError, e:
- raise EndstopError("Failed to retract stepper %s: %s" % (
- name, str(e)))
- if es.get_last_triggered():
+ stepper.name, str(e)))
+ post_home_pos = stepper.mcu_stepper.get_mcu_position()
+ if verify_retract and last_pos == post_home_pos:
raise EndstopError("Endstop %s still triggered after retract" % (
- name,))
+ stepper.name,))
self.endstops.pop(0)
return False
def do_calc_position(self, callback):