April 17, 2024
Description
I was struggling to get that perfect first layer using a new type of filament. After countless calibrations I still was not happy. In the end, my issue was a combination of temperature, layer height and extrusion multiplier.
During this process I developed this custom G-Code macro to test 8 different z-offset combinations in one print. For those of you who have never heard of this, the macros are essentially code which can adjust your G-code during slicing.
Also see: Link to 9-in-1 Bed and Nozzle Temperature model: https://www.printables.com/model/836320-9-in-1-temperature-first-layer-calibration-matrix
Prints one reference circle and 8 triangular tiles, each with a different Z-Offsets. It starts the circle with your default Z-offset, then moved the nozzle down 4x the offset value. Each sequential tile is then raised by the factor until you are at +4x:
So if you do not have nozzle-to-bed contact when printing the first triangle, you should not have issues with the rest of them.
The first time you use this file, please raise your Z-offset by an additional 0.1 to 0.2 away from the bed. This is just a precaution until you get used to this model:
There are two customer G-Code entries in this file
{local SJB_calibration_step_size = 0.025 }
Here you define the step size you want to move the z-offset between tiles. The macro moves the z-offset from -4x to +4x this factor.
Example: SJB_calibration_step_size = 0.02
means that the z-offset will be moved by -0.08, -0.06, -0.04, -0.02, +0.02, +0.04, +0.06, +0.08
Example: SJB_calibration_step_size = 0.05
means that the z-offset will be moved by -0.2, -0.15, -0.1, -0.05, +0.05, +0.1, +0.15, +0.2
Tip: I find that anything smaller than 0.02 makes no difference, as most printers cannot achieve this kind of positioning accuracy. I use 0.05 for the initial test and 0.025 for the fine tuning.
As you can probably predict, by moving the Z-offset down and additional 0.2 mm may cause the nozzle to scratch the bed. This is why the first layer is set to 0.3 mm and not 0.2 mm.
Additionally, the macro checks the calculated clearance between the nozzle and the bed. If the calculated clearance goes below 0.09 mm, no offset is applied to that tile and the default z-offset is used:
{local SJB_min_bed_2_nozzle_clearance = 0.09 }
This is just some optional G-code to produce lines on top of the tiles. This keeps them together when you take them off the bed.
SJB_calibration_step_size to 0.04 or 0.5SJB_calibration_step_size to 0.025 and repeat the printI use the light-test to see if the first layer is consistent and if there are any gaps.
As you can see from the picture, my reference is not ideal and the strands are not connected. Also anything above the reference is just as bad or worse.
The -1x (e.g. -1 x 0.05 step size = a reduction of 0.05mm) shows better results, and the lower you go, the better it gets.
The light-test shows that -4x has the best results, however the visual inspection shows waves starting at -2x.
So here I would change the Z-offset by -2x 0.05mm or -0.1 mm.
So lower your Z-offset by -1x to start, then repeat the test:
Again, -4x and -3x shows waves in the surface. Here the best result appears to be -2x or -0.05mm (lower).
Thats it!
v1.3 | 2024.04.15 - Code Review by @BradTN_726852 & corresponding correction of several instances of G01 to G1
v1.4 | 2024.04.17 - Reset the “Infill/perimeter overlap” value to the default value of 15% to prevent confusion in the results.
License:
Creative Commons — Attribution — Noncommercial — NoDerivatives
7