logo elektroda
logo elektroda
X
logo elektroda

The Piezo Probe Paradox - Or how a better sensor reveals the mechanical shortcomings of a 3D printer

yego666 1017 3

TL;DR

  • A piezo nozzle-contact probe on a CoreXY 3D printer replaces a BL-Touch and turns PROBE_ACCURACY into a diagnostic for the machine’s own mechanics.
  • The probe’s zero-backlash design exposes Z_MIN polling delay, motor stop lag, microstepping errors, and bed wobble instead of hiding them behind probe repeatability.
  • Klipper polls the Z_Min line after about 100 microseconds, then the heavy Z axis takes another two or three microseconds to stop.
  • Accuracy is best near the Y-axis center, while unsupported bed edges show more deviation, friction differences, and vibration, making first layers easier to tune in the middle.
Generated by the language model.
ADVERTISEMENT
Treść została przetłumaczona polish » english Zobacz oryginalną wersję tematu
📢 Listen (AI):
  • That is - a paradigm shift in printer accuracy following the installation of a piezo sensor (Piezo Probe).

    I would like to share with my colleagues my observations and lessons learned from the transition from the electro-mechanical BL-Touch sampler to the piezo sampler, which samples the table via the end of the print nozzle.
    Since I installed the piezo sensor in the printer, I have been observing some statistics, or more precisely, the results of the PROBE_ACCURACY command. These have given me some food for thought.
    When I was using the BL-Touch sensor, there was nothing to think about, as it has performance more than an order of magnitude worse than the piezo sensor.
    PROBE_ACCURACY reflected the mechanical clearances inside the BL-Touch, so other factors were hidden under the inaccuracy of the probe itself.
    The table map (bed mesh) always contained an error due to the mechanical stylus positioning itself slightly sideways or differing in Z-axis extension height by some 10 or 20 micrometres. This, of course, later translated into my first layers being either over-compressed or under-compressed.
    Lack of repeatability is an inherent problem with these probes, especially after a certain run.
    Since the piezo sensor has no such backlash at all, I found that I could no longer see its mechanical error (which is zero by design).
    So why on earth am I still seeing deviations in the PROBE_ACCURACY reports?
    It was a puzzle that needed to be solved.
    Bad design, poor mounting, control electronics error? None of the above.
    What I actually see in my statistics is the cumulative electro-mechanical inaccuracy of my printer.
    How does this interact with each other?
    The probe always triggers at the same vertical point: when the nozzle makes contact with the table.
    What happens next?
    The firmware that controls my Z stepper motors checks the state of the Z_Min line of the sensor.
    After a certain delay (Klipper polls this line instead of using interrupts), the system registers the contact signal.
    This is the first delay, which can be around 100 microseconds. It then issues a command to stop the Z-axis motors.
    Because these motors drive two heavy trapezoidal screws and a heavy table (at least on my CoreXY printer), two or three microseconds pass before the motors really stop. Sometimes these delays overlap so that they are minimal, making the Z axis stop almost immediately.
    This explains the slight differences in the PROBE_ACCURACY statistics.
    But that's not all...
    Many CoreXY tables are supported in the middle of the Y-axis and there the above statistics work best, but what about the rest of the table?
    These deviations still occur, but there are more factors coming into play there that affect the accuracy of the probe.
    When you're lifting a heavy load (such as a table), it's best supported along the line between the two pull bolts (the Y-axis centre) that drive it up and down.
    However, the sides of the table are not directly supported, so they can vibrate during lifting. This vibration (wobble) is a purely mechanical factor depending on how smoothly the vertical guides or linear rollers work.
    No matter what, even the smoothest slides never run identically on both sides of the table.
    This uneven friction adds to the previously described delays on one side and subtracts on the other.
    This is naturally reflected in the PROBE_ACCURACY statistics as an additional standard deviation and greater inconsistency.
    However, this cannot be attributed to the inaccuracy of the probe itself.
    Since the sensor's mechanical or thermal drift is no longer present, I use such a probe to measure the accuracy of my printer's electronics, firmware and mechanics.
    This is also the reason why the table appears more crooked on the sides than in the middle, and explains why it is easier to get a perfectly accurate first layer close to the centre of the table.
    Close-up of a 3D printer nozzle touching a black build plate.

    TL;DR: Installing the Piezo sampler has revealed sources of inaccuracy in the PROBE_ACCURACY report that are not at all the leveling sampler's fault.
    The Piezo sampler acts as a diagnostic tool to reveal the 'ghosts' inhabiting the printer such as Z_MIN signal reception delay, microstepping inaccuracies,
    wobbling of the working table, especially on the unsupported table edges of CoreXY printers.
    The sampler not only samples the table surface, it also tests the entire mechanical structure of the printer.

    As always, I would welcome your feedback.

    Cool? Ranking DIY
    About Author
    yego666
    Level 33  
    Offline 
    yego666 wrote 2175 posts with rating 564, helped 239 times. Been with us since 2004 year.
  • ADVERTISEMENT
  • #2 21855617
    Urgon
    Level 38  
    AVE...

    A measurement error of 10-20µm at a typical layer thickness of 200µm shouldn't cause problems when printing the first layer, you just add a constant z offset of -0.02mm and you're done. Especially as the nozzle opening is circular, so what is laid down on the top is a 'rectangle' with rounded sides. This fact is also the reason for the visible layers....

    Further, you can reduce these measurement errors by reducing the speed of the Z-axis during probing. This will give more time for the firmware to stop the motors and reduce the mechanical speed of the table making it easier to stop. The next step is to reduce the number of microsteps per step of the motors. A typical stepper motor has 200 steps per revolution, which with a 4mm trapezoidal screw gives a 0.02mm travel. At 16 microsteps per step, the theoretical resolution is therefore 1.25µm. But the disadvantage of microsteps, which is not talked about much, is the reduction in holding torque and therefore dynamic torque. With 16 microsteps per step, the holding torque is only 9.80% of nominal. But if you set only 4 microsteps per step for the Z axis, the resolution drops to 5µm, but the holding torque is 38.27% of nominal. Since the dynamic torque is derived from the holding torque, you have more 'force' to stop or move the table - so you nullify the inertia problem. Alternatively, you can give a larger Z-axis motor, but in many printers, especially CoreXY, this requires a lot of design intervention - there simply isn't enough room for a large motor....

    The question is: is that much accuracy needed? Is an error of even 20µm for a 200µm layer really something you can't live with?
  • ADVERTISEMENT
  • #3 21855791
    yego666
    Level 33  
    Urgon wrote:
    The question is: is that much accuracy needed? Is an error of even 20µm for a 200µm layer really something you can't live with?
    It's hard to disagree with the problem correction methods you describe. However, each has advantages and disadvantages. For example, reducing the microstep means more noise during the stepper rotation.

    But instead of improving the printer based on general considerations, it is probably easier to install a sampler (whose installation is the tightening of a single screw), which does not require such corrections per se, but points out weak spots in the construction of the printer itself.
    Knowing the specific symptoms and some measurements, it is easier to decide where to apply the remedy.
    Furthermore, such a sensor has no moving parts or thermal/mechanical drift to falsify the measurement.

    With a deviation of +/- 20 microns you can live with, of course, but you can also live with an ulcer on your weak spot, although you can remove it and live better :)
  • #4 21855861
    Urgon
    Level 38  
    AVE...

    The noise level also depends on the type of motor driver. Drivers that operate quietly have been available for some time. But the noise problem for the Z-axis is of little concern, because in the end this movement only happens when changing layers. A 3D printer is not a CNC milling machine, where all three motors run all the time. For the X and Y axes you can leave the default setting, the curves will be more geometrically correct, although this already depends on the overall tolerances of the machine....

    On my first printer, an Ender 3V2, I fitted a BL-Touch probe and direct drive because I had problems with adhesion when the machine lost the tabletop calibration, and I wanted to print advanced materials too. Now I have a K1 Max, and no problems with the first layer, although the tabletop has a factory curvature that I fought with brute force and paper shims....

    On the CNC milling machine, on the other hand, I reduced the number of microsteps per step, because otherwise the machine was losing steps despite the larger NEMA-23 motors. I would preferably replace them with closed-loop servo motors to avoid losing positions. But at the moment I don't have the space to use the machine, especially as it's quite a lot noisier than even a noisy 3D printer, and there's nothing that can be done about it except to pack the whole thing into an enclosure....

    EDIT:

    I'm just printing a part out of TPU. The motors are barely audible, but the side fan is very loud due to the design and attachment to a not very rigid acrylic panel that acts as a speaker diaphragm....
📢 Listen (AI):

FAQ

TL;DR: Switching from BL‑Touch to a piezo nozzle probe exposes true printer errors: users see 10–20 µm variance and note “the probe always triggers at the same vertical point.” It reveals firmware polling (~100 µs), motor stop lag, and bed-edge wobble, not sensor drift. [Elektroda, yego666, post #21855484]

Why it matters: If your first layer varies, a piezo probe can diagnose Z_MIN latency, microstepping effects, and bed support issues so you fix the printer—not chase probe offsets.

Quick Facts

What is a piezo probe?

A piezo probe is a nozzle-contact Z sensor that detects bed touch via a piezoelectric element, providing zero mechanical backlash and minimal thermal/mechanical drift for highly repeatable probing. It turns the nozzle itself into the trigger point, improving diagnostic accuracy of the printer’s mechanics. [Elektroda, yego666, post #21855484]

What is BL‑Touch?

BL‑Touch is an electromechanical Z probe that deploys a small pin to touch the bed; internal clearances and stylus wear can add 10–20 µm variation, reducing first‑layer consistency versus a nozzle‑contact piezo sensor. It can also lose repeatability after long runs. [Elektroda, yego666, post #21855484]

What is PROBE_ACCURACY in Klipper?

PROBE_ACCURACY is a Klipper command that repeats probing at the same point to report mean, standard deviation, and consistency. With a piezo probe, deviations primarily reflect your printer’s electronics, firmware polling, and mechanics rather than sensor drift. [Elektroda, yego666, post #21855484]

What is microstepping in stepper motors?

Microstepping is a driver technique that divides each full motor step into finer microsteps to increase positional resolution (for example, 16× microstepping gives ~1.25 µm on a 4 mm lead Z screw) but reduces holding and dynamic torque significantly. [Elektroda, Urgon, post #21855617]

What is a CoreXY bed support issue?

A CoreXY bed support issue arises when the platform is supported near the Y‑center but less at the edges, making the sides prone to vibration or wobble during Z movement. This adds variance to probing, especially away from the center. [Elektroda, yego666, post #21855484]

Does 10–20 µm probe error matter for a 200 µm first layer?

Usually no; a 10–20 µm deviation on a 200 µm layer is 5–10% and can be offset with a −0.02 mm Z adjustment. As one user notes, accuracy can be adequate if compensated. “Is that much accuracy needed?” depends on your tolerances. [Elektroda, Urgon, post #21855617]

Why did my PROBE_ACCURACY get worse after switching to piezo?

Because the piezo removes probe backlash, remaining variance reflects printer realities: Klipper’s ~100 µs Z_MIN polling delay, a few‑microsecond motor stop lag, and bed‑edge wobble from unequal guide friction. The probe reveals—not causes—mechanical shortcomings. [Elektroda, yego666, post #21855484]

How can I reduce Z probing variance in Klipper?

Lower the Z probing speed to give firmware more time to stop and reduce bed inertia effects. Consider reducing Z microstepping (e.g., 16× to 4×) to increase available torque for quicker stops, accepting coarser resolution. Adjust offsets as needed. [Elektroda, Urgon, post #21855617]

Will reducing microstepping make my printer louder?

Yes, fewer microsteps can increase audible noise; however, Z moves occur mainly during layer changes. Quiet drivers help, and users report noise is minor versus X/Y motion or fan resonance on thin panels. Prioritize Z stability over slight sound. [Elektroda, Urgon, post #21855861]

What concrete delays affect Z stop after nozzle contact?

First, Klipper polls the Z_MIN line with about 100 microseconds delay. Then, heavy Z screws and bed inertia add a few microseconds before motion fully halts. Overlaps can minimize total delay, but variance still appears in statistics. [Elektroda, yego666, post #21855484]

How does microstepping impact first‑layer consistency?

Higher microstepping increases theoretical resolution (1.25 µm at 16×) but reduces holding torque to ~9.80%. Lowering to 4× raises torque to ~38.27%, helping stop the bed reliably and improving repeatability, especially on heavy Z assemblies. [Elektroda, Urgon, post #21855617]

Quick comparison: BL‑Touch vs piezo nozzle probe?

Feature BL‑Touch Piezo nozzle probe
Trigger method Deploying pin Nozzle contact
Moving parts Yes No
Typical variance ~10–20 µm from stylus/clearances Zero backlash; variance reflects printer
Drift over runs Can increase Minimal
Diagnostic value Limited High
[Elektroda, yego666, post #21855484]

How do I diagnose bed‑edge wobble with a piezo probe?

Run PROBE_ACCURACY at center, then near all four corners. Compare standard deviations; higher edge values indicate support or guide friction issues. Users report more consistent readings along the Y‑center line where the bed is best supported. [Elektroda, yego666, post #21855484]

What simple 3‑step process improves probing on heavy beds?

  1. Reduce Z probing speed in firmware to lower kinetic energy.
  2. Set Z microstepping to 4× to gain torque for faster stops.
  3. Re‑run PROBE_ACCURACY and adjust Z offset by −0.02 mm if first layer is high. [Elektroda, Urgon, post #21855617]

Is changing the Z motor size necessary?

Not always; users note upsizing Z motors in compact CoreXY frames is hard. Lower microstepping often achieves better stopping force without mechanical redesign, preserving geometry on X/Y. Consider driver settings before hardware swaps. [Elektroda, Urgon, post #21855617]

Can fans or panels affect perceived noise during probing?

Yes. A loud side fan or a thin acrylic panel can act as a diaphragm, amplifying sound even when motors are quiet. This can mask actual motion noise and mislead tuning efforts; treat panel resonance separately. [Elektroda, Urgon, post #21855861]

What’s the single biggest insight from switching to piezo?

A piezo probe turns probing into a diagnostic: when backlash is zero, any remaining variance points to firmware latency, drive torque, or bed mechanics—not the sensor. “The sampler tests the entire mechanical structure of the printer.” [Elektroda, yego666, post #21855484]
Generated by the language model.
ADVERTISEMENT