Skip to content

temperature_probe: use tap for calibration#7186

Open
nefelim4ag wants to merge 1 commit intoKlipper3d:masterfrom
nefelim4ag:temperature-probe-by-tap
Open

temperature_probe: use tap for calibration#7186
nefelim4ag wants to merge 1 commit intoKlipper3d:masterfrom
nefelim4ag:temperature-probe-by-tap

Conversation

@nefelim4ag
Copy link
Collaborator

@nefelim4ag nefelim4ag commented Feb 2, 2026

On the other side of the coin, if the tap works correctly and returns a reliable offset.
Temperature compensation calibration can be fully automated.

TEMPERATURE_PROBE_CALIBRATE PROBE=ldc1612 TARGET=50 METHOD=tap

I have zero experience with temperature compensation (this was my first successful attempt),
I need time to check if everything works correctly.

Thanks,
-Timofey

@nefelim4ag
Copy link
Collaborator Author

nefelim4ag commented Feb 2, 2026

Hmhmhmhm,
It seems to work; there is a little unevenness in compensation, and it looks undercompensated at room temperature.

As far as I understand, after the compensation, one should be able to run:
PROBE at different temperatures and get about the same output.
For example (this is not a real output, but a correct one should look like so):

$ PROBE # at 30C
// Result: at 200.000,214.600 estimate contact at z=0.159
$ PROBE # at 40C
// Result: at 200.000,214.600 estimate contact at z=0.160
$ PROBE # at 50C
// Result: at 200.000,214.600 estimate contact at z=0.161
$ PROBE # at 60C
// Result: at 200.000,214.600 estimate contact at z=0.159

Where nozzle elongation and overall thermal changes around the probe can affect this result.
So, for example, there is ~0.16, because at the calibration, the hotend temperature was 175 °C, due to this, the nozzle was longer by about 0.1mm.
Later, this was adjusted, like for a normal probe with Z_OFFSET_APPLY_PROBE.

Calibration is linked to frequencies, so saving the G-Code Z Offset to the calibration curve still works.
Probably, it is possible to not calibrate "tap" as "true" zero, as long as it is consistent and can reliably measure the reference point, it should also work.

So, I guess, my curve is more a result of calibration settings.
Otherwise first layer at 50C and 70C seems fine, and so does the probe output.

Kudos to Arksine for the temperature compensation.

My calibration data just in case
[temperature_probe ldc1612]
calibration_temp = 50.685682
drift_calibration =
	3345934.788908, -1883.566411, 19.848264
	3259372.836836, -1399.183087, 14.455710
	3197482.992375, -1043.333013, 10.557582
	3152633.839320, -793.521548, 7.766643
	3119452.536138, -630.748565, 6.154571
	3091943.022388, -389.153371, 3.425397
	3073560.863979, -340.671743, 2.916956
	3060423.746474, -356.366628, 3.061147
	3049659.913477, -362.513283, 3.171492
drift_calibration_min_temp = 37.02712037774617

[probe_eddy_current ldc1612]
calibrate =
	0.100000:3283976.112,0.140000:3277268.543,0.180000:3270819.022,
	0.220000:3264437.782,0.260000:3258308.487,0.300000:3252304.523,
	0.340000:3246592.194,0.380000:3240957.749,0.420000:3235546.492,
	0.460000:3230213.957,0.500000:3225108.998,0.540000:3220120.958,
	0.580000:3215293.096,0.620000:3210567.666,0.660000:3205793.924,
	0.700000:3201297.873,0.740000:3196943.851,0.780000:3192675.537,
	0.820000:3188541.119,0.860000:3184467.974,0.900000:3180545.990,
	0.940000:3176710.632,0.980000:3172985.569,1.020000:3169323.034,
	1.060000:3165792.460,1.100000:3162302.252,1.140000:3158940.550,
	1.180000:3155646.869,1.220000:3152427.564,1.260000:3149271.834,
	1.300000:3146224.719,1.340000:3143222.920,1.380000:3140310.495,
	1.420000:3137460.451,1.460000:3134694.131,1.500000:3131971.983,
	1.540000:3129332.864,1.580000:3126732.008,1.620000:3124211.569,
	1.660000:3121718.216,1.700000:3119318.501,1.740000:3116951.559,
	1.780000:3114653.353,1.820000:3112402.797,1.860000:3110210.302,
	1.900000:3108056.467,1.940000:3105974.335,1.980000:3103916.327,
	2.020000:3101916.955,2.060000:3099940.985,2.100000:3098021.164,
	2.140000:3096123.447,2.180000:3094281.857,2.220000:3092458.023,
	2.260000:3090698.351,2.300000:3088942.215,2.340000:3087247.553,
	2.380000:3085574.198,2.420000:3083944.720,2.460000:3082336.113,
	2.500000:3080770.876,2.540000:3079232.175,2.580000:3077730.374,
	2.620000:3076256.318,2.660000:3074817.728,2.700000:3073390.682,
	2.740000:3072014.111,2.780000:3070655.158,2.820000:3069330.683,
	2.860000:3068013.328,2.900000:3066738.135,2.940000:3065474.839,
	2.980000:3064244.839,3.020000:3063027.535,3.060000:3061845.535,
	3.100000:3060674.923,3.140000:3059535.159,3.180000:3058406.689,
	3.220000:3057305.997,3.260000:3056223.149,3.300000:3055156.896,
	3.340000:3054118.127,3.380000:3053094.016,3.420000:3052085.445,
	3.460000:3051100.062,3.500000:3050125.294,3.540000:3049177.047,
	3.580000:3048237.780,3.620000:3047317.754,3.660000:3046415.756,
	3.700000:3045525.373,3.740000:3044643.964,3.780000:3043792.491,
	3.820000:3042945.543,3.860000:3042130.898,3.900000:3041312.185,
	3.940000:3040519.509,3.980000:3039740.710,4.020000:3038971.657,
	4.060000:3038216.725,4.100000:3037480.213

That said, it should work.

Thanks,
-Timofey

@nefelim4ag nefelim4ag marked this pull request as ready for review February 2, 2026 19:06
@KevinOConnor
Copy link
Collaborator

@Arksine - fyi.

-Kevin

@Arksine
Copy link
Collaborator

Arksine commented Feb 3, 2026

Where nozzle elongation and overall thermal changes around the probe can affect this result.
So, for example, there is ~0.16, because at the calibration, the hotend temperature was 175 °C, due to this, the nozzle was longer by about 0.1mm.

This is true. It is probably best to do thermal drift calibration with the nozzle as cold as possible, just above the max bed temperature. Regardless, changes in the nozzle/tool will occur that will have some impact on the result. We could pre-heat the nozzle, but that will raise the probe temperature which we want to avoid. FWIW, it isn't surprising that compensation at room temperature is off. The further you are outside of the calibration temperature range the more likely there will be error in the compensation.

Calibration is linked to frequencies, so saving the G-Code Z Offset to the calibration curve still works.
Probably, it is possible to not calibrate "tap" as "true" zero, as long as it is consistent and can reliably measure the reference point, it should also work.

For drift calibration what we really want from the "tap" is for it to consistently stop the probe in the same location. If that isn't reliable we could add the delta between the trigger position and the real position to the lift. Regardless it is probably more consistent than a manual probe, and its certainly easier to collect more samples with automated probing.

I'll look into setting up the tap functionality on my test machine and see how it does when I get a chance. At first glance the code looks good to me. I do think in the future it may be beneficial for the probe to report "capabilities", such as nozzle probing, scanning, etc. We could use that to verify that the probe will function correctly when performing the drift calibration.

@github-actions
Copy link

Thank you for your contribution to Klipper. Unfortunately, a reviewer has not assigned themselves to this GitHub Pull Request. All Pull Requests are reviewed before merging, and a reviewer will need to volunteer. Further information is available at: https://www.klipper3d.org/CONTRIBUTING.html

There are some steps that you can take now:

  1. Perform a self-review of your Pull Request by following the steps at: https://www.klipper3d.org/CONTRIBUTING.html#what-to-expect-in-a-review
    If you have completed a self-review, be sure to state the results of that self-review explicitly in the Pull Request comments. A reviewer is more likely to participate if the bulk of a review has already been completed.
  2. Consider opening a topic on the Klipper Discourse server to discuss this work. The Discourse server is a good place to discuss development ideas and to engage users interested in testing. Reviewers are more likely to prioritize Pull Requests with an active community of users.
  3. Consider helping out reviewers by reviewing other Klipper Pull Requests. Taking the time to perform a careful and detailed review of others work is appreciated. Regular contributors are more likely to prioritize the contributions of other regular contributors.

Unfortunately, if a reviewer does not assign themselves to this GitHub Pull Request then it will be automatically closed. If this happens, then it is a good idea to move further discussion to the Klipper Discourse server. Reviewers can reach out on that forum to let you know if they are interested and when they are available.

Best regards,
~ Your friendly GitIssueBot

PS: I'm just an automated script, not a human being.

Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
@nefelim4ag nefelim4ag force-pushed the temperature-probe-by-tap branch from 8e5a4ca to 144bd0d Compare March 8, 2026 01:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants