aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-07-24 13:54:46 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-07-24 13:54:46 -0400
commit143b7cccf4bb170fa6a78d88da9d061487288792 (patch)
tree50a290c028f2604b66c88e343613d2afd6dcebd1 /klippy
parent8ce042bf04aca923460d7ed37fa938e11378f917 (diff)
downloadkutter-143b7cccf4bb170fa6a78d88da9d061487288792.tar.gz
kutter-143b7cccf4bb170fa6a78d88da9d061487288792.tar.xz
kutter-143b7cccf4bb170fa6a78d88da9d061487288792.zip
stepper: Separate out homing code to its own PrinterHomingStepper class
Keep the homing code separate from the main stepper class. This makes it easier to verify the correct config parameters are provided. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/cartesian.py2
-rw-r--r--klippy/corexy.py2
-rw-r--r--klippy/delta.py2
-rw-r--r--klippy/stepper.py81
4 files changed, 45 insertions, 42 deletions
diff --git a/klippy/cartesian.py b/klippy/cartesian.py
index f69855f6..d1747e6e 100644
--- a/klippy/cartesian.py
+++ b/klippy/cartesian.py
@@ -10,7 +10,7 @@ StepList = (0, 1, 2)
class CartKinematics:
def __init__(self, printer, config):
- self.steppers = [stepper.PrinterStepper(
+ self.steppers = [stepper.PrinterHomingStepper(
printer, config.getsection('stepper_' + n), n)
for n in ['x', 'y', 'z']]
self.max_z_velocity = config.getfloat(
diff --git a/klippy/corexy.py b/klippy/corexy.py
index d429496c..1fdfa817 100644
--- a/klippy/corexy.py
+++ b/klippy/corexy.py
@@ -10,7 +10,7 @@ StepList = (0, 1, 2)
class CoreXYKinematics:
def __init__(self, printer, config):
- self.steppers = [stepper.PrinterStepper(
+ self.steppers = [stepper.PrinterHomingStepper(
printer, config.getsection('stepper_' + n), n)
for n in ['x', 'y', 'z']]
self.steppers[0].mcu_endstop.add_stepper(self.steppers[1].mcu_stepper)
diff --git a/klippy/delta.py b/klippy/delta.py
index fd3705e3..8d8ecf04 100644
--- a/klippy/delta.py
+++ b/klippy/delta.py
@@ -14,7 +14,7 @@ SLOW_RATIO = 3.
class DeltaKinematics:
def __init__(self, printer, config):
self.config = config
- self.steppers = [stepper.PrinterStepper(
+ self.steppers = [stepper.PrinterHomingStepper(
printer, config.getsection('stepper_' + n), n)
for n in ['a', 'b', 'c']]
self.need_motor_enable = self.need_home = True
diff --git a/klippy/stepper.py b/klippy/stepper.py
index eac1d263..61900a20 100644
--- a/klippy/stepper.py
+++ b/klippy/stepper.py
@@ -13,6 +13,48 @@ class PrinterStepper:
self.step_dist = config.getfloat('step_distance', above=0.)
self.inv_step_dist = 1. / self.step_dist
self.min_stop_interval = 0.
+ step_pin = config.get('step_pin')
+ dir_pin = config.get('dir_pin')
+ self.mcu_stepper = printer.mcu.create_stepper(step_pin, dir_pin)
+ self.mcu_stepper.set_step_distance(self.step_dist)
+
+ enable_pin = config.get('enable_pin', None)
+ if enable_pin is not None:
+ self.mcu_enable = printer.mcu.create_digital_out(enable_pin, 0)
+ self.need_motor_enable = True
+ def _dist_to_time(self, dist, start_velocity, accel):
+ # Calculate the time it takes to travel a distance with constant accel
+ time_offset = start_velocity / accel
+ return math.sqrt(2. * dist / accel + time_offset**2) - time_offset
+ def set_max_jerk(self, max_halt_velocity, max_accel):
+ # Calculate the firmware's maximum halt interval time
+ last_step_time = self._dist_to_time(
+ self.step_dist, max_halt_velocity, max_accel)
+ second_last_step_time = self._dist_to_time(
+ 2. * self.step_dist, max_halt_velocity, max_accel)
+ min_stop_interval = second_last_step_time - last_step_time
+ self.mcu_stepper.set_min_stop_interval(min_stop_interval)
+ def motor_enable(self, move_time, enable=0):
+ if enable and self.need_motor_enable:
+ mcu_time = self.mcu_stepper.print_to_mcu_time(move_time)
+ self.mcu_stepper.reset_step_clock(mcu_time)
+ if (self.mcu_enable is not None
+ and self.mcu_enable.get_last_setting() != enable):
+ mcu_time = self.mcu_enable.print_to_mcu_time(move_time)
+ self.mcu_enable.set_digital(mcu_time, enable)
+ self.need_motor_enable = not enable
+
+class PrinterHomingStepper(PrinterStepper):
+ def __init__(self, printer, config, name):
+ PrinterStepper.__init__(self, printer, config, name)
+
+ endstop_pin = config.get('endstop_pin', None)
+ self.mcu_endstop = printer.mcu.create_endstop(endstop_pin)
+ self.mcu_endstop.add_stepper(self.mcu_stepper)
+ self.position_min = config.getfloat('position_min', 0.)
+ self.position_max = config.getfloat(
+ 'position_max', 0., above=self.position_min)
+ self.position_endstop = config.getfloat('position_endstop')
self.homing_speed = config.getfloat('homing_speed', 5.0, above=0.)
self.homing_positive_dir = config.getboolean(
@@ -42,45 +84,6 @@ class PrinterStepper:
self.homing_stepper_phases = None
if printer.mcu.is_fileoutput():
self.homing_endstop_accuracy = self.homing_stepper_phases
- self.position_min = self.position_endstop = self.position_max = None
- endstop_pin = config.get('endstop_pin', None)
- step_pin = config.get('step_pin')
- dir_pin = config.get('dir_pin')
- mcu = printer.mcu
- self.mcu_stepper = mcu.create_stepper(step_pin, dir_pin)
- self.mcu_stepper.set_step_distance(self.step_dist)
- enable_pin = config.get('enable_pin', None)
- if enable_pin is not None:
- self.mcu_enable = mcu.create_digital_out(enable_pin, 0)
- if endstop_pin is not None:
- self.mcu_endstop = mcu.create_endstop(endstop_pin)
- self.mcu_endstop.add_stepper(self.mcu_stepper)
- self.position_min = config.getfloat('position_min', 0.)
- self.position_max = config.getfloat(
- 'position_max', 0., above=self.position_min)
- self.position_endstop = config.getfloat('position_endstop')
- self.need_motor_enable = True
- def _dist_to_time(self, dist, start_velocity, accel):
- # Calculate the time it takes to travel a distance with constant accel
- time_offset = start_velocity / accel
- return math.sqrt(2. * dist / accel + time_offset**2) - time_offset
- def set_max_jerk(self, max_halt_velocity, max_accel):
- # Calculate the firmware's maximum halt interval time
- last_step_time = self._dist_to_time(
- self.step_dist, max_halt_velocity, max_accel)
- second_last_step_time = self._dist_to_time(
- 2. * self.step_dist, max_halt_velocity, max_accel)
- min_stop_interval = second_last_step_time - last_step_time
- self.mcu_stepper.set_min_stop_interval(min_stop_interval)
- def motor_enable(self, move_time, enable=0):
- if enable and self.need_motor_enable:
- mcu_time = self.mcu_stepper.print_to_mcu_time(move_time)
- self.mcu_stepper.reset_step_clock(mcu_time)
- if (self.mcu_enable is not None
- and self.mcu_enable.get_last_setting() != enable):
- mcu_time = self.mcu_enable.print_to_mcu_time(move_time)
- self.mcu_enable.set_digital(mcu_time, enable)
- self.need_motor_enable = not enable
def enable_endstop_checking(self, move_time, step_time):
mcu_time = self.mcu_endstop.print_to_mcu_time(move_time)
self.mcu_endstop.home_start(mcu_time, step_time)