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…
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:
(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.
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 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).