New option to use G10/G11 for firmware-controlled retraction. #1494

This commit is contained in:
Alessandro Ranellucci 2013-10-27 16:59:18 +01:00
parent 0e3c9ebe52
commit bcc061176c
5 changed files with 23 additions and 4 deletions

View File

@ -126,7 +126,8 @@ The author of the Silk icon set is Mark James.
(+/-, default: 0)
--gcode-flavor The type of G-code to generate (reprap/teacup/makerware/sailfish/mach3/no-extrusion,
default: reprap)
--use-relative-e-distances Enable this to get relative E values
--use-relative-e-distances Enable this to get relative E values (default: no)
--use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no)
--gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported
by all firmwares)
--g0 Use G0 commands for retraction (experimental, not supported by all

View File

@ -86,6 +86,13 @@ our $Options = {
type => 'bool',
default => 0,
},
'use_firmware_retraction' => {
label => 'Use firmware retraction',
tooltip => 'This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin.',
cli => 'use-firmware-retraction!',
type => 'bool',
default => 0,
},
'extrusion_axis' => {
label => 'Extrusion axis',
tooltip => 'Use this option to set the axis letter associated to your printer\'s extruder (usually E but some printers use A).',
@ -1391,6 +1398,12 @@ sub validate {
die "Invalid value for --gcode-flavor\n"
if !first { $_ eq $self->gcode_flavor } @{$Options->{gcode_flavor}{values}};
die "--use-firmware-retraction is only supported by Marlin firmware\n"
if $self->use_firmware_retraction && $self->gcode_flavor ne 'reprap';
die "--use-firmware-retraction is not compatible with --wipe\n"
if $self->use_firmware_retraction && first {$_} @{$self->wipe};
# --print-center
die "Invalid value for --print-center\n"
if !ref $self->print_center

View File

@ -504,6 +504,8 @@ sub retract {
$self->speed('retract');
$gcode .= $self->G1(undef, undef, $retract->[2] - $retracted, $comment);
}
} elsif ($self->config->use_firmware_retraction) {
$gcode .= "G10 ; retract\n";
} else {
$self->speed('retract');
$gcode .= $self->G1(@$retract);
@ -546,7 +548,9 @@ sub unretract {
my $to_unretract = $self->extruder->retracted + $self->extruder->restart_extra;
if ($to_unretract) {
$self->speed('retract');
if ($self->config->extrusion_axis) {
if ($self->config->use_firmware_retraction) {
$gcode .= "G11 ; unretract\n";
} elsif ($self->config->extrusion_axis) {
# use G1 instead of G0 because G0 will blend the restart with the previous travel move
$gcode .= sprintf "G1 E%.5f F%.3f",
$self->extruder->extrude($to_unretract),

View File

@ -689,7 +689,7 @@ sub build {
},
{
title => 'Advanced',
options => [qw(vibration_limit)],
options => [qw(use_firmware_retraction vibration_limit)],
},
]);

View File

@ -202,7 +202,8 @@ $j
(+/-, default: $config->{z_offset})
--gcode-flavor The type of G-code to generate (reprap/teacup/makerware/sailfish/mach3/no-extrusion,
default: $config->{gcode_flavor})
--use-relative-e-distances Enable this to get relative E values
--use-relative-e-distances Enable this to get relative E values (default: no)
--use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no)
--gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported
by all firmwares)
--g0 Use G0 commands for retraction (experimental, not supported by all