Improved Tool Length Probe Switch

This relay-like object appeared while shoveling off the Electronics Workbench. Most likely, it started life in the white-goods world, where recurring cost is everything:

Original relay
Original relay

Now, doesn’t that look just like a tool length probe? It’s certainly less hideous than the one that’s been working fine on my Sherline mill, ever since I figured out how to make tool length probing work.

Here’s what caught my eye:

  • Plenty of switch overtravel
  • Nice metal bracket with screws
  • All the vital pieces in one convenient assembly!

Some brute force removed the spring and actuator, a few shots with a chisel broke the adhesive holding the coil in place, and this collection of parts emerged relatively unscathed:

Disassembled relay parts
Disassembled relay parts

Another shot with a pin punch removed the post from the frame. I intended to un-bend the L-shaped feature that held the post, enlarge the hole, and screw it to the mill. Alas, they formed the angle by notching the steel and it cracked when I un-bent it. No great loss.

The two bumps on the frame held the (now defunct) restoring spring. I simply filed those off while cleaning up the broken edges.

Drill a 10-32 clearance hole, solder a cable with a 3.5 mm stereo plug to the switch, add a plastic cable clamp, screw it to the end of the tooling plate, and it’s all good. That’s the butt end of a broken 2 mm end mill poking down from the spindle…

New tool length probe in action
New tool length probe in action

Does it work any better than the previous kludge?

A G-Code routine that displays the Z-axis coordinate where the switch trips looks like this:

(Tool length probing test)

( Initialize first tool length at probe switch)
(    Assumes G59.3 is still in machine units, returns in G54)
( ** Must set these constants to match G20 / G21 condition!)

#<_Probe_Speed> =        400            (set for something sensible in mm or inch)
#<_Probe_Retract> =        1            (ditto)

O<Probe_Tool> SUB

G49                     (clear tool length compensation)
G30                     (move above probe switch)
G59.3                   (coord system 9)

G38.2 Z0 F#<_Probe_Speed>           (trip switch on the way down)
G0 Z[#5063 + #<_Probe_Retract>]     (back off the switch)
G38.2 Z0 F[#<_Probe_Speed> / 10]    (trip switch slowly)

#<_ToolZ> = #5063                    (save new tool length)
G43.1 Z[#<_ToolZ> - #<_ToolRefZ>]    (set new length)

G54                     (coord system 0)
G30                     (return to safe level)

O<Probe_Tool> ENDSUB

(-- Initialize first tool length at probe switch)

O<Probe_Init> SUB

#<_ToolRefZ> = 0.0      (set up for first call)
O<Probe_Tool> CALL
#<_ToolRefZ> = #5063    (save trip point)

G43.1 Z0                (tool entered at Z=0, so set it there)

O<Probe_Init> ENDSUB

( Set up length)

G21                     ( metric units)

(msg,Verify G30.1 above tool change switch, hit Resume)
(msg,Verify blunt tool installed, hit Resume)

O<Probe_Init> CALL

(debug,Initial Z trip = #<_ToolRefZ>)

O100 REPEAT [10]

O<Probe_Tool> CALL
#<DeltaZ> = [#<_ToolZ> - #<_ToolRefZ>]
(debug,Z trip=#<_ToolZ> DeltaZ=#<_DeltaZ>)



Which produced these results:

Trial	Z-axis mm	Delta mm
1	26.376973	-0.000000
2	26.376307	-0.000666
3	26.374976	-0.001997
4	26.376307	-0.000666
5	26.375641	-0.001332
6	26.374310	-0.002663
7	26.374976	-0.001997
8	26.373645	-0.003328
9	26.373645	-0.003328
10	26.372979	-0.003994
11	26.372979	-0.003994

         Maximum	-0.000000
         Minimum	-0.003994
         Range  	 0.003994

Notice that the results have six figures after the decimal point, but they’re really less precise: you’ll find four pairs of duplicates, which seems highly unlikely. I think the values are quantized to about 25 µ-inch and displayed as whatever the metric equivalent might be.

The corresponding plot looks like this:

Probe Repeatability
Probe Repeatability

The trend line is highly suspect, but the slope shows that the trip point gets lower by one wavelength of violet light (393 microns) per trip. The total difference is a whopping 0.004 mm during the test, call it 160 millionth of an inch.

Both of those are better, by roughly a factor of two, than the previous probe switch.

Bottom line: That’s OK for the sort of machining I do… ship it!

9 thoughts on “Improved Tool Length Probe Switch

  1. Ed, try a leaf switch instead. Use one that has thick blades. I expect better repeatability.

    1. I expect better repeatability.

      If it got any better, I wouldn’t be able to measure it!

      Right now, the total variation is far less than the Z-axis backlash, repeatable to within a few quarter-steps, and definitely Good Enough.

      Part of my motivation for using these crappy switches is to find out just how bad they really are. The bottom line seems to be: they’re pretty good!

      The only qualm I have is that the plastic button will eventually develop a dent from being poked with sharp cutters; I’ll probably file it down a few times before concluding it’s beyond repair. The alternative seems to be having a button that’s hard enough to chip carbide cutters, which I definitely don’t want.

  2. Ed, it seems like you could use a bit of aluminum or other soft metal with an insulator separating it from the bed and use the machine it’s self as a switch assuming there is a conductive path between your bit and the table or whatever portion of your machine you are using as the contact for the other side of the switch. the bonus is you could mill the aluminum whenever it gets pitted.

    1. It turns out the spindle bearings have a nearly perfect insulating layer of oil in there: there’s no DC path from the Z-axis machinery to the spindle!

      I really, really wanted to just have a wire from the motor mount, but … alas, it wasn’t to be. The prospect of having to remember to clip a lead onto the tool bit before probing just wasn’t attractive.

      So it goes…

Comments are closed.