What's new
VORON Design

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members!

Solved I'm having A bit of trouble making my first layer consistent

BeepDog

Member
Printer Model
V2.4
Extruder Type
Orbiter
Cooling Type
Stealthburner
I've got a v2.4 that is doing quite well, except that I always have to tune my first layer manually, and I shouldn't have to. I'm using Auto_z_calibration, and I've included thermal expansion measurement, so it should be smart about heating. It doesn't matter if it's warm or cold, however, even printing PLA without having to have a warm chamber, I have this problem. I'm rocking a Klicky V2, and I feel like it's really solid on the toolhead.

I have done some Probe Accuracy readings, which I will share below, and I'm hoping ya'll will be able to help me figure out what to do.

I have zero problems with layers after the first one, it's literally only that the auto_z_calibration never seems to get it right.

EDITED TO ADD:
- I do home Z after QGL.
- The mesh looks like this currently, it's an probe_points: 27,27 mesh
1723341314341.png
- I am not Heatsoaking right now, because i'm just printing PLA. However I have had the same problem with ABS.
- Some pictures of Inland PLA+ at 215C


Following some of the troubleshooting bits in the excellent Ellis Print Tuning Guide, I've run the tests mentioned there.

My standard deviation and range are way too high for comfort. What do I need to do to bring this into spec?

Should I just print another klickyv2 switch and maybe I'm just having bad luck with that omron switch?

Hope this was clear, thanks in advance!

Z Endstop Switch​

Code:
18:31:46  // PROBE_ACCURACY at X:228.000 Y:356.000 Z:50.020 (samples=3 retract=3.000 speed=3.0 lift_speed=10.0)
18:32:04  // probe at 228.000,356.000 is z=0.828750
18:32:06  // probe at 228.000,356.000 is z=0.834375
18:32:08  // probe at 228.000,356.000 is z=0.834375
18:32:08  // probe accuracy results: maximum 0.834375, minimum 0.828750, range 0.005625, average 0.832500, median 0.834375, standard deviation 0.002652



Front Left​

Code:
18:35:26  // PROBE_ACCURACY at X:10.000 Y:10.000 Z:53.762 (samples=10 retract=0.700 speed=4.0 lift_speed=10.0)
18:35:39  // probe at 10.000,10.000 is z=4.760000
18:35:40  // probe at 10.000,10.000 is z=4.777500
18:35:40  // probe at 10.000,10.000 is z=4.781250
18:35:41  // probe at 10.000,10.000 is z=4.783125
18:35:42  // probe at 10.000,10.000 is z=4.785000
18:35:43  // probe at 10.000,10.000 is z=4.785625
18:35:43  // probe at 10.000,10.000 is z=4.786250
18:35:44  // probe at 10.000,10.000 is z=4.786875
18:35:45  // probe at 10.000,10.000 is z=4.786875
18:35:46  // probe at 10.000,10.000 is z=4.786875
18:35:46  // probe accuracy results: maximum 4.786875, minimum 4.760000, range 0.026875, average 4.781937, median 4.785312, standard deviation 0.007858

Front Right​

Code:
18:37:25  // PROBE_ACCURACY at X:340.000 Y:10.000 Z:25.020 (samples=10 retract=0.700 speed=4.0 lift_speed=10.0)
18:37:31  // probe at 340.000,10.000 is z=4.693125
18:37:31  // probe at 340.000,10.000 is z=4.709375
18:37:32  // probe at 340.000,10.000 is z=4.713750
18:37:33  // probe at 340.000,10.000 is z=4.715625
18:37:34  // probe at 340.000,10.000 is z=4.717500
18:37:34  // probe at 340.000,10.000 is z=4.718750
18:37:35  // probe at 340.000,10.000 is z=4.719375
18:37:36  // probe at 340.000,10.000 is z=4.720000
18:37:37  // probe at 340.000,10.000 is z=4.720625
18:37:37  // probe at 340.000,10.000 is z=4.721250
18:37:37  // probe accuracy results: maximum 4.721250, minimum 4.693125, range 0.028125, average 4.714937, median 4.718125, standard deviation 0.008045

Rear Right​

Code:
18:40:32  // PROBE_ACCURACY at X:340.000 Y:310.000 Z:25.020 (samples=10 retract=0.700 speed=4.0 lift_speed=10.0)
18:40:37  // probe at 340.000,310.000 is z=4.782500
18:40:38  // probe at 340.000,310.000 is z=4.794375
18:40:39  // probe at 340.000,310.000 is z=4.796250
18:40:39  // probe at 340.000,310.000 is z=4.798125
18:40:40  // probe at 340.000,310.000 is z=4.798750
18:40:41  // probe at 340.000,310.000 is z=4.799375
18:40:42  // probe at 340.000,310.000 is z=4.800000
18:40:42  // probe at 340.000,310.000 is z=4.800000
18:40:43  // probe at 340.000,310.000 is z=4.800625
18:40:44  // probe at 340.000,310.000 is z=4.800625
18:40:44  // probe accuracy results: maximum 4.800625, minimum 4.782500, range 0.018125, average 4.797062, median 4.799062, standard deviation 0.005215
18:40:51  // probe: TRIGGERED

Rear Left​

Code:
18:41:52  // PROBE_ACCURACY at X:10.000 Y:310.000 Z:25.020 (samples=10 retract=0.700 speed=4.0 lift_speed=10.0)
18:41:57  // probe at 10.000,310.000 is z=4.810000
18:41:58  // probe at 10.000,310.000 is z=4.831250
18:41:59  // probe at 10.000,310.000 is z=4.833750
18:41:59  // probe at 10.000,310.000 is z=4.835625
18:42:00  // probe at 10.000,310.000 is z=4.836875
18:42:01  // probe at 10.000,310.000 is z=4.838125
18:42:02  // probe at 10.000,310.000 is z=4.838125
18:42:02  // probe at 10.000,310.000 is z=4.838750
18:42:03  // probe at 10.000,310.000 is z=4.839375
18:42:04  // probe at 10.000,310.000 is z=4.839375
18:42:04  // probe accuracy results: maximum 4.839375, minimum 4.810000, range 0.029375, average 4.834125, median 4.837500, standard deviation 0.008419
 
Last edited:
After live tuning the Z, (and completing the print) use the following in the command section:

Code:
Z_OFFSET_APPLY_ENDSTOP
SAVE_CONFIG

And it should remember your Z-Offset for the next print.
 
After live tuning the Z, (and completing the print) use the following in the command section:

Code:
Z_OFFSET_APPLY_ENDSTOP
SAVE_CONFIG

And it should remember your Z-Offset for the next print.
That doesn't happen with auto z calibration. That measures it every time to account for different nozzles or buildplates.
 
Your bed appears to be within 0.02 mm. you cannot ask for better than that.
I had thought so, but it's outside of Ellis' comfort range as mentioned in his troubleshooting guide, so I was hoping I could do better.

My personal comfort zone:
  • Standard deviation ≤ 0.004.
  • Range ≤ 0.0125.
 
I've got a v2.4 that is doing quite well, except that I always have to tune my first layer manually

Just adding my two pennies... I am having this exact problem, and have been for more than several months. My prints come out nearly flawless, but I have to mess with the first layer, always.

I, too, use the Klicky. In fact, if it matters: I started with the Klicky NG, which worked perfectly, but it wasn't long before I upgraded to the PCB version. It's identical, except uses a PCB instead of manually mounting magnets and the switch. I seem to recall this first-layer problem starting after I switched from the NG to the PCB, but it's been well over a year, so I might be wrong (plus, OP didn't do this step and we have an identical problem, so it can't be my Klicky). The point is that I remember the auto z-offset working magically, and now it kinda doesn't, and nothing I've ever checked or tested seems to have any problems.

When I perform my startup (which includes homing and z-offset and such), the Z Offset displayed in Fluidd is always a different number -- I don't mean just 0.001 or 0.01 difference, I mean some days it'll show 0.143, then the next time it's 1.402, then the next time it's -0.019. But once I get it adjusted perfectly during that first layer, subsequent prints (before the idle timeout shuts off the motors) are all perfect, too.

Also, I use the Matched Height Kinematic kit by Mandala Roseworks, but I've got that thing so perfectly aligned and stable that I can't see where the problem would be with this.

I'm sure someone's initial response will be, "Something is loose. Check all of the everythings and make sure things are tight." etc. Yeah, I know, but fair point. But as I mentioned, my machine makes immaculate prints (except the first layer), which should suggest a certain skill level at building and calibrating a machine like this (but I'm not perfect, of course).

Okay, so my 2¢ became more like 83¢, heh. I have nothing to offer for help, just saying @BeepDog isn't alone (and there must be others).
 
Last edited:
Okay! So a bit of help and advice on the Voron Discord, and I made some changes based on their recommendations.

TL: DR;
- Do an adaptive bed mesh before starting each print (it's supported in klipper native now), put it in the PRINT_START macro
- Do the AUTO_Z_CALIBRATE afterwards
- Do the print

So the idea is that the gantry is never quite perfectly trammed, so if you run a bed mesh, it handles the last bit of correction. This has worked wondefully. My Z Offset is being measured consistently and correctly now, and my first layers are coming out *beautifully*.

I hope this helps someone else!
 
My START_PRINT had both CALIBRATE_Z (from protoloft/klipper_z_calibration) and BED_MESH_CALIBRATE ADAPTIVE=1, but in reverse order. I swapped those around so that z-calibration comes after adaptive meshing, and I expect to have the same success as @BeepDog.

I'll share an update after I get a chance to test...
 
Did you define the zero_reference_position? It superseded the relative_reference_index which would cause an error if left uncommented.

Since I only ever commented the old relative_reference_index out, never replacing it with the zero_reference_position it - apparently - caused my Adaptive BMC ( first KAMP but also Native Klipper ) to mess up my Z-Offset Calibration on the regular until I added it when someone mentioned it being missing in my config which isn't exactly surprising as it also isn't being mentioned in the Klipper Adaptive Mesh Compensation Code Example.

Anyway... Without the ZRP First Layers would either end up getting burrowed into the Build Plate ( not much of an issue due to the CNC Tap providing enough compliance ) or skimming above it whereas with it the First Layer would once again lay down as expected.
( which doesn't make a lot of sense to me as Adaptive BMC shouldn't be relying on a hardcoded Reference Point but whatever... it is what it is 🤷 )
 
Did you define the zero_reference_position? It superseded the relative_reference_index which would cause an error if left uncommented.

Since I only ever commented the old relative_reference_index out, never replacing it with the zero_reference_position it - apparently - caused my Adaptive BMC ( first KAMP but also Native Klipper ) to mess up my Z-Offset Calibration on the regular until I added it when someone mentioned it being missing in my config which isn't exactly surprising as it also isn't being mentioned in the Klipper Adaptive Mesh Compensation Code Example.

Anyway... Without the ZRP First Layers would either end up getting burrowed into the Build Plate ( not much of an issue due to the CNC Tap providing enough compliance ) or skimming above it whereas with it the First Layer would once again lay down as expected.
( which doesn't make a lot of sense to me as Adaptive BMC shouldn't be relying on a hardcoded Reference Point but whatever... it is what it is 🤷 )

I did have zero_reference_position defined :) Which was part of the frustration, because it *should've* worked perfectly :)
 
Top