Filament
The easiest material to print is PLA. If you want to see if the issue is related to material then you could throw a spool of PLA on and see how that behaves. PLA is probably the easiest of all 3D filaments to work with (assuming it came from a decent vendor … there is some crazy cheap stuff out there that could be suspect.) There are additives in many of the things called “PLA” … so “PLA” might not truly be just PLA. Avoid “white” filament when testing things. White filaments add (usually) titanium dioxide … and I have noticed (as have several others) that it can sometimes be fussier than the other colors. I sometimes have to make special tweaks just because the color of the filament is different. And different colors can mean different amounts of color pigment is added. Just things to know.
Z-Offset
The Z-offset usually has a negative value because if it had zero value then it would start printing at the height of the bed-leveling washers … which would be much too high.
When filament is extruded, a cross section of the filament would be round. The nozzle is low enough on the first layer to slightly squish the filament onto the bed. But you can test your layer thickness.
Test & Calibrate E-steps
But before you do that … you want to make sure the extruder is running filament through at the correct rate. In other words… the z-offset could be perfect … but if the filament is under-extruding you could be misled into believing it is wrong. So we need to verify the rate of extrusion before going on to other steps.
The idea here is fairly simple. You are going to tell the printer to extrude 100mm worth of cold filament length … and then you will measure the amount of cold filament length that actually extruded … to see how closely it compares to the requested distance.
This is fairly easy to do. But you’ll need that ruler (machinist scale) and something to put two marks on your filament. With black (or dark filaments) I use a silver-colored Sharpie marker (with a fine point).
This process is summarized on this page: https://ohai.lulzbot.com/project/taz-6-final-testing-and-calibration/taz-6/ on “Step 4 Check Extruder E-Steps”.
But it is described in greater detail on this page: https://ohai.lulzbot.com/project/fine-tune-mini-extruder/calibration/
- Put the end of the scale on the top of the print-head at the point where the filament feeds into the head. Measure up 100mm on the filament and put a dot on the side of the filament. Measure up an extra 20mm (so 120mm in all) and put a 2nd dot on the side of the filament.
We’re going to need a way to send g-code commands directly to the printer. If you normally use the SD cards to print … you’ll need to connect your computer directly to the printer’s USB port and use Cura LulzBot Edition for this next step. Make sure that’s ready before going any farther.
-
In Cura LE, the top of the Cura window (just right of the Cura logo in the upper-left corner) you’ll see that you can be on either the “Prepare” view or the “Monitor” view. Normally you use the “Prepare” view, but for this we need to go to the “Monitor” view – so click that.
-
Over to the right, you’ll see some controls… click “Connect” to make sure Cura connects to the printer. You should now see the graph displaying things like your nozzle temperature.
-
Click the “Console” button to open the console view. This window allows you to send G-code commands directly to the printer.
-
Verify that you’ve got a normal amount of tension on the tension wheel that presses the filament against the teeth of the hobbed gear. Not too tight … not too lose. Basically you want it tight enough to have a firm grip so the filament doesn’t slip … but it doesn’t need to be any tighter than that (and having it too tight will result in other problems such as chewing up filament when printing parts that require a lot of retractions).
-
Pre-heat your hot-end to the correct printing temperature of your particular filament. E.g. if you print this filament at 245°C then you’ll need to pre-heat to that temperature. You can do this in Cura LE on the Monitor page by entering the hot-end temperature in the box and click “Pre-Heat”.
-
With the filament marked and the nozzle pre-heated, it’s time to take the measurement. In the “Console” window, type:
G92 E0
This command (G92) resets the absolute position value of the extruder to the value you supply … in this case E0 means it will beset to the zero position.
Next type (and this is going to make the filament start moving … so make sure the hot-end is heated to the correct temp):
G1 F75 E100
This will make the printer start extruding filament and a feed-rate of 75mm per minute. It will continue to extrude until it has extruded 100mm (that’s the E100 value).
- Measure the results. If that first mark you put on the side of the filament (at the 100mm point) is exactly at the intake to the print-head … then everything is great. You can turn off the hot-end (set temp back to 0) and you’re done.
But if not… then we make some adjustments.
If it did not pull in enough filament then that first mark on the filament wont have made it quite to the intake. But if it pulled in too much filament, then the first mark is gone (it’s in the print-head) BUT … that 2nd mark is (hopefully) still visible. So we can just measure from the print-head to the 2nd mark. For example if you’ve got 15mm to the second mark then we know it over-extruded by 5mm (because if it were perfect you’d still see 20mm to the 2nd mark.)
- We need to know what the OLD e-steps value was. To find it, enter this command into the Console window:
M503
IMPORTANT NOTE: On the LulzBot documented steps, in Step 9, it will tell you to use M501. This is a typo. M501 is the Marlin Firmware command to restore settings from EEPROM – not what we want. M503 is the command to report current settings – which is what we want. You can find all of the Marlin Firmware commands documented here: Gcode | Marlin Firmware
A lot of output will quickly scroll through the Console window … too fast to read. Just scroll up and you are looking for a row that reads “Steps per unit” and the following row will contain M92 in it.
M92 is the command that sets the steps per millimeter for each axis (X, Y, Z, and E … E=extruder movement).
According to LulzBot docs, the default value for the TAZ 6 factory print-head is 830.
Now for a bit of math.
New E-steps value = (old-value ÷ actual-distance) x 100
e.g. if the old value was 830 and the measured distance was 96mm then you’ll do:
(830 ÷ 96) x 100 = 864.58 … so you’d round that to 865.
If it was over-extruding … suppose it extruded 105mm then the same formula works:
(830 ÷ 105) x 100 = 790.47 – and you’d round down to 790.
Having your new E-steps, enter it into the printer.
M92 E___
and fill-in the blank with the correct answer for your measured result.
NOTE This does not SAVE the value. The printer is using this new value “right now” … but if you were to power the printer off and back on again … it would be back to the old value.
Now is a good-time to re-check your measurement. Mark the filament at 100mm and 120mm as before and repeat:
G92 E0
G1 F75 E100
Measure the result again … and this time we’re hoping to be within at 100mm. It is hard to mark the filament perfectly while you’re trying to hold filament and scale in one hand and a marker in the other.
Assuming you are happy with the results, it is time to save the results.
M500
This command commits the current values to EEPROM so they become permanent (they survive powering the printer off and back on again).
Also, don’t forget to cool off the hot-end by setting the temperature back to zero.
Other tests
There are a couple of extra tools that I recommend for anyone doing 3D printing.
-
Your printer probably came with a toolkit of allen keys and a machinists scale (the small metal ruler with both metric and imperial scales).
-
I decent pair of calipers for measuring your prints, calibration parts, and even parts of the printer. A quality pair will zero accurately when you close it. Lower quality calipers will sometimes mis-read and when closed they don’t necessarily return to reading zero. These come in various lengths and cost more for longer lengths. The most common is the 6" size. This is the model I use: https://www.amazon.com/Mitutoyo-500-196-30-Advanced-Measuring-Resolution/dp/B00IG46NL2
-
Also recommended is a decent digital multi-meter. It doesn’t have to be crazy expensive. Fluke is probably the biggest name in that industry and most of their meters are very expensive. But mostly what you need is something that can accurately measure Ohms Ω (resistance) … and occasionally voltage. For that … even the very inexpensive Fluke 101 ($45 USD) will do the job.
With these … I print a first layer and stop the job so I can test whether the actual height of the first layer matches the requested height that you told Cura to print.
E.g. if you’re printing your first layer at … say .35mm (or maybe .25) … you can stop the job, pull the filament, and measure it. Is it really the requested height? Measure it in MANY places and do it many times because each measurement is going to vary (that’s normal)… you’re trying to figure out if it’s generally close to what you’ve entered. If it is too hight or too low then you can adjust the Z-offset accordingly.
You can be more confident in the results of this measurement since you’ve calibrated E-steps. So if the layer height is wrong, you know it isn’t because the filament was under-extruding or over-extruding (you wouldn’t know that without having check the E-steps).
Bed Leveling Probe
As for bed-level probe failing. Make sure the nozzle tip is clean of any filament. You can use a soft brass wire-brush or one of those red ScotchBrite pads to wipe the nozzle. I find that once the nozzle temp is close to 180°C as the printer heats up, the tweezer will pull off any filament (it will be melted enough) … but make SURE the nozzle is clean.
Also… make sure each bed washer is both clean and snug. It may be a good idea to loosen ad re-snug each washer. You need good conductivity from the washer through to the metal bed. And this is where the multi-meter comes in.
Turn the multi-meter on to the Ohms position (the “Ω” symbol). This measures resistance. If you touch one of the probes to, say, the left washer, and the other probe to the right washer, then in an ideal universe (nothing is ever ideal) it would measure zero ohms. But if you simply touch both probes together (metal on metal … leave the printer out of it for the moment) you’ll notice it doesn’t really register all the way to zero (but it will close). So do this again but this time touch any two bed-leveling washers and you want to see that it reads a value that is preferably less than 1Ω. Don’t stress if it is fractionally above 1. But if you’re reading several ohms of resistance than that means something isn’t making great contact. Remove the screw, washer, there’s a metal bushing under that, and below that you would see the bed and you’ll notice that when LulzBot powder coated those beds, they protected the spot where the bed-leveling washer attaches so it is bare metal. Make sure it is clean bare metal.
The bed leveling system is creating a loop… from the bed, the metal washers conduct through the bed, through the wire harness, and back to the logic board in the printer … and the OTHER direction goes up to the print-head, through the metal of the extruder and down to the hot-end where the metal nozzle finally touches that bed-leveling washer … thus closing the circuit and telling the logic board that it has “touched”. Anything along that entire path can be to blame.
Since the bed-level puts up a fuss on one particular washer – and seems to be consistent, that washer likely isn’t making great contact. They do need to be clean and fully snugged down … but don’t go crazy on torque (you aren’t the lug nuts that hold the wheels on your car … they don’t need to be crazy tight. Just snug enough to make sure we have good conductivity.)
I have had problems where the extruder nozzle wasn’t making great electrical conduct with the hot-end (When a nozzle is threaded into the hot-end, this is supposed to be done at high temperature. When I do this I throw an old rag-towel on the print-bed to protect the surface and I wear heat-resistance gloves … so just in case the nozzle falls it doesn’t damage me or the bed.) Anyway… the threads on the extruder nozzle need to “bottom out” agains the threads of the “heat brake”. The “heat brake” is the gap between the “cold” side of the extruder and the “hot” side of the extruder (the heat block). When bottomed-out (thread against thread) there should be no gap through which filament could leak, get into the threads, and ooze up and over the heat-block. If this happens, it means the filament can act as an insulator and prevent you from getting a good measurement when it does the bed leveling. But as your printer successful levels on the first two washers … this is probably not the problem (unless there is enough resistance for it to only just succeed on the first two washers). But you can test this by putting one probe on the tip of the extruder nozzle, and the other on the end of the red wire (called the “zero sense” wire) on the extruder. On my E3D Aerostruder, that wire is attached to one of the four screws that holds the heat-sink on the cold-end. But on your printer – which I think uses the E3D Hexagon hot-end … I think that wire is actually screwed to the heater block … below the heat-brake rather than above the heat-break as it is on my printer.
What else?
There can be other reasons for a bad first layer. I mentioned previously that the filament needs to be dry (“wet” filament will look bad). If the nozzle is too high then the filament wont get properly “squished” to the bed (and gently flattened so that a single bead of filament is wider than it is tall).
When I print, I mostly use a “skirt” (a couple of rows of filament). This helps get the filament flowing … but I also sometimes grab that skirt and measure the thickness to see if its roughly the same thickness all the way around the part (is it too high on one side and too thin on the other side?)
As the print-bed slides forward and back along the Y-axis … the glide-rails need to be perfectly parallel. Suppose they are a millimeter closer together at the back vs. the front (so nearly … but not quite parallel). That “pinching” at one end can result in the bed lifting and lowering as it glides from front to back … creating a level problem. I used my calipers to measure that … and there’s a process to fix it if you’re aren’t true.
There are some bushings under the bed-level washers that are all supposed to be 10.0mm tall … but there’s a tiny variance in these because they aren’t machined to a finished surface. On one of my printers I noticed a variance of .18mm between the tallest vs. shortest of these (so most of a .2mm layer height) but on my printer the “tall” bushings were in opposite corners and that means the bed probe would measure it as a curved surface. The older firmware only supported linear bed leveling and couldn’t deal with curves … this made getting a good first layer rather difficult. The new firmware supports bi-linear bed-leveling and should be able to deal with this. But a work-around is to make sure that “tall” bushings are on one side and “short” on the other (not in opposing corners) so that a simple linear bed-level would be adequate.