diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-03-19 21:38:59 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-03-19 21:38:59 -0400 |
commit | f97cf5c3b685065577f5899cd6c2863c611966f3 (patch) | |
tree | 2e4426ad8a0a06e4a9512598b183b3a6331e3b6a /klippy/extruder.py | |
parent | 5ff2d5aee61f26ef4c6a3e36a0da6ede22fb6997 (diff) | |
download | kutter-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>
Diffstat (limited to 'klippy/extruder.py')
-rw-r--r-- | klippy/extruder.py | 10 |
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): |