Retraction is the technique of sucking molten plastic back up into the heated extrusion nozzle of a 3D printer. Like squeezing the edges of a toothpaste tube to suck back in some of the toothpaste you accidentally squeezed out. The printer does it by turning the extruder motor in reverse.
I’ve been fighting a losing battle with retraction since Boxing day (December 26). Not a single print worth displaying on my blog has emerged from my printer since then. So I thought I should blog about that!
Writing is so much easier than 3D printing. Maybe it’s because I’ve been reading and writing for something like 45 years. I’m sure printing will get easier.
No Toys => Not Happy
My Xmas present haul this year was noticably lacking in toys. Just because I’m nearing 50 doesn’t mean that a toyless Xmas satisfies me. So I decided to use my big toy, my MakerGear Mendel Prusa 3D printer, to make myself some smaller toys.
I like Lego, and especially Lego minifigs. On Thingiverse several people with much more 3D modelling skill than me have posted STL files for double-sized minifig clones.
Weldingrod1 very cleverly laid out a single plate of many parts, which would make four whole minifigs in one batch. ‘Cool’, says I.
Download file -> Netfabb -> Slic3r -> Pronterface -> Marlin non-gen6.
Oops. I’ve never tried to print anything with as many ‘travel’ moves as this. A travel move is when the extruder moves from one place to another without extruding any plastic. Like when moving from one part to another.
That is where Retraction comes in.
While extruding plastic within a contiguous part, the plastic flows out continuously, with only the rate changing (for complex reasons I only partly understand). When the nozzle wants to jump across a gap to a new part, a cobweb-like thin strand of plastic tends to follow the nozzle across. Messy.
The solution is to retract the filament back up into the nozzle just before jumping across the gap. Then, on arrival at the other side, we have to advance the filament back to where it was before we extruded it.
When this works, it stops stringy cobwebs forming, and allows printing to continue uninterrupted on the other side of the gap. As you will have guessed from my ‘losing battle’ comment earlier, this is not what is happening for me.
Problems with retraction
Here are the ways I’ve noticed retraction failing so far in the last week:
- Tool little retraction:- strings form across jumps. Ok, I understand this, and I can change the retraction distance in Slic3r to decreas the strings.
- Too much retraction compensation:- after the jump, a big circle of plastic forms as the nozzle extrudes more plastic than it needs to start the next segment. This causes a buildup of excess plastic and often a layer offset later on as the nozzle bounces off solidified plastic from lower layers.
- Too little retraction compensation:- after the jump, the nozzle starts moving again before any plastic comes out, leaving a gap. This is not such a problem, unless the object has very thin walls, but it offends my sense of correctness.
What causes bad retraction?
If I knew the answer to this, I’d have posted ‘before and after’ photographs of something elegant that I’d produced with my printer. So you can guess this is going to be about theorising more than step-by-step instructions.
I’ve played with the ‘Retraction Distance’ setting in Slic3r. Larger distances seemed to make things worse. Reducing to zero gave me no blobbing on starting segments, but nasty stringing all over the place.
I’ve tried reducing the amount of plastic being extruded, both by lying about my filament diameter and by changing my E-steps per mm settings in the firmware. Neither seemed to affect the blobbing from retraction compensation.
I’ve played with different firmware versions, assuming there might be bugs in the retraction code that had been fixed in later versions. This got me into dark and murky waters. The V1 beta of Marlin has numbers in its config file whose purpose eludes me completely, and which are probably magically designed for the Ultimaker printer. I don’t know how to set them for my MakerGear Prusa. The defaults are way too fast and really aggressive in direction changes.
You’ll notice that the last two bullet-pointed problems above (too much compensation, or too little) seem to be a mismatch between how much the filament is retracted before the jump, and how much it is advanced again after the jump.
One possible culprit here is ‘ooze’. Ooze is the natural tendency of the molten plastic in the hot-end of the nozzle to want to drip out. Possibly encouraged by expanding as it heats (though that is just a guess on my part; I don’t know if molten PLA is compressible). I know my natural PLA is prone to ooze, because I can see string starting to extrude out of the nozzle well before I get to my target printing temperature, and before I turn on the extruder.
I understand skeinforge has settings for calibrating the amount of ooze for a given temperature and plastic composition. I really don’t want to have to use skeinforge if I can avoid it. Slic3r doesn’t have anything ooze-related in its graphical user interface that I can see, and I haven’t looked into its command line interface.
So I haven’t tried to solve my retraction issues as an ooze-based effect. Maybe that needs to be my next step?
This was my favoured theory for quite a while, perhaps because it didn’t involve going back to skeinforge’s incredibly ugly user interface.
What if the extruder can’t retract as fast as it can extrude? Marlin seems to come with a default that says that the feedrate for extrusion is 3000 whatsits (possibly mm), and the feedrate for retraction is 7000 whatsits. That doesn’t seem right – it can suck plastic back up against gravity and the pressure in the hot end more than twice as fast as it can extrude it?
Maybe the extruder is missing steps while attempting to retract way too fast for my combination of hot-end and extruder motor. Or maybe the much-vaunted acceleration feature of Marlin is trying to over-accelerate the extruder motor. Yet I have a feeling that if I slow the extruder down too far (how far is too far?) I’ll get overlap with other problems like excessive ooze.
If the filament retracts too far, maybe air gets into the heater chamber and starts pressurising the plastic even more? I’d expect little puffs and bubbles, which I’m not seeing.
What if the pressure in the nozzle chamber acts as a limit on how fast the plastic can be retracted back into the nozzle? That’d result in the extruder missing steps, I guess.
Just thinking out loud
My problem is that I don’t understand what reasonable values might be for my extruder stepper. And there are lots of values in the configuration.h files of both Sprinter and the different versions of Marlin. And I don’t know what most of them do.
I can see I have written twelve pages of trials and experimental results in my hand-written log book since my first attempt to print the founding members of my Bizarro-World Lego-ish Army of Toy Supremacy. And I have a large pile of two- and three-layer pieces of aborted prints.
Somehow I have to see that as a success.
Many thanks to the kind folks who have encouraged my construction notes and explanations of things that I do (mostly) understand. Knowing that others are succeeding keeps me determined to succeed too.