I’ve been working on tests using an ldc1612 based inductive sensor to detect contact between nozzle and bed. That is, it may be possible to use this hardware to probe by “tapping” the nozzle into the bed.
This capability would have two major advantages over traditional inductive sensors:
- It does not suffer from “thermal drift”.
- There is effectively no probe “xy offset”.
The ldc1612 inductive sensor operates similarly to traditional inductive sensors, except it provides more information on the measured “inductive resonance frequency”. Basically, the sensor oscilates a small electic current in a coil and can detect the resonant frequency of that oscilation. As the probe moves closer to the bed the resonant frequency increases. This can be used to estimate the distance between bed and probe. Klipper currently has basic support for the ldc1612 ( Configuration reference - Klipper documentation ).
Crucially, if the Z carriage is descending and the probe detects that the resonant frequency stops increasing, then that can be used to infer that the nozzle has contacted the bed. That is, instead of using the sensor to directly estimate Z distance, it can be used to detect when the Z distance stops changing. A brief stall on the Z carriage, due to the nozzle contact with the bed, can thus be detected.
Interestingly, this also avoids issues with “thermal drift” - the temperature of the probe electronics, the probe coil, and the metal bed can slightly influence the measured resonant frequency. The “tap” approach, however does not rely on a precise mapping from resonant frequency to Z distance. The sensor only needs to detect when the resonant frequency stops increasing.
In many ways this functionality appears similar to recent discussions on “loadcell” support.
Some caveats I’ve seen in my tests so far:
-
It is not a fully general “nozzle tap” detection like one might find on a loadcell. The bed still needs to be metal. Even though the system detects contact between nozzle and bed, the sensor still needs to be above the metal bed (which can limit probing near the edges). It’s likely possible to have a surface on top of the metal bed, but the point of contact still probably needs to be within 5-6 Z millimeters of the metal.
-
There needs to be a strong mechanical link between nozzle and probe on the toolhead carriage. The idea is that when the nozzle contacts the bed, it’ll briefly stop moving, which causes the probe to stop moving, which can then be detected. As a contrary example, if the probe was mounted on the other side of the toolhead carriage, such that when the bed presses into the nozzle the probe gets cantilevered closer to the bed, then the system would not work.
-
The system does not work well at slow Z probing speeds nor slow Z accelerations (at least in the test code I implemented). At slow speeds, stepper motor “cogging” (aka detent forces) causes jittery movement. It’s difficult to distinguish those stop/start oscillations from stops due to nozzle contact. Also, the test code I implemented only works when the toolhead is at a constant Z velocity, so a very low Z acceleration would not work well.
-
Error checking looks like it may be difficult to implement. In particular, I think detecting “false positives” may be a challenge. That is, if something causes the probe to think a contact is made, it’ll halt Z movement. And once the Z movement is halted, there isn’t really anything to indicate that a contact truly was made. (To wit, a halt in Z movement due to nozzle contact is indistinguishable from a halt in Z movement due to no longer commanding Z movement.)
-
A “tap” system does require contact between nozzle and bed (obviously). That may not always be desireable. In particular, it’s probably not a good idea to probe with a fully heated nozzle. It’s unclear (to me) if many taps will eventually wear out the nozzle, bed, or carriage. And, of course, any debris or plastic remnants on the nozzle will skew Z height results.
I have implemented some basic test code. The code implements checks in the MCU to detect when measured frequencies stop increasing. The mcu code can then signal an event which causes the toolhead to stop moving. The curent code does not produce accurate Z height results - good accuracy would require host based “knee” detection. (Along with additional error and false positive checks.) If interested, the code for the test implementation is below.
Important - the development code below is known to not be accurate and is very likely to cause nozzle crashes!
Some brief usage notes at:
Cheers,
-Kevin