delta: max z-accel and speed ratio calculation for deltas (#4689)

Adding a possibility to use a lower z- acceleration.

Signed-off-by: Martin Malmqvist <volcomosq@gmx.com>
This commit is contained in:
Nitram 2021-11-29 19:21:26 +01:00 committed by GitHub
parent 2b7d0bba42
commit 54acca37ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 1 deletions

View File

@ -250,6 +250,11 @@ max_z_velocity:
# maximum speed of up/down moves (which require a higher step rate # maximum speed of up/down moves (which require a higher step rate
# than other moves on a delta printer). The default is to use # than other moves on a delta printer). The default is to use
# max_velocity for max_z_velocity. # max_velocity for max_z_velocity.
#max_z_accel:
# This sets the maximum acceleration (in mm/s^2) of movement along
# the z axis. Setting this may be useful if the printer can reach higher
# acceleration on XY moves than Z moves (eg, when using input shaper).
# The default is to use max_accel for max_z_accel.
#minimum_z_position: 0 #minimum_z_position: 0
# The minimum Z position that the user may command the head to move # The minimum Z position that the user may command the head to move
# to. The default is 0. # to. The default is 0.

View File

@ -30,6 +30,8 @@ class DeltaKinematics:
self.max_z_velocity = config.getfloat( self.max_z_velocity = config.getfloat(
'max_z_velocity', self.max_velocity, 'max_z_velocity', self.max_velocity,
above=0., maxval=self.max_velocity) above=0., maxval=self.max_velocity)
self.max_z_accel = config.getfloat('max_z_accel', self.max_accel,
above=0., maxval=self.max_accel)
# Read radius and arm lengths # Read radius and arm lengths
self.radius = radius = config.getfloat('delta_radius', above=0.) self.radius = radius = config.getfloat('delta_radius', above=0.)
print_radius = config.getfloat('print_radius', radius, above=0.) print_radius = config.getfloat('print_radius', radius, above=0.)
@ -130,7 +132,8 @@ class DeltaKinematics:
limit_xy2 = -1. limit_xy2 = -1.
if move.axes_d[2]: if move.axes_d[2]:
z_ratio = move.move_d / abs(move.axes_d[2]) z_ratio = move.move_d / abs(move.axes_d[2])
move.limit_speed(self.max_z_velocity * z_ratio, move.accel) move.limit_speed(self.max_z_velocity * z_ratio,
self.max_z_accel * z_ratio)
limit_xy2 = -1. limit_xy2 = -1.
# Limit the speed/accel of this move if is is at the extreme # Limit the speed/accel of this move if is is at the extreme
# end of the build envelope # end of the build envelope