New --cooling option and checkbox to enable/disable fan and cooling control
This commit is contained in:
parent
70e69be60a
commit
170d29a789
@ -164,6 +164,7 @@ The author is Alessandro Ranellucci (me).
|
|||||||
--retract-lift Lift Z by the given distance in mm when retracting (default: 0)
|
--retract-lift Lift Z by the given distance in mm when retracting (default: 0)
|
||||||
|
|
||||||
Cooling options:
|
Cooling options:
|
||||||
|
--cooling Enable fan and cooling control
|
||||||
--min-fan-speed Minimum fan speed (default: 35%)
|
--min-fan-speed Minimum fan speed (default: 35%)
|
||||||
--max-fan-speed Maximum fan speed (default: 100%)
|
--max-fan-speed Maximum fan speed (default: 100%)
|
||||||
--bridge-fan-speed Fan speed to use when bridging (default: 100%)
|
--bridge-fan-speed Fan speed to use when bridging (default: 100%)
|
||||||
|
@ -115,6 +115,7 @@ our $retract_before_travel = 2; # mm
|
|||||||
our $retract_lift = 0; # mm
|
our $retract_lift = 0; # mm
|
||||||
|
|
||||||
# cooling options
|
# cooling options
|
||||||
|
our $cooling = 0;
|
||||||
our $min_fan_speed = 35;
|
our $min_fan_speed = 35;
|
||||||
our $max_fan_speed = 100;
|
our $max_fan_speed = 100;
|
||||||
our $bridge_fan_speed = 100;
|
our $bridge_fan_speed = 100;
|
||||||
|
@ -293,6 +293,11 @@ our $Options = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
# cooling options
|
# cooling options
|
||||||
|
'cooling' => {
|
||||||
|
label => 'Enable cooling',
|
||||||
|
cli => 'cooling',
|
||||||
|
type => 'bool',
|
||||||
|
},
|
||||||
'min_fan_speed' => {
|
'min_fan_speed' => {
|
||||||
label => 'Min fan speed (%)',
|
label => 'Min fan speed (%)',
|
||||||
cli => 'min-fan-speed=i',
|
cli => 'min-fan-speed=i',
|
||||||
|
@ -158,8 +158,7 @@ sub extrude_path {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: optimize: avoid calculation if cooling is disabled
|
if ($Slic3r::cooling) {
|
||||||
if (1) {
|
|
||||||
$self->elapsed_time($self->elapsed_time + (unscale($path_length) / $self->speeds->{$self->last_speed} * 60));
|
$self->elapsed_time($self->elapsed_time + (unscale($path_length) / $self->speeds->{$self->last_speed} * 60));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ sub new {
|
|||||||
},
|
},
|
||||||
cooling => {
|
cooling => {
|
||||||
title => 'Cooling',
|
title => 'Cooling',
|
||||||
options => [qw(min_fan_speed max_fan_speed bridge_fan_speed fan_below_layer_time slowdown_below_layer_time min_print_speed disable_fan_first_layers)],
|
options => [qw(cooling min_fan_speed max_fan_speed bridge_fan_speed fan_below_layer_time slowdown_below_layer_time min_print_speed disable_fan_first_layers)],
|
||||||
label_width => 300,
|
label_width => 300,
|
||||||
},
|
},
|
||||||
skirt => {
|
skirt => {
|
||||||
|
@ -660,33 +660,35 @@ sub export_gcode {
|
|||||||
}
|
}
|
||||||
last if !$layer_gcode;
|
last if !$layer_gcode;
|
||||||
|
|
||||||
my $layer_time = $extruder->elapsed_time;
|
|
||||||
my $fan_speed = 0;
|
my $fan_speed = 0;
|
||||||
my $speed_factor = 1;
|
my $speed_factor = 1;
|
||||||
Slic3r::debugf "Layer %d estimated printing time: %d seconds\n", $layer->id, $layer_time;
|
if ($Slic3r::cooling) {
|
||||||
if ($layer_time < $Slic3r::fan_below_layer_time) {
|
my $layer_time = $extruder->elapsed_time;
|
||||||
if ($layer_time < $Slic3r::slowdown_below_layer_time) {
|
Slic3r::debugf "Layer %d estimated printing time: %d seconds\n", $layer->id, $layer_time;
|
||||||
$fan_speed = $Slic3r::max_fan_speed;
|
if ($layer_time < $Slic3r::fan_below_layer_time) {
|
||||||
$speed_factor = $layer_time / $Slic3r::slowdown_below_layer_time;
|
if ($layer_time < $Slic3r::slowdown_below_layer_time) {
|
||||||
} else {
|
$fan_speed = $Slic3r::max_fan_speed;
|
||||||
$fan_speed = $Slic3r::max_fan_speed - ($Slic3r::max_fan_speed - $Slic3r::min_fan_speed)
|
$speed_factor = $layer_time / $Slic3r::slowdown_below_layer_time;
|
||||||
* ($layer_time - $Slic3r::slowdown_below_layer_time)
|
} else {
|
||||||
/ ($Slic3r::fan_below_layer_time - $Slic3r::slowdown_below_layer_time); #/
|
$fan_speed = $Slic3r::max_fan_speed - ($Slic3r::max_fan_speed - $Slic3r::min_fan_speed)
|
||||||
|
* ($layer_time - $Slic3r::slowdown_below_layer_time)
|
||||||
|
/ ($Slic3r::fan_below_layer_time - $Slic3r::slowdown_below_layer_time); #/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Slic3r::debugf " fan = %d%%, speed = %d%%\n", $fan_speed, $speed_factor * 100;
|
||||||
|
|
||||||
|
if ($speed_factor < 1) {
|
||||||
|
$layer_gcode =~ s/^(?=.*? [XY])(G1 .*?F)(\d+(?:\.\d+)?)/
|
||||||
|
my $new_speed = $2 * $speed_factor;
|
||||||
|
$1 . sprintf("%.${dec}f", $new_speed < $min_print_speed ? $min_print_speed : $new_speed)
|
||||||
|
/gexm;
|
||||||
|
}
|
||||||
|
$fan_speed = 0 if $layer->id < $Slic3r::disable_fan_first_layers;
|
||||||
|
$layer_gcode = $extruder->set_fan($fan_speed) . $layer_gcode;
|
||||||
}
|
}
|
||||||
Slic3r::debugf " fan = %d%%, speed = %d%%\n", $fan_speed, $speed_factor * 100;
|
|
||||||
|
|
||||||
if ($speed_factor < 1) {
|
|
||||||
$layer_gcode =~ s/^(?=.*? [XY])(G1 .*?F)(\d+(?:\.\d+)?)/
|
|
||||||
my $new_speed = $2 * $speed_factor;
|
|
||||||
$1 . sprintf("%.${dec}f", $new_speed < $min_print_speed ? $min_print_speed : $new_speed)
|
|
||||||
/gexm;
|
|
||||||
}
|
|
||||||
$fan_speed = 0 if $layer->id < $Slic3r::disable_fan_first_layers;
|
|
||||||
$layer_gcode = $extruder->set_fan($fan_speed) . $layer_gcode;
|
|
||||||
|
|
||||||
# bridge fan speed
|
# bridge fan speed
|
||||||
if ($Slic3r::bridge_fan_speed == 0 || $layer->id < $Slic3r::disable_fan_first_layers) {
|
if (!$Slic3r::cooling || $Slic3r::bridge_fan_speed == 0 || $layer->id < $Slic3r::disable_fan_first_layers) {
|
||||||
$layer_gcode =~ s/^_BRIDGE_FAN_(?:START|END)\n//gm;
|
$layer_gcode =~ s/^_BRIDGE_FAN_(?:START|END)\n//gm;
|
||||||
} else {
|
} else {
|
||||||
$layer_gcode =~ s/^_BRIDGE_FAN_START\n/ $extruder->set_fan($Slic3r::bridge_fan_speed, 1) /gmex;
|
$layer_gcode =~ s/^_BRIDGE_FAN_START\n/ $extruder->set_fan($Slic3r::bridge_fan_speed, 1) /gmex;
|
||||||
|
@ -182,6 +182,7 @@ Usage: slic3r.pl [ OPTIONS ] file.stl
|
|||||||
--retract-lift Lift Z by the given distance in mm when retracting (default: $Slic3r::retract_lift)
|
--retract-lift Lift Z by the given distance in mm when retracting (default: $Slic3r::retract_lift)
|
||||||
|
|
||||||
Cooling options:
|
Cooling options:
|
||||||
|
--cooling Enable fan and cooling control
|
||||||
--min-fan-speed Minimum fan speed (default: $Slic3r::min_fan_speed%)
|
--min-fan-speed Minimum fan speed (default: $Slic3r::min_fan_speed%)
|
||||||
--max-fan-speed Maximum fan speed (default: $Slic3r::max_fan_speed%)
|
--max-fan-speed Maximum fan speed (default: $Slic3r::max_fan_speed%)
|
||||||
--bridge-fan-speed Fan speed to use when bridging (default: $Slic3r::bridge_fan_speed%)
|
--bridge-fan-speed Fan speed to use when bridging (default: $Slic3r::bridge_fan_speed%)
|
||||||
|
Loading…
Reference in New Issue
Block a user