BLTouch unrealistic return values

Basic Information:

Printer Model: Geeetech A10M, CR-10S
MCU / Printerboard: ATMega2560 (GT2560 4.0), STM32G0B1RET6 (BTT SKR Mini E3 V3.0)
klippy.log
klippy-A10M.log (145.1 KB)
klippy-CR10S.log (120.1 KB

Describe your issue:

After banging my head on why the probed mesh was so far from actual bed profile on two separate printers (following this thread), I gave up and tried a different approach.

Alongised @Arksine and his great work on the [Experimental mesh leveling] topic(Experimental mesh leveling changes) I verified that the printer was actually following the rigth path and was compensating what it assumed being the correct mesh. Everything worked induvidually, yet nothing worked as expected.

While running a probe repeatabilty test on my A10M, I noticed something. Here’s the values

TEST 1
probe accuracy results: maximum 0.011514, minimum -0.000986, range 0.012500, average 0.008264, median 0.009014, standard deviation 0.003717
11:42:28
probe at 220.000,95.000 is z=0.009014
11:42:25
probe at 220.000,95.000 is z=0.011514
11:42:23
probe at 220.000,95.000 is z=0.009014
11:42:20
probe at 220.000,95.000 is z=0.011514
11:42:18
probe at 220.000,95.000 is z=0.011514
11:42:15
probe at 220.000,95.000 is z=0.009014
11:42:12
probe at 220.000,95.000 is z=0.009014
11:42:10
probe at 220.000,95.000 is z=0.009014
11:42:07
probe at 220.000,95.000 is z=0.004014
11:42:05
probe at 220.000,95.000 is z=-0.000986
11:42:02
PROBE_ACCURACY at X:220.000 Y:95.000 Z:5.007 (samples=10 retract=2.000 speed=5.0 lift_speed=5.0)

Notice how it triggers at the same 2 values (z=0.009014 and z=0.011514) every time? It does not output an in-between value, always the two of them - more tests in the attached file.

Probe test result.txt (2.2 KB)

Now, I find this behavior really strange, and utterly different from what Marlin receives during test probing. For instance, getting rounded values is a perfectly normal thing for Klipper, but getting the uncertainty down to 0.001mm? That’s too much for the hardware. I’ve got a well-tuned machine, but this far over the precision it can reach, and the repeatiabilty too.

I verified cross-tested it on my CR-10S, and got a similarly homogeneous result:

14:20:33
probe accuracy results: maximum 1.837500, minimum 1.815000, range 0.022500, average 1.825000, median 1.825000, standard deviation 0.005916
14:20:33
probe at 170.000,140.000 is z=1.825000
14:20:30
probe at 170.000,140.000 is z=1.825000
14:20:27
probe at 170.000,140.000 is z=1.825000
14:20:24
probe at 170.000,140.000 is z=1.825000
14:20:22
probe at 170.000,140.000 is z=1.837500
14:20:19
probe at 170.000,140.000 is z=1.832500
14:20:16
probe at 170.000,140.000 is z=1.822500
14:20:14
probe at 170.000,140.000 is z=1.822500
14:20:11
probe at 170.000,140.000 is z=1.820000
14:20:08
probe at 170.000,140.000 is z=1.815000
14:20:05
PROBE_ACCURACY at X:170.000 Y:140.000 Z:10.000 (samples=10 retract=2.000 speed=5.0 lift_speed=5.0)
14:20:05
probe_test

There are a lot of reapeted values that are exactly the same.

To weed out any possible bias, I tried two different BLtouch sensors on both printers, and even a good 3DTouch clone. All of them yield the same consistency. I will now go down a manual probing spree to check if it actually solvesa nything.

I would probably deem this worth investigating: because there’s absolutely no chance that a BLTouch can reproduce consistently exact values across different probing sessions.

Cheers, and thank you for your time!

Because the Z axis movement is quantized by the stepper motor, the values returned by BL Touch cannot be continuous and are also quantized.

If you double your Z axis stepper microsteps the quantization you are seeing will reduce in half, etc.

EDIT: For example, my modified CR-10S Pro uses 4 mm lead screws with 0.9 degree steppers, which gives me a 0.01 mm resolution per full step. I therefore would get 0.000625 mm resolution per microstep with microsteps set to 16. In practice, I use 64 microsteps (because I can) which gives me Z resolution of 0.00015625 mm.

1 Like

Thanks for the reply.

I suspected that it was tied to that, but I wasn’t sure.
Still, I’m surprised I can consistently achieve such results.

I guess I’ll have to look elsewhere for the leveling issue.

Just for kicks, you can change your microstepping and retry.

FWIF, I just run PROBE_ACCURACY on my printer that has not moved for well over a week, so there would be some compression set in the rollers etc.:

12:33:39 $ PROBE_ACCURACY
12:33:39 // PROBE_ACCURACY at X:180.000 Y:150.000 Z:10.000 (samples=10 retract=3.000 speed=2.0 lift_speed=2.0)
12:33:44 // probe at 180.000,150.000 is z=2.041562
12:33:47 // probe at 180.000,150.000 is z=2.042344
12:33:51 // probe at 180.000,150.000 is z=2.040625
12:33:54 // probe at 180.000,150.000 is z=2.040781
12:33:57 // probe at 180.000,150.000 is z=2.041406
12:34:01 // probe at 180.000,150.000 is z=2.041250
12:34:04 // probe at 180.000,150.000 is z=2.042656
12:34:07 // probe at 180.000,150.000 is z=2.042656
12:34:11 // probe at 180.000,150.000 is z=2.042187
12:34:14 // probe at 180.000,150.000 is z=2.042344
12:34:16 // probe accuracy results: maximum 2.042656, minimum 2.040625, range 0.002031, average 2.041781, median 2.041875, standard deviation 0.000717

As you can see this is an order of magnitude higher than my Z resolution, so it represents quite well the overall mechanical repeatability of my printer. I’m sure this result would be better if I exercised the printer first.