Magnetic Kinematic Coupling as a Z-Probe

Keep your broken tools.
They are just biding their time...
Searching for Purpose

Some day I'll finally finish printer #2. Just can't seem to find a solid block of time to dive into Smoothieware, fire the machine up, and debug it. Otherwise, it should be good to go.

In the meanwhile, I messed around with a quick concept with the magnetic kinematic coupling setup I use for my hotends. My original goal, way long ago, was to use the magnetic coupling as a tool changer, much like this Hackaday post from 2013. Since then, I've gone through a lot of iterations, but ultimately came to the conclusion that a delta's not optimal for tool changing, especially after I saw the progress made recently w/ tool-changers on the Ultimaker.

The magnetic coupling itself had some other advantages aside from being an attempt at a tool-changer:

  • Faster Maintenance: No fasteners whatsoever
  • No need to re-zero: Repeatability of kinematic coupling meant that I didn't have to re-zero the hotend each time I removed and re-attached it (assuming that nothing else in the system changed)
  • Soft Print Failures: If the hotend hit something during a print, the hotend would just pop up, sometimes only momentarily. In a couple of cases, this saved my printer from serious damage or potential clogging when I was dealing with some shoddy filament.

For leveling, my prior setup had been a standard limit switch mounted on another kinematic coupling:

I'd just swap out my hotend setup for the one with the limit switch, dial in the tower offsets and print radius, then swap back to do a final calibration of the overall z-height. Not necessarily the most elegant solution, but it did its job just fine for my purposes. I've never tried FSR's, inductive sensors, or IR sensors, but it's my opinion that mechanical switches are going to be the most straightforward and reliable solution for probing.

The z-probe modification replaces the steel pins with zinc-plated, steel stand-offs, which lets me clamp on wires for an electrical connection. Since the spheres are also conductive, the entire assembly then becomes a limit switch. If any of the spheres loses contact, the circuit's broken, and so the end result is wired to the printer in the exact same way as my prior limit switch setup.

On the printer:

Theoretically, a kinematic coupling makes exactly 6 contacts, 1 per pin/sphere interface, so it should be fairly precise as to when contact is made. In limited testing (ie. me running G29 and G30 multiple times), it appears I'm getting a repeatability of 0.01mm or less. For my setup, that's better than my previous limit switch setup. I had been a bit concerned that I might get some undesirable variance from not knowing which sphere would break contact first.

When all 6 contacts are established, there's a resistance of ~100 ohms across the entire coupling. I don't think I've (yet) seen any false readings due to high resistance while the contacts are made, though I've run across some cases where momentary tension from my cabling and bowden tube was enough to perturb the hotend and break contact.

As is, this setup is at the very least a more convenient z-probe, and in my opinion, a more accurate one, since I shouldn't ever have to worry about calibration or measuring offsets. I'm a bit curious if I can use this to probe existing parts as a means of continuing prints or printing on top of non-printed objects. That's something that I don't think existing z-probe solutions handle all that well.

Update #1: Looks like PRZ also previously implemented this same probe setup w/ similar results

Update #2: The Repetier 0.91 firmware I was running has a built-in safety that checks for the z-min endstop during standard operation, including all move operations. I suppose this was done intentionally for the cartesian-style gantry printers, since the delta typically doesn't have a z-min. Due to the sensitivity of the probe, it could trigger mid-print, which freezes the z-tower, resulting in a visible layer shift.

To resolve this, in motion.cpp, I looked for Printer::isZMinEndstopHit() and commented that check out. I suppose it'd also be possible to just turn off the ALWAYS_CHECK_ENDSTOPS tag, but I wasn't sure if that would cause issues with the max endstops.

Update #3: In addition to PRZ, looks like D-tek also proposed this type of probe, which apparently is known as a Renishaw probe, the key difference being that they use springs, whereas my implementation uses magnets. For this particular application, springs may in fact be a better choice, since less force is required to trigger the probe.