From 2ea3631222019b1eda1eb451ac60188b36951baa Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Thu, 23 Jan 2020 21:14:09 -0500 Subject: [PATCH] delta: Add print_radius option to customize valid XY radius Add ability to override the default XY move checking radius. Signed-off-by: Kevin O'Connor --- config/example-delta.cfg | 7 +++++++ klippy/kinematics/delta.py | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/config/example-delta.cfg b/config/example-delta.cfg index b6a25fdb..320a74af 100644 --- a/config/example-delta.cfg +++ b/config/example-delta.cfg @@ -107,6 +107,13 @@ delta_radius: 174.75 # axis towers. This parameter may also be calculated as: # delta_radius = smooth_rod_offset - effector_offset - carriage_offset # This parameter must be provided. +#print_radius: +# The radius (in mm) of valid toolhead XY coordinates. One may use +# this setting to customize the range checking of toolhead moves. If +# a large value is specified here then it may be possible to command +# the toolhead into a collision with a tower. The default is to use +# delta_radius for print_radius (which would normally prevent a +# tower collision). # The delta_calibrate section enables a DELTA_CALIBRATE extended # g-code command that can calibrate the tower endstop positions and diff --git a/klippy/kinematics/delta.py b/klippy/kinematics/delta.py index 057e9241..885ce940 100644 --- a/klippy/kinematics/delta.py +++ b/klippy/kinematics/delta.py @@ -36,6 +36,7 @@ class DeltaKinematics: rail.set_max_jerk(max_halt_velocity, max_halt_accel) # Read radius and arm lengths self.radius = radius = config.getfloat('delta_radius', above=0.) + print_radius = config.getfloat('print_radius', radius, above=0.) arm_length_a = stepper_configs[0].getfloat('arm_length', above=radius) self.arm_lengths = arm_lengths = [ sconfig.getfloat('arm_length', arm_length_a, above=radius) @@ -80,7 +81,7 @@ class DeltaKinematics: + half_min_step_dist) self.slow_xy2 = (ratio_to_dist(SLOW_RATIO) - radius)**2 self.very_slow_xy2 = (ratio_to_dist(2. * SLOW_RATIO) - radius)**2 - self.max_xy2 = min(radius, min_arm_length - radius, + self.max_xy2 = min(print_radius, min_arm_length - radius, ratio_to_dist(4. * SLOW_RATIO) - radius)**2 logging.info("Delta max build radius %.2fmm (moves slowed past %.2fmm" " and %.2fmm)" % (