Musings and Experiments on the Art and Science of 3D Printing

Recent Posts

Understanding Probing and Trigger Z Height

By Michael Hackney → Monday, May 1, 2017


Before 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.
Printing the 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.
Z Height

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.


The 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

IR Probing
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.
FSR Probing
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

  1. 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.
  2. Set this height to Z=0 with G92 Z0.
  3. Move the nozzle up a centimeter or so, just to get it out of the way and clear of the bed.
  4. Now run a single probe that doesn't update the printer's coordinates with G30 S-1.
  5. 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, tweak

Once 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 Stepping

RepRapFirmware 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
With baby stepping, you can actually move the nozzle up or down to change the first layer height while the printer is printing the first layer. So for the example above, if the first layer was printing too thin you could click the Up button to make the layer thicker by the set increment – in my case it is 0.02mm per click. Make note of the Current Offset value shown above the buttons. Once the print has completed, subtract the Current Offset value from the Z height offset and update the G31 Z. For the example I would have clicked the Up button twice to increase the 0.16mm first layer to get the 0.20mm layer height I expected. The G31 Z value was -0.15 so I subtract 0.04mm from it:

-.015 - .04 = -0.019mm

Set G31 Z-0.019 and you have corrected your Z height offset.


I 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.

emmett's amazing Knotted Orbit print

By Michael Hackney → Saturday, April 15, 2017
A member of the UltiBots delta printer Facebook group posted a challenge two days ago to see if anyone could print emmett's Knotted Orbit. I decided to take the challenge "just because". This particular model was not designed to be printed on an FDM 3D printer but with an understanding of how to configure a slicer to deal with the many curves of small radiuses and lots of supporting structure, it can (almost) be done. I say "almost" because this print really is an exercise in support, support removal and cleaning up the print.

I chose Atomic Aqua Gemstone PLA filament as I love its color and translucency. I sliced the model for .1mm layers, 3 perimeters, 3 shells, and 20% grid infill using Slic3r Prusa Edition and its new improved supports. Here are some mid-print photos.


I used every post processing trick I know including my secret weapon, Otter Butter (a product I manufacture for fly fishing but use for all sorts of things). Here are the results along with a tray full of broken off support.

Printed on an UltBot D300VS delta printer. 22hrs 59min 14 sec

Delta Arm Joint Musings

By Michael Hackney → Thursday, April 6, 2017
I see (and participate) in a lot of discussions about delta arm joints (or rod ends) - the connections between the ends of the arms and the effector at one end and the carriages on the other. An example appears in the photo below. These joints have the unenviable task of allowing unconstrained motion in three dimensions while not allowing play or backlash in the mechanism. Twelve joints are required for a delta printer. Four joints for each of three sets of parallel arms. The photo shows the six joints (three sets of parallel arms) at the effector end. The other end of each pair of arms is attached to the carriage that controls positioning of the effector.

First I'll present a bit of history, then I'll give my assessment of the strengths and weaknesses of each.

A little joint history

In the early days of delta printers, most builders used Traxxas rod ends – they are inexpensive and they work. When SeeMeCNC released their first Rostock MAX delta printer in 2011 they used their own "Universal Joint" made of aluminum and injection molded parts. The in 2013 a poster, Werner Berry, on SeeMeCNC's forum showed his all-custom delta printer with magnetics and metal balls for the end joints. To the best of my knowledge, this was the first public post showing magnetic ball joint ends. This was not a new idea, magnetic joints like this were used in other fields but Werner certainly pioneered their use on delta printers. The results were obvious and spectacular (more later). More recently (late 2015 I recall), SeeMeCNC released an all-new "Ball Cup" joint on several models of delta printers.

This makes up the four primary families of joint types used for delta printers, to recap:

  1. ball rod ends like the Traxxas rod ends
  2. universal joint rod ends
  3. magnetic ball rod ends
  4. ball cup rod ends
Now let's look at these in more detail.

Joint review

1) Traxxas ends (the name brand) are functional and inexpensive but they are not manufactured to high tolerances. New ends often have excessive play (or lash or backlash). They also wear relatively quickly, again introducing play. By "play" I mean the ball is not held firmly in its socket and can wiggle around easily. This wiggle – or backlash – results in imprecise movement during a print and leaves tell-tale print artifacts like visible layer shifts and overshot layers at sharp corners. This is their primary weakness and they have no built-in ability to eliminate this backlash. There are higher precision ball rod ends but, of course, they cost significantly more. Precision costs, how much do you want to spend?

2) SeeMeCNC's universal joint ends required a fair amount of tweaking and tuning to eliminate excess friction while not introducing backlash. Over a few years of iterations the molding technology and design improved and they were serviceable. I put them on par – arguably a little more reliable and longer lasting – with Traxxas ends.

3) When the delta world was introduced to Werner's magnetic ball ends it was like the veil of backlash had been lifted from our eyes. Werner's early print photos were spectacular. And there was good engineering reason for this – magnetic balls have built-in backlash prevention. The design uses a magnet mounted in a hemispherical cup – a type of ball-in-cup joint. The magnet attracts the steel in a precision bearing holding it in the cup. The ball is free to move – not much unlike your hip joint (which is a type of ball-in -cup joint) – but the magnet holds it tightly in the cup so there is no excess play. It's brilliantly simple.

4) More recently SeeMeCNC introduced their ball cup ends. These are another type of ball-in-cup joint and they also eliminate backlash. Interestingly, the ball cups are mounted perpendicular to the axis of the rod arm whereas magnetic ball ends are in line with the arm. This allows for a spring to pull the cups into the ball as shown in the photo above. Like magnetic ball end, ball cup ends give excellent print results.

The nitty-gritty

So now the Big Question "which type is best?" The answer, of course, is "it depends." I won't be so cruel as to end here, I'm going to give you my opinion and testing results on this. I've owned and tested delta printers with all of these end joint types so I assert I'm in a good position to make comparisons.

First off, the original SeeMeCNC universal rod ends (#2 in the list) have been replaced with much better alternatives and for good reason. Now we're down to three. The ball rod ends (#1) are actually quite good if you purchase precision parts. The Traxxas brand ends are fine for small Mini Kossel types of delta printers where high print resolution and high print speeds are not a requirement. They are easy to make or inexpensive to purchase and are a great beginner option. The higher end rod ends are quite nice but at the end of the day, they do not have built-in backlash prevention and they do wear. But, the one thing ball rod ends have going for them is they are secure – they hold the rods to the carriages and effector so they can't dislodge. This means that if the print nozzle hits a bump in the print or jerks quickly, the ball rod ends will hold everything together. We'll see why this is important next...

Magnetic ball rod ends (#3) result in much better print quality due to their ability to eliminate backlash. They are a little more difficult to fabricate the arms, effector and carriages but these parts are available and there are many STLs available to print your own. The one criticism about magnetic ball rod ends is that they can separate. Sudden jerks, hitting a plastic bump on a printed part, printing with a heavy(ier) direct mounted extruder, or simply working on the hot end like polishing the nozzle tip or removing plastic drool can result in inadvertant spontaneous separation. This is their one weakness. Some have tied the carriage to the effector with elastic strips to pull them together in an effort to prevent separation. I haven't tried this myself.

This leaves us at solution #4, ball cup ends. I really like them, especially the red after-market cups that Trick Laser manufactures. To me, they have the best characteristics of magnetic ball end (backlash elimination) and ball rod ends (secure fastening) with none of the negatives of either. They are well suited to large deltas with effector mounted direct extruders like the E3D-Online Titan Aero or Bondtech BMG extruders (more on these in the next few posts). The one "weakness" they have is they are single sourced from SeeMeCNC – at least the molded balls. The cup ends with carbon fiber tube arms are available from Trick Laser made to length and the injection molded "barbells" can be purchased cheaply ($6 for an entire set). I predict this will change in the not too distant future as more people become aware of them and their benefits.

On my delta printers I use either magnetic ball rod ends or the Trick Laser ball cup ends. I do have. preference for the Trick Laser ball cup ends and carbon rods, they are well made, secure and have no backlash. is now active!

By Michael Hackney → Friday, March 31, 2017

After a year of successful blogging and sharing information I decided to take the plunge and register the domain I'll be able to setup email so folks can reach me easier and have a web site associated with my blog so I can organize information and downloadable files. Stay tuned but in the meantime you can get here via

Post 3: Core X-Y Musings...

By Michael Hackney → Tuesday, March 7, 2017
It's been 4 months since my last update Post 2: Improved Z Screw Bearing Blocks so time for an update. Things were going a little (ok, a lot) slow because I was getting caught up in analysis paralysis and over design-itis - primarily because of the hgh cost in both materials and time for the aluminum parts I planned to make. But recently I discovered Atomic Filament PETG-carbon fiber. This stuff is really nice, it prints beautifully, has great dimensional stability and print accuracy and is quite stiff. So, my new plan is to print all of the parts in this PETG-CF and get the printer operational. I can always come back and replace with machined parts if needed. This allwos me to do fast design and test print iterations (with PLA) and then a final print for the machine.

I also have a home for the printer so it is up off the floor–where it was really difficult to work on.
There it is squeezed between RazMaTazz (my Taz 4) and a Terk (a mini Kossel).

This makes working on it much easier. And the new plan is working. Here are some of the parts in PETG CF:

X and Y stepper mounts

Bearing mounts for ballscrews with angular contact bearings

Segment-less Delta Movement

By Michael Hackney → Monday, March 6, 2017
This post comes from a post I originally made on the SeeMeCNC forum in December, 2015. I find myself referring to that post often and repeating it in multiple places so I'm adding it here where I can keep it updated.
updated 3/6/2017

Segment-less Delta Movement
A little know secret to most delta (and Cartesian) printer owners is that path movement for all firmware except David Crocker's dc42 RepRapFirmware is actually broken up into short straight segments. In other-words, a curve is actually "drawn" as a series of short lines and not a smooth arc like you might expect.

These other firmwares are interpolating movements into short line segments so, in theory, there is a negative impact on print quality. There are other factors at play too though - hence the reason for "in theory". By it's very nature, 3D printing starting with an STL file sacrifices some resolution depending on how the original CAD model was converted into an STL (most profound is the # of triangles in the final model). Here is an example of how this works...

Imagine you have a CAD drawing of a 20mm diameter sphere. The CAD tool uses sophisticated math to calculate the geometry and display it. It looks like a perfect sphere on screen. Now, let's run that perfect sphere through the meshing process to create STL versions. To demonstrate I am using 5 different resolutions that generate a low number of triangles to a high number of triangles. When you download an STL from Thingiverse, you have no control over this, the original author made the resolution choice for you. And frankly, most of the folks uploading to the shared services really don't know how to create high quality meshes. Anyway, back to the example - here I've meshed to create a "sphere" with 48, 224, 960, 16128 and 99856 triangles (from left to right). You can see that the far left sphere is course and the one on the far right is reasonably smooth.

Now to take this one step further, imagine your slicer creating g-code from these STL models. To illustrate, I created an imaginary slicing plane 12mm above the base that is .02mm thick and took a cross section of the model at that plane. This is the red line you see inside each model. I projected these slices up above the models so you can see them clearer (black). The 48 triangle model has a slice with 8 sides - pretty low resolution. You can see as you move left to right, each slice has more line segments. These will result in a finer/higher resolution print all things being equal. But they are not! In addition to the slicer converting curves into short line segments, the firmware also imposes its own line segmentation on top of that - that is all of them EXCEPT dc42 RepRapFirmware. dc42 draws each point along the way completely tracing the original path it was given. Smoothie, Repetier, Marlin and the others actually break the path up into short line segments and draw those. This does not always match the original path exactly.

As you can see, if the STL had a low triangle count, you are going to get a course print whether or not your firmware does segment-less movements. Increasing the triangle count will improve the print quality until you reach the segmentation threshold of the firmware, at which point, increased # of triangles won't have an effect and might actually make things worse. That is except dc42, which will faithfully trace each of the tiny line segments exactly point by point.

But, there are other factors that come into play like stepper resolution (1.8° vs 0.9° steppers) and a host of others. Will segment-less moves make all your prints look fantastic? No. But if you design your own parts and optimize output for high quality meshes, I assert you will be able to see the difference. This difference is minute and impossible to photograph, I've tried for over a year. But, parts in hand 10 out of 10 test subjects will pick the part printed with segment-less moves as the best quality part.

I posted Musings on Impact of STL Triangle Count in Jan, 2016 if you'd like to get more info.

The Tusk Fan Shroud

By Michael Hackney → Saturday, March 4, 2017
I don't understand why many people feel they must blast their part, hotend and heated bed with lots of air. Consider this: blasting a large area with a lot of air can create more problems than it solves - problems like part warping, hot end temperature fluctuations, beds that can't reach and maintain higher temperatures and a host of others. A much better approach - particularly for common filaments like PLA, ABS, PETG, etc - is to direct the minimal amount of air as precisely as possible with laser focus.
I started experimenting and writing about this a few years ago. See Strat

New FSR Plate mounting system

By Michael Hackney → Thursday, February 9, 2017

I've posted quite a bit about FSR probing along with my previous mounting system. I've been using FSRs for probing for coming up on 3 years.