BackgroundBefore digging into probing it's useful to take a look at what happens at the beginning of a print. After the printer homes the firmware needs to know exactly where the bed surface is located, called Z=0 by convention, so it can position the nozzle for the first layer. This distance, called Z height, is configured in the firmware. The firmware uses the Z height and subtracts the layer height to position the nozzle above the bed, as shown below for a typical 0.20mm first layer.
To recap, Z height is the total distance the nozzle must travel from the home position (top of printer) to where it is just touching the bed (Z=0) as shown in the diagram to below. Z height is an important parameter as it's what determines whether the first layer is too thin, too thick or just right. In a perfect world, you would set Z height once and be done. In the real world Z height is not static; thermal expansion and contraction can change the position of the bed slightly and the frame and delta mechanics can also change ever so slightly on a day-to-day basis.
In the Early Delta Days (EDD) (pre-probing) you determined the Z height empirically and set it in the firmware. This was a chore and caused countless problems for newcomers. So the quest for auto-probing (or simply probing) ramped up to simplify setting the Z height as part of more comprehensive delta printer calibration.
ProbingThe probe, or more precisely Z probe, is a device that accurately and precisely reports its Z position. In the hypothetical perfect world the probe would trigger just at the point where the nozzle tip touches the print surface and report the actual Z height. In practice, such a probe is not practical and there will likely be an offset from the nozzle tip to the bed surface. In RepRapFirmware and Smoothieware, this offset is called trigger Z height. The IR Probing diagram below shows this offset as 5mm.
Raise your hand if you knew that you have to calibrate your Z probe for delta auto-calibration to work properly. You do and I'll explain why and how in this post. As we learned above, real world probes do not trigger precisely at Z=0. This implies that some probes trigger with the nozzle above the bed surface and others trigger with it below the bed surface – and this is indeed the case. Probes that trigger with the nozzle above the bed surface include inductive probes, IR probes and the early simple effector-mounted mechanical switches. Probes that trigger with the nozzle below the surface typically function by pressing the nozzle into the bed and some small movement is necessary to trigger the probe. FSR (force sensitive resistor) probing is a typical example.
I'll look at each of these two cases in detail below using the IR probe as the example for probes that trigger with the nozzle above the bed and FSR probing for probes that trigger with the nozzle below the bed surface. Let's start with the simplest case to understand, the IR probe.
IR Probing Example
Conceptually, an IR probe works by shining a beam of IR light from an LED at the bed surface. If the bed is IR reflective, some of that light bounces back and is detected by an IR sensor. The time it takes for the beam to make this round trip can be used to calculate the height the sensor is above the print bed. As you see in the diagram, the IR probe is mounted with its lens a few millimeters above the tip of the nozzle and it is designed to trigger before the nozzle hits the bed. The height the nozzle is above the bed when the probe triggers is called the trigger Z height. Let's assume that the tigger Z height is 5mm as shown in the diagram.
If you simply ran delta auto-calibration (G32) after installing the IR probe, without telling the firmware how to adjust for this gap (trigger Z height), the firmware would think that Z=0 is 5mm above the bed and would start your print in the air. It's hard to get a first layer to stick 5mm above the bed (actually, 5mm plus the thickness of your first layer, so 5.20mm above the bed).
Now you can see that some adjustment, or calibration, is needed to let the firmware know where Z=0 actually is. In RepRapFirmware and Smoothieware, G31 is used to set the trigger Z height – the height of the nozzle when the probe triggers. In this case that is 5mm. Think about what this means in relation to the Z height described earlier. When the printer probes, it triggers with the nozzle 5mm above the bed. The distance the probe (and nozzle) traveled is called the probed Z height. Knowing this, you could set the correct Z height using the M665 H parameter simply by adding "5" to the H value. This works as expected but the next time you probe you have to remember to reset M665 H again. This is tedious and error prone.
This is where trigger Z height comes in; the firmware sets the trigger Z height with the G31 Z parameter. The G31 Z value is added to the probed Z height to calculate the actual Z height. Makes sense, right?
|Z Height Calculation for Trigger ABOVE Bed|
FSR Probing Example
Now that you understand the simple case where the probe triggers above the bed surface, let's take a look at FSR probing where the trigger point is below the bed surface.
A typical FSR probing system consists of three FSRs positioned evenly (120°) around the perimeter to support the print bed. These FSRs are connected to an interface board that converts the resistance signals into a simply binary on/off signal so the system behaves like a simple endstop switch to the controller (Duet). This board is the infamous JohnSL controller and is really the magic that makes FSRs practical to use.
Watch this short video showing how the nozzle pushes the bed slightly to trigger the FSRs.
We saw earlier that the IR probe triggers with the nozzle above the bed surface, here the FSR probe triggers with the nozzle just slightly below the bed surface – exactly the opposite. Here's a still view of the situation, lets assume the trigger point is 0.5 mm below the bed – greatly exaggerated for illustration.
Now we should be able to apply what we learned about setting the trigger Z height for the IR probe in the example above. In this case the probed Z height is longer than the actual Z height so we need to subtract the trigger Z height from probed Z height to calculate the correct Z height.
|Z Height Calculation for Trigger BELOW Bed|
Again, it makes sense.
Ok, that's all great, how do I determine the Trigger Z Height?
Now that you know you have a problem (you need to calibrate your Z probe trigger Z height) you can learn how to fix the problem. The Duet Wiki has a nice procedure for doing this but I'm going to recommend a slight modification to the process and I'll explain why.
Setting trigger Z height
- Position the nozzle until it is at Z=0 – this is where I deviate from "standard practice" of using the paper snag test. Typical notebook or printer paper (20#) is about 0.1mm thick (see photo below), about half of a typical 0.20mm first layer height. An old machinist's trick is to use cigarette rolling paper; it is remarkably thin (~0.02mm) and tears easily when snagged. I recommend buying a pack or two and using it for all your Z=0 testing.
- Set this height to Z=0 with G92 Z0.
- Move the nozzle up a centimeter or so, just to get it out of the way and clear of the bed.
- Now run a single probe that doesn't update the printer's coordinates with G30 S-1.
- Finally, get the Z height using M114. This is the value to put in the G31 Z parameter in config.g. This will be positive for probes that trigger above the bed surface like the IR probe and negative for probes that trigger below the bed surface like FSR probes.
Here's a photo showing the thickness of common 20# printer paper, 0.10mm.
|20# Printer Paper is 0.10mm thick|
Tweak, tweakOnce you've determined and set the trigger Z height you should make a test print to ensure your first layer height is what you expect. I like to use my SingleLayerTest model to do this, it is simply a 75mm diameter disk that is one layer height tall (0.20mm is typical). Run the delta auto-calibration and print the SingleLayerTest. Once the part has cooled, peal it off the bed and carefully measure its thickness with a micrometer or caliper. It should be very close to your layer height – 0.20mm in this example. If it is not, you need to tweak the G31 Z parameter to compensate. Here's where it gets fun and where a lot of users get confused and frustrated – especially those who are using FSR probes!
Probes that trigger above the bed (IR probe)This one is easy. Remember the Z Height Calculation for Trigger ABOVE Bed drawing above? The Z height – which is the value the firmware cares about – is calculated by adding the probe Z height to the trigger Z height. If your SingleLayerTest is too thick, you need to increase trigger Z height to move the nozzle closer to the bed. Conversely, if the SingleLayerTest was too thin, decrease trigger Z height. The way to think about this is from the perspective of the desired Z height. The probe Z height is fixed as long as you don't physically alter the probe or its mount. So if a first layer is too thick, your goal is to increase the Z height, thereby moving the nozzle closer to the bed. You do this by increasing the trigger Z height (since probe Z height does not change).
Probes that trigger below the bed (FSR probe)Look at the Z Height Calculation for Trigger BELOW Bed drawing above. In this case, if the SingleLayerTest is too thick the probe Z height must change in the positive direction (a smaller negative number). If the SingleLayerTest was too thin, probe Z height must change in the negative direction (a more negative number). This might seem a little counterintuitive until you consider that the direction and magnitude of the change is relative to the probe Z height. Let's take a concrete example so it sticks in your mind:
Assume you have 0.20mm layer height and FSR probe with G31 Z-0.15 to let the firmware know the probe triggers slightly below the bed surface.
Now you print the SingleLayerTest and measure it at 0.16mm thick. This is 0.04mm thinner than you expected. What this says is that the Z probe height is longer than the desired Z height so you need to make it shorter. You've already told the firmware to move -.15mm with the G31 Z-0.15 but that wasn't enough, so to move back more, subtract 0.04mm from the Z height offset (-.15m) to get -0.19mm. Set G31 Z-0.19 in config.g and auto-calibration should result in a perfect Z height and perfect first layer thickness the next time you print.
Or the easy way with RRF 1.18 Baby SteppingRepRapFirmware v1.18 introduced a new feature – M290 baby stepping – and Duet Web Control v1.15a supports it with new buttons on the Print Status page.
Baby Stepping Buttons
-.015 - .04 = -0.019mm
Set G31 Z-0.019 and you have corrected your Z height offset.
ConclusionI realize this is probably more detail than most would like but I wanted to capture this so I don't have to repeat myself. I receive a lot of questions about probing and bad first layer heights. Many times, the simple explanation and answer is that delta auto-calibration does require calibrating the probe itself – Z height offset!
E3D Online V6 hot end drawing used with permission.