aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/cartesian.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-06-22 11:44:25 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-06-22 14:09:01 -0400
commit0791c694995ef2d8f559e2e0c072e34b46aaeaaa (patch)
treebd89d69067596bd3fc1052cf030616486e90043b /klippy/cartesian.py
parent93d0526a775c09606779bd237c6e21b1680eeed8 (diff)
downloadkutter-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.py82
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):