Failed print after failed print

I’ve had my Lulzbot Workhorse for 2 months now and I’m very sad to say I’ve not had one single successful print - nothing.

Whether simple or complex, and using various PLAs, everything has failed in one way or another.

I’ve tried absolutely everything - the latest being contacting support and doing a firmware reset, Cura reset, etc. My current issue is that PLA stops feeding after a few hours - just clogs. It appears to be thermal runaway after the 4-6 hour range (fans running OK and on 100%, using IC3D PLA supplied by Lulzbot). I’ve had the toolhead apart following directions and ensured everything is clean.

I feel your pain.

What is your nozzle temp set to?
What extruder do you have?
I ask because I NEVER EVER EVER use 100% fan.

Your fan might be cooling the extruder too much, forcing it to overheat to keep the temp up due to the fan speed.

When I’ve set the fan speed too high, I can watch the nozzle temp read-out on the LCD drop 10 degrees or more, and then fluctuate and struggle to ever get back to set temperature.

Heh, thanks. I’m using the default settings for my printer, so:

  • Temp 215 (initial layer 210)
  • 0.5mm (HE) extruder
  • Fan speed 100% at layer 5

I’m going to attempt to restart this failed print shortly since it’s nice and flat. What do you suggest for fan speed?

Have you printed a temperature tower? My Workhorse works best at 230 for PLA.

1 Like

I’ve restarted my print from the failed layer (wow - I wish there was a tool for this), and once I’ve babied this piece through completion I will print a temperature tower.

Sorry to be a pain but what I’m looking for is a list of things I should do to ensure I achieve the most success with printing. After the temperature tower, is there anything else I should do? I already printed a single layer print and adjusted my Z offset - which is how I found out my Z offset as supplied was way off.

Thermal Runaway

Do you get an actual thermal runaway error message on the screen and/or an audible alarm? If you are getting an error message or alarm, we have to deal with this before going after slicer settings.

This can be a few things but… high on the list is a defective thermistor. The logic of thermal runaway detection is based on the idea that as the logic board turns on the heater it monitors the thermistor to verify that the hot-end is heating up and how quickly … and at some point it should arrive at the desired temp and cycle the heat on/off to maintain that temp. IF, instead, the logic board thinks that it’s been apply an awful lot of heat and not making much progress… it will suspect that the temperatures are not to be believed.

When this happens, usually the filament is significantly hotter than the thermistor reports … and you get very poor quality prints. If you were to watch the LCD display on the printer while the hot end is heating you might notice an erratic heating pattern… instead of going from room temp and gradually making it’s way up to print temp… it will make a little progress, then seem to make no progress, then spike in progress again, then maybe even get cooler, then get MUCH hotter… in other words the readings will be hopping all over. This is usually an indication that your thermistor is bad and should be replaced (it’s not difficult to replace… it’s a little plug (cylinder) with two blue wires coming out of the side … a short length of blue wires connect to a wire harness. It’s held in place with a grub-screw.

Here’s a link to the E3D site showing how this is inserted into the heater block. You can see it really wouldn’t be a big deal if you had to swap this out.

To access the heater-block you would remove the part cooling fan duct. If you look at the side of your Aerostruder, you’ll see the aluminum heat-sink with the fan attached. The bottom left and bottom right screws can be removed and this will let you detach the part cooling blower duct and fan. Take care here to not strain or yank out the power wires to the fan (the wire is long enough that I rest the fan duct on the top of my print head and even use a length of painters tape to secure it in place while I work on the hot-end). ALSO… the lower-right corner screw of the heat-sink secures the “zero sense” wire (this is how the printer detects when the nozzle touched a bed-washer) When you put the fan back in place, don’t forget to make sure that wire terminal is in place or your bed leveling system wont work.

It is important to make sure your thermistor and hot-end are working as expected … otherwise the print settings wont help (because the hot-end isn’t really printing at the temps you expect if your thermistor is failing.)


Just to confirm… you are using 2.85mm filament (aka 3mm) and not the thinner 1.75mm filament, correct?

If you are getting jams, make sure the hobb gear (the feeder gear that pushes the ailment into the hot-end) has nice clean teeth. If the teeth have bits of filament in it, then things are going to slip because it wont get a good grip on the side of the filament. I use a can of compressed air (aka “Dust Off” spray) to blow out the teeth of the hobb gear.

Also, do a filament change … pull out the filament, cut it back to the point where you can see the filament is undamaged (no teeth marks, etc. on the side) and then re-insert.

Check the tension on your idler arm tension knob. The knob drives a hex-nut that presses a spring. Turning it counter-clockwise pushes the hex-nut forward… compressing the spring tighter. Turning clockwise pulls the screw back (toward the knob) and loosens the spring … reducing compression on the spring. Turn this knob all the way clockwise (loosest possible position) then re-tighten it to about 1/3rd … to no more than 1/2 of the travel (you an see the side of the hex nut through an exposed slot above the adjustment knob).

There are other settings we can check… such as E-steps. The factory “default” is 420 steps per mm. On my printer, I think I have it set closer to 415. As long as it is within about 10-15 steps of the default 420mm value you are probably ok (we can tune this to the perfect setting later. Just verify that it isn’t some wildly incorrect value that is nowhere close to 420).

Slicer Settings

I just pulled up the profile for IC3D PLA and it looks very similar to what I use for PolyMaker PolyLite PLA.

The most significant thing I notice is that both profiles (IC3D PLA and PolyMaker PLA) want the print temp at 230°C … your 215°C temp is likely too low.

I have printed temperature towers for PLA and can verify that 230°C was optimal for the PLA’s that I tested. 235° wasn’t not as good … and 225° was also not quite as good as 230. Anything less than 225 (e.g. 220, 215, etc.) had noticeable degradation in quality.

The build plate temp is 55°C … I do not let it cool to 45°C after the first layer… leave it at 55. I’ve noticed that if it prints layer 1 at a higher temp then remaining layers, the cooling of the filament can cause some contraction of the filament which weakens it’s bond to the build surface … the part might break free mid-print (more of a problem with parts that don’t have a large surface area on the build plate.)

My print speed is 40mm/sec with a 15mm/sec initial speed and 35mm top, bottom, and wall speeds. I do 3 slow layers (Cura will slightly increase the speed on each layer until it finishes that last “slow” layer).

Retraction distance is 1mm. Retract & reprise speeds are both 10mm/sec.
Retraction minimum travel is 1mm (don’t bother to retract at all if the non-printing move is less than 1mm to reach the start of the next printing move).

Max retraction count… I like to set this to a value less than 10. I think it defaults to 99 which basically means it’s ignored. This setting prevents the filament from getting torn up in the hobb gear by doing an excessive number of retractions in a short distance – so the hobb gear is rolling back and forth over the same short length of filament and just chewing up the side of it until you get a jam. e.g. in my personal opinion, you could set this to something like ‘5’ (max retraction count) with a “minimum extrusion distance window” of 2mm. This means that if the job would have called for more than 5 retractions before extruding 2mm of filament, it will ignore any additional retractions until it clears 2mm of filament (then it will start retracting again).

Make sure you get a good 1st layer and inspect your skirt around the part to verify that it is an even thickness all the way around. If it’s more squished on one side and less on the other… then you did not get a good level.

You want a little bit of “squish” on the 1st layer… but not too much. If the filament is so flat that it’s nearly transparent and has frayed edges… the nozzle is much too low. My Z-offset tends to be about -1.2 to maybe -1.3. For PETG I raise the nozzle even more and use -1.1 (the guidance I’ve always read is that PETG sticks a little too well… and so it should be “gently laid” onto the bed for the 1st layer rather than “squished” onto the bed as you might do with other filaments.)

At “standard” quality profile, my layer height is set to .25mm but the 1st layer is set to .35mm.

When your printer lays down the “skirt” around the part, you can pull that off, grab some calipers and verify that the height is close to what you expect. If not, you may need some z-offset adjustment on the printer.

There are some advanced things I do … such as the calibration cube and linear advance settings, but I’d like to make sure you can get a clean simple part … such as a simple calibration cube … to print without issues such as jams, etc.

Wow, this is great info, I can’t thank you enough!

Temperature tower

I printed your suggested temperature tower - see photo. I verified that the gcode set the temperatures correctly at each level and also confirmed on the display as it went along. The quality is not great at any level and the print failed at the 215 level (which as you know was my default print temperature before). I agree that 230 looks the best, but it’s still horribly stringy. When I was printing it, the print head would collide slightly with the top of the print at any level as it printed the infill. This happens all the time with my printer.

Thermal runaway

I’m probably wrong about this - the reason I thought this is because when I disassembled my print head to clean it out, the nozzle appeared to be mostly empty of filament, but I couldn’t remove the filament because it was too wide just below the feed mechanism, thus I thought it had begun to soften before the hotend. I read your suggestions and there is no evidence that the thermistor is faulty.


Yes, using 2.85/3mm filament. Tension is good. I cleaned the hobb gear right before this print by fully disassembling the print head. Esteps is 420. From another post of yours and this one, I copied your retract settings and that seems a lot more likely to be the issue so I will report back.

Slicer Settings

Ah, I have been looking for IC3D PLA profiles but have not found any so I’m using PolyLite! And yikes, the print settings for PolyLite in Cura show a default printing temperature of just 205C. These are the stock settings from Cura LulzBot 3.6.20. I will use a build plate temp of 55C from now on. I will buy a set of calipers.

I’ll try a calibration cube next. I was wondering if my temperature tower would be my first successful print at least to the 215 level, but no!

One notable change between Cura LE 3.6.20 vs. 3.6.21 is that a lot of the profiles were updated for your printer.

If you install 3.6.21 you may notice that there is an IC3D PLA profile now and it shows 230°C as the recommended temp. Also, PolyMaker PolyLite PLA profile was updated to 230°C.

Regarding jams… was the side of your filament a bit torn up? If I’m printing a part where the slicer wants to generate a lot of retracts in a short distance then I’ll see the hobb gear start to get filament in the teeth and when I pull the filament there will be a nice curved section (matching the shape of the hobb gear) missing in the side of the filament where the hobb gear was grinding on it. The fix for this is to put a cap on the number of retractions over some distance of filament and not use long retraction moves (Direct drive printers usually don’t need very big retraction distances. Some particularly gooey filaments are an exception though but even this might be avoided by doing things like “wiping to infill” and “combing” settings.

There are things like Z-hops on retraction that I consider to be “dealer’s choice” … when the printer Z-hops (raises the z-axis by a millimeter or so before doing a non-printing move) it can leave a tiny bump that looks like a very tiny Hershey’s Kiss on the part. Later as the print nozzle encounters these bumps, you get a bit of collision and the hot nozzle tries to knock it down (it usually makes the print-head raise up a bit as it tries to slide over it). I usually prefer to tell the printer to only Z-hop if it has to move over a printed part. If moving over air, I don’t bother to z-hop. “combing” is the idea that the nozzle will move along a part surface rather than take the most direct path when doing a non-printing move. The idea is that any filament continuing to ooze… will ooze either onto the infill or along the part surface rather than leaving a bump or pulling a string of filament out as it travels (it still oozes… but the ooze is hidden so you’d never see it in the completed part).

Don’t be too worried about temperature tower quality. These things are designed to be difficult to get a clean print. You’re looking for the “best” layer… not the “perfect” layer.

Also remember that the temperature tower only varied the temperature. Other settings can dial in the profile a little better (printing speed, fan speed, retraction settings, combing or wiping settings, … the list goes on).

The extra heat (the need to print at a hotter temp than you might have expected) is because the hardened steel extruder nozzle doesn’t transfer heat as efficiently as a brass nozzle. I think the original profiles in Cura LE 3.6.20 may have been brought forward from the TAZ 6 profiles (which used a brass nozzle). 3.6.21 seems to have updated everything and has profiles that work better on the Workhorse and Pro.

More interesting info, thank you.

The calibration cube came out pretty nicely so I have my official first successful print (albeit a very small one). The dimensions are all accurate against a metric ruler with 0.5mm marks on it.

In my last support communications with LulzBot they said not to use this version, but I am happy to give it a try. I suppose because it is not yet considered stable.

Yes, the filament was torn up, but it had been running for a few hours before I noticed it (I was asleep). I’ve since changed my settings to add a retraction cap.

I’ve got to disassemble my print head again. I’ve only changed filament a few times, but each time a portion gets stuck inside and I have to disassemble to remove it. Is this normal?

It is not normal for filament to get stuck when changing it.

The first time I ever changed filament, mine did get stuck. The hot-end heats up to the melting point. On a Workhorse, the firmware that performs the change will push the filament down to extrude a few millimeters, then back it out. But once it clears the hot, the still-hot filament can’t be pushed up any further. If you don’t pull it up as it clears the hobb gear then a little blob can form on the end as it cools and it will get stuck.

I pull away the teflon tube so I can grab the filament directly. As it backs out the filament, I keep a little upward pressure (not much really … gentle pressure) so that as soon as it clears the hobb I’ll pull it all the way up before it can cool and form a blob.

If you back the tension off the idler arm you can actually pull the idler arm away and remove the filament even without the hobb gear backing it out (and this is how you’d do a “cold pull” to clean the extruder … should that ever be necessary.)
As for the cube dimensions…

Backlash Compensation

There is a calibration cube on the printer. This helps the printer work out the “backlash compensation” values. See:

There is an “F” value which defines how aggressively the printer should apply backlash compensation. If F=0 then it means you want no compensation. F=1 means you want 100% compensation. If F is somewhere in between … thats’ the percentage that it will apply.

The Workhorse supports automatic calibration (via the calibration cube you see near the front-right corner of the bed). On the LCD, go into the “Move” menu and you should see “Auto Calibrate” on the list. It will warm and clean the nozzle when it does this… you need a clean nozzle to get an accurate reading. You might want to remove the filament and/or give the nozzle a good cleaning before running it.

I noticed on my Workhorse, that after the calibration was done, it stored the new values but set the “F” value to 0. This means that while it knows how much to compensate, it wont actually apply any compensation. (I wondered if that was a firmware error).

Using Cura, go into the “Monitor” panel, connect to the printer, and there’s a “Console” button that opens a separate terminal window where you can send interactive commands.

In that window, type


Enter that and it will report all current settings that it has saved. You’ll see the M425 row with the backlash settings. Check your F value.

If F=0 then you can enable backlash compensation with the command:

M425 F=1.0

(BTW, the other way to get to this is to use the LCD panel and go into Configuration -> Advanced Settings -> Correction% and dial up the correction to 100%.)

That enables full (100%) compensation. BUT… it will not save the change. If you were to power the printer off and then switch it back on and re-check M503 to report settings, you’d see the M425 row will have the F value back to 0 again (or whatever value it had).

To save the settings permanently, you use M500:


Just M500 … no other parameters. That tells it to save all the current values to the EEPROM so the next time you power on the printer it will still have those settings.

This same process is used to update the E-steps (extruder steps).

The printer has four axes… X, Y, Z and … E (the Extruder). The Extruder is treated like an axis in that you can order it to advance or retract filament at a rate you control (just like you can tell it to move in X, Y, or Z directions at some rate).

3D printed parts are typically not dimensionally accurate to a high degree of precision. But there are some things you can do to make it better.

Horizontal Expansion

If you were to print a part that had a 1cm hole in it … and then print a peg that was say… 9.9mm (so you have a 0.1mm clearance) and test to see if the peg fits the hole, you might notice it is so tight that it wont press into the hole. In Cura there is a setting called “Horizontal Expansion”. Normally Horizontal Expansion is set to 0. But if you set a positive value, it will push all walls just slightly farther out on your part. A “hole” in the part will actually become tighter (the dimension will get a little smaller). A “peg” would get slightly bigger. If you set Horizontal Expansion to a negative value, then it pulls everything in. Holes get bigger. Pegs get thinner. And now the peg fits the hole.

This is a good idea to test if you are building parts that will need assembly and you want to ensure a good fit before you go through all the bother to print all the pieces… and then find out you’ll need to be spending a lot of time with a file and/or sand-paper to make everything fit.

Horizontal Expansion is basically trying to compensate for the filament … how much it bloats and/or doesn’t bloat. Change the filament… and you may need to re-test horizontal expansion.

I only use horizontal expansion adjustment when there’s a reason the part needs better dimensional accuracy. For most of my parts it isn’t that important.

It is also possible to check the X, Y, and Z values of a calibration cube to see if they agree. E.g. if you were to print a cube that was say… 5x5cm … but you found out that it was really 5.1cm x 4.9cm… then you could adjust the X steps or Y steps. Most of the time you wont need to do this (especially if backlash compensation is applied).

Keep in mind that even if the printer were perfect, the filament contracts as it cools (slightly changing it’s dimensions). This is why there’s only so much accuracy you can reasonably expect from a 3D printed part.

Linear Advance

Linear Advance helps compensate (at the firmware level) for the delay in response that the filament has to a change in extruding speed. The printer has to accelerate from a stop … or to return to a stop. But when it does this, it also tells the extruder to “accelerate” the filament so that the rate of filament extrusion proportional to the speed that the print-head is moving. E.g. if the print head suddenly needs to start moving twice as fast… then the extruder should also start pushing the filament through the hot-end twice as fast.

While that sounds nice… it doesn’t really work. The filament is gooey in it’s molten state. It has a delayed reaction to these changes. There are settings in Cura to attempt to compensate for this… but Marlin firmware actually has a firmware feature that lets the printer deal with the compensation – which is much better than asking Cura to generate a lot of extra G-codes in an attempt to compensate.

This is the “Linear Advance” feature. For most 3D printers, it’s a feature of Marlin firmware that is disabled and they have to re-compile the firmware to enable this. Your Workhorse already has it “enabled” but the compensation amount is set to 0. The compensation amount is called the “K value”.

To find the correct compensation value, you have to build your own G-code. With our Marlin 2.x printers, the acceptable range for K is a value between 0 and 4.0. HOWEVER… we have “direct drive” printers with a very short extrusion path from the hobb gear to the extruder. There’s not a lot of places for filament to bend, etc. and that means on our printers, the K value is normally a very low value.

When I ran tests on my Workhorse I found that for PLA and also for PETG the K value needed to be around 0.12 to 0.13. On my TAZ Pro the K value needed to be 0.11 for the left extruder (I haven’t yet calibrated the right extruder because that’s mostly just to print support material … and I really don’t care how nice the support material looks because it gets removed from the part and disposed.)

Here’s a link to my TAZ Workhorse Linear Advance test.

IMPORTANT: This test is designed for PLA on a TAZ Workhorse and no other filament and no other printer.

This is because the g-code is configured to set the print temp to 230°C (which wouldn’t be correct for a different type of filament). Also… it knows the geometry of the TAZ Workhorse … so using it on a different printer could be bad.

The ‘start’ g-codes in this (you can open it with a text editor and inspect it) start out similar to your normal g-code … but get a bit different.

Initially it will heat the nozzle, back out some filament, wipe the nozzle on the wiper-pad, then do a bed-level … that’s actually just copied from the standard TAZ Workhorse ‘start’ g-code.

But things get different from here… once the bed level is finished, it will move the head to a location IN FRONT of the bed (the Y-axis will move the bed almost all the way to the very back). The nozzle will be hanging over your table … not over the bed. But it will be off-center so that the nozzle is not hanging over the Y-axis belt nor will it be over one of the two Y-axis rods. It will heat the nozzle to printing temp (230°C).

At 230°C … it will purge 30mm of filament … right onto your table. This is because the first bits of filament to print are usually pretty bad (quality-wise) until things get flowing. I want to get past the bad stuff before printing the linear-advance test pattern.

It will move the head back over the bed … with just a tiny bit of clearance so that the hedge of the glass will shear off the filament. It will pause for 7 seconds and set the fan to 100% to cool the filament.

At this point… I grab the tweezer and pull away the wasted filament.

Then it will start printing the linear advance test pattern.

This particular test will print the rows with K values between 0.0 and 0.2 … but stepping 0.02 per row.

So you’ll get a row that is 0.0. Then you’ll get a row that is 0.02, then 0.04… and so on until it reaches 0.2 (basically 11 rows in all).

It will also put some filament to mark the acceleration change points.

Finally, it will print labels to the right of the rows (as I recall it only labels every 2nd row).

YOUR JOB then… is to inspect the rows when it has finished. You’ll see that the rows near the 0.0 end and the 0.2 end will show a little bulge and a little pinch on the filament where the speed changes happen. But somewhere in the middle you’ll find a row which is perfect… you wont see the bulge or pinch it will look like one long piece of filament.

THAT row is the winner… find it’s K value. Sometimes I find the one row is just barely not enough… and the next row is just barely too much … so I know the best value would be a row in the middle (remember my test is incrementing 0.02 at a time … so if it were doing 0.01 increments you’d probably find the perfect row) But you can more or less derive the right number even without printing it.

Once you have this value, go to:

Configuration -> Advanced Settings -> Filament -> K-factor and enter the number.

Remember that if you change filament… the response to acceleration changes may also be different (but probably not by much). I’ve run the test for both PLA and I made another test (different print temp) for PETG … but I found the K-factors were nearly identical.

This test pattern was generated using the Marlin Linear Advance test pattern generation tool here:

Except… the standard tool doesn’t understand how to deal with cleaning the nozzle on the wiper pad and running the bed leveling system. So I had to tweak the firmware. I basically used a text editor to copy the start g-code from the TAZ Workhorse to replace the start g-code they would have normally generated… but I added that extra purge step (borrowed from the TAZ Pro’s start g-code).

When I change filament here’s what I do.

Manually set nozzle temp to high side of recommended temp for filament.
Cut the filament in the machine as close as possible to filament guide.
Manually extrude 100mm’s of filament.

Then manually set nozzle temp to high side of the new filament I’m installing.
Manually extrude 50mm’s of filament, and install new filament.
Keep increasing the extrude value by 10mm’s until the new material starts flowing out of nozzle.


I never ever try to pull filament out of extruder. Any time I’ve tried that I get a bad jam that requires disassembly of the printer head to clear.

I never ever use the “change filament” function. Created nothing but problems.

I do it all manually and only extrude in the “positive” direction.

Just my experience with the WorkHorse. The filmament change process is awful and problems just waiting to happen.

I’ve found that taking the longer route I’ve outlined above saves time and aggravation.

I started out printing ABS and later when I switched to PLA I would get large prints that the filament would just stop coming out ruining large prints at the 11th hour. I did some research and I found that some people print a kind of collar that you stuff rubber foam into and add oil to it. Then the filament runs through it right before it enters the print head. It lubricates the filament and cleans dust off the it. After that I never had the problem again. Every so often I add another drop of oil to it and once in a while I change the rubber foam. Never had a problem since.

Quick update - my 20 hour print succeeded! Thank you so much for the help!

I tried to enable the backlash compensation following these instructions. Via the console, it did not work - M425 F=1.0 has no effect. Through the LCD it works fine. Some more detail:

> M425 F=1.0
> M503
< M425 F0.00 X0.21 Y0.12 Z0.02 S3.00
> M425
< Backlash Correction inactive:
<   Correction Amount/Fade-out:     F0.00 (F1.0 = full, F0.0 = none)

I will follow your other guidance shortly and will report back.

Thanks also for the tips from yourself and edlink on filament changes - will try that.

Ah, syntax error, it should be the following, no equals:

M425 F1

Whoops … sorry about that. Glad it’s working for you.