aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extruder.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2016-11-04 19:28:07 -0400
committerKevin O'Connor <kevin@koconnor.net>2016-11-05 11:04:50 -0400
commita201385008de76c5e52ec40fc63e6b292863e71c (patch)
treee0a8b8a323d284c7fd6a79f2a078031452561b1a /klippy/extruder.py
parent9d7aa1e1558ffeb596f36d0b1c72fbd1ba062ea8 (diff)
downloadkutter-a201385008de76c5e52ec40fc63e6b292863e71c.tar.gz
kutter-a201385008de76c5e52ec40fc63e6b292863e71c.tar.xz
kutter-a201385008de76c5e52ec40fc63e6b292863e71c.zip
extruder: Consistently use extrude distance in calculations
Avoid mixing the travel distance of the head (and its associated velocity and acceleration) with the distance the filament moves. Instead, use the filament travel distance. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extruder.py')
-rw-r--r--klippy/extruder.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/klippy/extruder.py b/klippy/extruder.py
index 198a89ed..ad439421 100644
--- a/klippy/extruder.py
+++ b/klippy/extruder.py
@@ -28,20 +28,23 @@ class PrinterExtruder:
# Extrude only move - limit accel and velocity
move.limit_speed(self.stepper.max_velocity, self.stepper.max_accel)
def move(self, move_time, move):
- move_d = move.move_d
- inv_accel = 1. / move.accel
+ axis_d = move.axes_d[3]
+ extrude_r = axis_d / move.move_d
+ inv_accel = 1. / (move.accel * extrude_r)
- start_v, cruise_v, end_v = move.start_v, move.cruise_v, move.end_v
+ start_v = move.start_v * extrude_r
+ cruise_v = move.cruise_v * extrude_r
+ end_v = move.end_v * extrude_r
accel_t, cruise_t, decel_t = move.accel_t, move.cruise_t, move.decel_t
- accel_d = move.accel_r * move_d
- cruise_d = move.cruise_r * move_d
- decel_d = move.decel_r * move_d
+ accel_d = move.accel_r * axis_d
+ cruise_d = move.cruise_r * axis_d
+ decel_d = move.decel_r * axis_d
retract_t = retract_d = retract_v = 0.
decel_v = cruise_v
# Update for pressure advance
- if (move.axes_d[3] >= 0. and (move.axes_d[0] or move.axes_d[1])
+ if (axis_d >= 0. and (move.axes_d[0] or move.axes_d[1])
and self.pressure_advance):
# Increase accel_d and start_v when accelerating
extra_accel_d = (cruise_v - start_v) * self.pressure_advance
@@ -71,14 +74,13 @@ class PrinterExtruder:
decel_d -= extra_decel_d
# Determine regular steps
- extrude_r = move.axes_d[3] / move_d
forward_d = accel_d + cruise_d + decel_d
start_pos = self.extrude_pos
- end_pos = start_pos + forward_d * extrude_r
+ end_pos = start_pos + forward_d
inv_step_dist = self.stepper.inv_step_dist
new_step_pos = int(end_pos*inv_step_dist + 0.5)
if new_step_pos != self.stepper_pos:
- steps = forward_d * extrude_r * inv_step_dist
+ steps = forward_d * inv_step_dist
step_offset = self.stepper_pos - start_pos * inv_step_dist + 0.5
self.stepper_pos = new_step_pos
sdir = 0
@@ -119,10 +121,10 @@ class PrinterExtruder:
# Determine retract steps
start_pos = end_pos
- end_pos -= retract_d * extrude_r
+ end_pos -= retract_d
new_step_pos = int(end_pos*inv_step_dist + 0.5)
if new_step_pos != self.stepper_pos:
- steps = retract_d * extrude_r * inv_step_dist
+ steps = retract_d * inv_step_dist
step_offset = start_pos * inv_step_dist - self.stepper_pos + 0.5
self.stepper_pos = new_step_pos
mcu_time, so = self.stepper.prep_move(