diff options
Diffstat (limited to 'klippy/extras/manual_stepper.py')
-rw-r--r-- | klippy/extras/manual_stepper.py | 60 |
1 files changed, 25 insertions, 35 deletions
diff --git a/klippy/extras/manual_stepper.py b/klippy/extras/manual_stepper.py index fba23f6a..47f2795e 100644 --- a/klippy/extras/manual_stepper.py +++ b/klippy/extras/manual_stepper.py @@ -1,14 +1,11 @@ # Support for a manual controlled stepper # -# Copyright (C) 2019 Kevin O'Connor <kevin@koconnor.net> +# Copyright (C) 2019-2021 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. import stepper, chelper from . import force_move -ENDSTOP_SAMPLE_TIME = .000015 -ENDSTOP_SAMPLE_COUNT = 4 - class ManualStepper: def __init__(self, config): self.printer = config.get_printer() @@ -22,7 +19,7 @@ class ManualStepper: self.rail = stepper.PrinterStepper(config) self.steppers = [self.rail] self.velocity = config.getfloat('velocity', 5., above=0.) - self.accel = config.getfloat('accel', 0., minval=0.) + self.accel = self.homing_accel = config.getfloat('accel', 0., minval=0.) self.next_cmd_time = 0. # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() @@ -80,37 +77,12 @@ class ManualStepper: if not self.can_home: raise self.printer.command_error( "No endstop for this manual stepper") - # Notify start of homing/probing move - endstops = self.rail.get_endstops() - self.printer.send_event("homing:homing_move_begin", - [es for es, name in endstops]) - # Start endstop checking - self.sync_print_time() + self.homing_accel = accel + pos = [movepos, 0., 0., 0.] endstops = self.rail.get_endstops() - for mcu_endstop, name in endstops: - min_step_dist = min([s.get_step_dist() - for s in mcu_endstop.get_steppers()]) - mcu_endstop.home_start( - self.next_cmd_time, ENDSTOP_SAMPLE_TIME, ENDSTOP_SAMPLE_COUNT, - min_step_dist / speed, triggered=triggered) - # Issue move - self.do_move(movepos, speed, accel) - # Wait for endstops to trigger - error = None - for mcu_endstop, name in endstops: - did_trigger = mcu_endstop.home_wait(self.next_cmd_time) - if not did_trigger and check_trigger and error is None: - error = "Failed to home %s: Timeout during homing" % (name,) - # Signal homing/probing move complete - try: - self.printer.send_event("homing:homing_move_end", - [es for es, name in endstops]) - except CommandError as e: - if error is None: - error = str(e) - self.sync_print_time() - if error is not None: - raise self.printer.command_error(error) + phoming = self.printer.lookup_object('homing') + phoming.manual_home(self, endstops, pos, speed, + triggered, check_trigger) cmd_MANUAL_STEPPER_help = "Command a manually configured stepper" def cmd_MANUAL_STEPPER(self, gcmd): enable = gcmd.get_int('ENABLE', None) @@ -132,6 +104,24 @@ class ManualStepper: self.do_move(movepos, speed, accel, sync) elif gcmd.get_int('SYNC', 0): self.sync_print_time() + # Toolhead wrappers to support homing + def flush_step_generation(self): + self.sync_print_time() + def get_position(self): + return [self.rail.get_commanded_position(), 0., 0., 0.] + def set_position(self, newpos, homing_axes=()): + self.do_set_position(newpos[0]) + def get_last_move_time(self): + self.sync_print_time() + return self.next_cmd_time + def dwell(self, delay): + self.next_cmd_time += max(0., delay) + def drip_move(self, newpos, speed, drip_completion): + self.do_move(newpos[0], speed, self.homing_accel) + def get_kinematics(self): + return self + def get_steppers(self): + return self.steppers def load_config_prefix(config): return ManualStepper(config) |