aboutsummaryrefslogtreecommitdiffstats
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
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>
-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(