diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-06-22 11:44:25 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-06-22 14:09:01 -0400 |
commit | 0791c694995ef2d8f559e2e0c072e34b46aaeaaa (patch) | |
tree | bd89d69067596bd3fc1052cf030616486e90043b /klippy/cartesian.py | |
parent | 93d0526a775c09606779bd237c6e21b1680eeed8 (diff) | |
download | kutter-0791c694995ef2d8f559e2e0c072e34b46aaeaaa.tar.gz kutter-0791c694995ef2d8f559e2e0c072e34b46aaeaaa.tar.xz kutter-0791c694995ef2d8f559e2e0c072e34b46aaeaaa.zip |
stepper: Replace PrinterHomingStepper with PrinterRail
Update the code to use the term "rail" when dealing with a motor
controlled "axis". A rail has a series of steppers and endstops that
control that motor controlled "axis".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/cartesian.py')
-rw-r--r-- | klippy/cartesian.py | 82 |
1 files changed, 40 insertions, 42 deletions
diff --git a/klippy/cartesian.py b/klippy/cartesian.py index 29de7f3a..4afbdc33 100644 --- a/klippy/cartesian.py +++ b/klippy/cartesian.py @@ -1,6 +1,6 @@ # Code for handling the kinematics of cartesian robots # -# Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net> +# Copyright (C) 2016-2018 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. import logging @@ -11,9 +11,8 @@ StepList = (0, 1, 2) class CartKinematics: def __init__(self, toolhead, config): self.printer = config.get_printer() - self.steppers = [stepper.LookupMultiHomingStepper( - config.getsection('stepper_' + n)) - for n in ['x', 'y', 'z']] + self.rails = [stepper.LookupMultiRail(config.getsection('stepper_' + n)) + for n in ['x', 'y', 'z']] max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat( 'max_z_velocity', max_velocity, above=0., maxval=max_velocity) @@ -25,46 +24,45 @@ class CartKinematics: ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.move_fill = ffi_lib.move_fill - for a, s in zip('xyz', self.steppers): - s.setup_cartesian_itersolve(a) + for axis, rail in zip('xyz', self.rails): + rail.setup_cartesian_itersolve(axis) # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() - self.steppers[0].set_max_jerk(max_halt_velocity, max_accel) - self.steppers[1].set_max_jerk(max_halt_velocity, max_accel) - self.steppers[2].set_max_jerk( + self.rails[0].set_max_jerk(max_halt_velocity, max_accel) + self.rails[1].set_max_jerk(max_halt_velocity, max_accel) + self.rails[2].set_max_jerk( min(max_halt_velocity, self.max_z_velocity), max_accel) # Check for dual carriage support self.dual_carriage_axis = None - self.dual_carriage_steppers = [] + self.dual_carriage_rails = [] if config.has_section('dual_carriage'): dc_config = config.getsection('dual_carriage') dc_axis = dc_config.getchoice('axis', {'x': 'x', 'y': 'y'}) self.dual_carriage_axis = {'x': 0, 'y': 1}[dc_axis] - dc_stepper = stepper.LookupMultiHomingStepper(dc_config) - dc_stepper.setup_cartesian_itersolve(dc_axis) - dc_stepper.set_max_jerk(max_halt_velocity, max_accel) - self.dual_carriage_steppers = [ - self.steppers[self.dual_carriage_axis], dc_stepper] + dc_rail = stepper.LookupMultiRail(dc_config) + dc_rail.setup_cartesian_itersolve(dc_axis) + dc_rail.set_max_jerk(max_halt_velocity, max_accel) + self.dual_carriage_rails = [ + self.rails[self.dual_carriage_axis], dc_rail] self.printer.lookup_object('gcode').register_command( 'SET_DUAL_CARRIAGE', self.cmd_SET_DUAL_CARRIAGE, desc=self.cmd_SET_DUAL_CARRIAGE_help) - def get_steppers(self, flags=""): + def get_rails(self, flags=""): if flags == "Z": - return [self.steppers[2]] - return list(self.steppers) + return [self.rails[2]] + return list(self.rails) def get_position(self): - return [s.get_commanded_position() for s in self.steppers] + return [rail.get_commanded_position() for rail in self.rails] def set_position(self, newpos, homing_axes): for i in StepList: - s = self.steppers[i] - s.set_position(newpos[i]) + rail = self.rails[i] + rail.set_position(newpos[i]) if i in homing_axes: - self.limits[i] = s.get_range() - def _home_axis(self, homing_state, axis, stepper): - s = stepper + self.limits[i] = rail.get_range() + def _home_axis(self, homing_state, axis, rail): # Determine moves - position_min, position_max = s.get_range() - hi = s.get_homing_info() + position_min, position_max = rail.get_range() + hi = rail.get_homing_info() if hi.positive_dir: pos = hi.position_endstop - 1.5*(hi.position_endstop - position_min) rpos = hi.position_endstop - hi.retract_dist @@ -81,43 +79,43 @@ class CartKinematics: homepos[axis] = hi.position_endstop coord = [None, None, None, None] coord[axis] = pos - homing_state.home(coord, homepos, s.get_endstops(), homing_speed) + homing_state.home(coord, homepos, rail.get_endstops(), homing_speed) # Retract coord[axis] = rpos homing_state.retract(coord, homing_speed) # Home again coord[axis] = r2pos - homing_state.home(coord, homepos, s.get_endstops(), + homing_state.home(coord, homepos, rail.get_endstops(), homing_speed/2.0, second_home=True) # Set final homed position - coord[axis] = hi.position_endstop + s.get_homed_offset() + coord[axis] = hi.position_endstop + rail.get_homed_offset() homing_state.set_homed_position(coord) def home(self, homing_state): # Each axis is homed independently and in order for axis in homing_state.get_axes(): if axis == self.dual_carriage_axis: - dc1, dc2 = self.dual_carriage_steppers - altc = self.steppers[axis] == dc2 + dc1, dc2 = self.dual_carriage_rails + altc = self.rails[axis] == dc2 self._activate_carriage(0) self._home_axis(homing_state, axis, dc1) self._activate_carriage(1) self._home_axis(homing_state, axis, dc2) self._activate_carriage(altc) else: - self._home_axis(homing_state, axis, self.steppers[axis]) + self._home_axis(homing_state, axis, self.rails[axis]) def motor_off(self, print_time): self.limits = [(1.0, -1.0)] * 3 - for stepper in self.steppers: - stepper.motor_enable(print_time, 0) - for stepper in self.dual_carriage_steppers: - stepper.motor_enable(print_time, 0) + for rail in self.rails: + rail.motor_enable(print_time, 0) + for rail in self.dual_carriage_rails: + rail.motor_enable(print_time, 0) self.need_motor_enable = True def _check_motor_enable(self, print_time, move): need_motor_enable = False for i in StepList: if move.axes_d[i]: - self.steppers[i].motor_enable(print_time, 1) - need_motor_enable |= not self.steppers[i].is_motor_enabled() + self.rails[i].motor_enable(print_time, 1) + need_motor_enable |= not self.rails[i].is_motor_enabled() self.need_motor_enable = need_motor_enable def _check_endstops(self, move): end_pos = move.end_pos @@ -154,18 +152,18 @@ class CartKinematics: move.start_v, move.cruise_v, move.accel) for i in StepList: if move.axes_d[i]: - self.steppers[i].step_itersolve(self.cmove) + self.rails[i].step_itersolve(self.cmove) # Dual carriage support def _activate_carriage(self, carriage): toolhead = self.printer.lookup_object('toolhead') toolhead.get_last_move_time() - dc_stepper = self.dual_carriage_steppers[carriage] + dc_rail = self.dual_carriage_rails[carriage] dc_axis = self.dual_carriage_axis - self.steppers[dc_axis] = dc_stepper + self.rails[dc_axis] = dc_rail extruder_pos = toolhead.get_position()[3] toolhead.set_position(self.get_position() + [extruder_pos]) if self.limits[dc_axis][0] <= self.limits[dc_axis][1]: - self.limits[dc_axis] = dc_stepper.get_range() + self.limits[dc_axis] = dc_rail.get_range() self.need_motor_enable = True cmd_SET_DUAL_CARRIAGE_help = "Set which carriage is active" def cmd_SET_DUAL_CARRIAGE(self, params): |