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!