Using Firmware Retraction with Simplify3D


Why use firmware retraction?  It lets you set configure retract and unretract speeds separately, and values can be adjusted mid-print.  (Too much stringing? try increasing retraction distance.  Nozzle marring previous layers? try increasing z-hop, Getting post-retraction bumps? try slowing the unretract speed or tweaking the restart distance).  Simplify3D doesn’t provide native support firmware retraction (as of January 2016), but it does have the ability to do simple gcode post processing.  This post describes how to use it to tune retraction speeds or enable firmware retraction.  Even if your printer’s firmware doesn’t support firmware retraction, you can still customize the unretraction speed.

Customizing Unretract Speed


If you just want to change your unretract speed to a different value from the retraction speed, you can place something like the following line in the script post processing section of Simplify3D (Settings->Scripts->Post Processing->Additional terminal commands for post processing).

{REPLACE "G1 E0.0000 F6000\n" "G1 E0.0000 F600\n"}

This would slow down the unretraction speed from 100mm/sec to 10mm/sec.  Make sure the feed rate (F6000) and extra restart distance matches the setting under extruder so it replaces the right line.  If you use some of the other retraction settings that affect this line, you may need to match those as well (check a gcode file to find the exact text of the line to replace).  Feed rate is in mm/min, the value in the extruder tab may be in mm/sec or mm/min (depending on how you have Simplify3D configured).


Using Firmware Retraction

post processing

Another option is to replace the S3D generated retraction gcode with the firmware-based retraction, if the version of firmware you’re running supports it.  This will let you change your retraction settings mid print, which should make tuning retraction settings much easier.  To use firmware retraction, replace the S3D generated retraction lines with G10 (retract) and G11 (unretract).

{REPLACE "G1 E-1.0000 F6000\n" "G10\n"}
{REPLACE "G1 E0.0000 F6000\n" "G11\n"}
{REPLACE "G1 E0.0000 F1800\n" "G11\n"}

The example here is matches the settings in the first picture in this post, retraction of 1mm at 100mm/sec (these settings shouldn’t matter, as long as they’re non-zero and match the values in the replace command, the values you’ve configured in your firmware take effect when using G10/G11).  Theres a bit of an exception for the first unretract, when moving from the skirt to the print, that unretract seems to happen at 30% speed.  So the the third replace is to fix update that one line, without it the retraction between the skirt and the print doesn’t work properly.

There is an option with some firmwares to autodetect slicer generated retraction and replace it with the firmware values (M209), which might be an easier way to enable retraction gcode, but my printers don’t support it.  Some firmwares may use different gcodes for firmware retraction, check the reprap gcode page for more info.


Configuring Firmware Retraction

start script

If you’re using firmware retraction, you may want to add configuration gcode in your startup script, then edit these values to adjust your retraction settings.  These M207 and M208 gcodes are also the ones you would use if you want to use if you’re want to tune your retraction mid print.

M207 S1.0 F6000 Z0 ; set retraction length / speed
M208 S0 F600 ; set retraction recover speed / adjustments


These post processing commands have been working for me, but I haven’t tried them with all the different retraction setting permutations.  I assume some settings, like wipe during retract, will be incompatible with firmware retraction, and there may be other combinations of settings that won’t work.