aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-03-19 21:38:59 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-03-19 21:38:59 -0400
commitf97cf5c3b685065577f5899cd6c2863c611966f3 (patch)
tree2e4426ad8a0a06e4a9512598b183b3a6331e3b6a
parent5ff2d5aee61f26ef4c6a3e36a0da6ede22fb6997 (diff)
downloadkutter-f97cf5c3b685065577f5899cd6c2863c611966f3.tar.gz
kutter-f97cf5c3b685065577f5899cd6c2863c611966f3.tar.xz
kutter-f97cf5c3b685065577f5899cd6c2863c611966f3.zip
extruder: Avoid maximum extrude cross section errors on infinitesimal moves
Be less likely to raise a "Move exceeds maximum extrusion cross section" error on very short moves. It's okay to extrude a little extra plastic on moves shorter than the nozzle diameter. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--klippy/extruder.py10
1 files changed, 6 insertions, 4 deletions
diff --git a/klippy/extruder.py b/klippy/extruder.py
index f2c92073..98667b98 100644
--- a/klippy/extruder.py
+++ b/klippy/extruder.py
@@ -13,11 +13,11 @@ class PrinterExtruder:
self.config = config
self.heater = heater.PrinterHeater(printer, config)
self.stepper = stepper.PrinterStepper(printer, config, 'extruder')
- nozzle_diameter = config.getfloat('nozzle_diameter')
+ self.nozzle_diameter = config.getfloat('nozzle_diameter')
filament_diameter = config.getfloat('filament_diameter')
filament_area = math.pi * (filament_diameter * .5)**2
max_cross_section = config.getfloat(
- 'max_extrude_cross_section', 4. * nozzle_diameter**2)
+ 'max_extrude_cross_section', 4. * self.nozzle_diameter**2)
self.max_extrude_ratio = max_cross_section / filament_area
self.max_e_dist = config.getfloat('max_extrude_only_distance', 50.)
self.max_e_velocity = self.max_e_accel = None
@@ -49,8 +49,10 @@ class PrinterExtruder:
raise homing.EndstopMoveError(
move.end_pos, "Extrude only move too long")
move.limit_speed(self.max_e_velocity, self.max_e_accel)
- elif move.extrude_r > self.max_extrude_ratio:
- logging.debug("%s vs %s" % (move.extrude_r, self.max_extrude_ratio))
+ elif (move.extrude_r > self.max_extrude_ratio
+ and move.axes_d[3] > self.nozzle_diameter*self.max_extrude_ratio):
+ logging.debug("Overextrude: %s vs %s" % (
+ move.extrude_r, self.max_extrude_ratio))
raise homing.EndstopMoveError(
move.end_pos, "Move exceeds maximum extrusion cross section")
def calc_junction(self, prev_move, move):