tl;dr: thermal expansion ... and skipping steps upwards?
Wringing repeatability from this counterweight-less cheap-motored Z axis redesign has stalled me for a while.
Here's why I'm still trying:
Microns. That shows <10 μm variation for 720 Z probes over three hours. Each ~1 hour block of 240 touches starts with a long up/down excursion. Indicated steps alternate between 1 and 2 μm because the actual microstep size is ~1.5 μm. The three downward spikes are the first touches after the long excursions and could be avoided by adding a small up/down hop after long up/down moves.
Other than those avoidable spikes, and a ~5 μm drift over ~20min (~80 probes) in the second hour, that looks like micron scale repeatability over usefully long time spans and cycle counts. Relative to a target of maybe 25 μm variation (match X&Y full step), that looks very encouraging and worth pursuing.
That 3hr stretch of wunnerful repeatability is cherry picked from data like this:
...preceded by a bunch of manual data collection, preceded by a bunch of random thrashing trying to figure out what's the deal.
- The two graphs show about 30k points ((9k + 6k) x 2).
- Both are discontinuous;
- the first more so than the second.
- Only the one large-ish gap in the first graph represents elapsed time between sampling runs.
- Red/lower points: touch down/make contact
- Blue/upper points: lift off/break contact
- I can guess at causes for some but not all of the variation of difference between the two
Generally, I've been seeing that short term repeatability can be, and often is, very good -- and long term repeatability can be, and sometimes is, acceptable (relative to a target of 25 μm which is somewhat arbitrary but comparable with the full step stride of the X&Y axes and aimed at cutting just through ~35µm nominal thickness of 1oz copper cladding that isn't flat).
Some of the runs in the first graph show strong similarity in fine structure:
I've pretty well convinced myself that the wiggles in the initial downward slope reflect non-uniform microsteps. The distance/step cycle runs through two full steps. At least two of the 28-BYJ48 motors I've look at -- closely enough to notice -- show significant asymmetry between even & odd full steps. Haven't dug into that much yet, but for now I'm counting two full steps as the practical resolution of these motors. In the latest rev. I've shrunk the pulleys again to make two full steps move about 25µm for parity with the X & Y axes. (Finer string -> more turns fit -> less motivation for big pully diameter; more about string below.) These data were measured with 8x µstepping which is where the 1.5µm steps come from. While that's impractical "resolution", I'm much surprised that this marginally constructed device actually distinguishes single µsteps at ~16k steps/rev. While kinda neat, that's not really useful and as of right now I've dialed that back to half-stepping (~6µm/step).
Apart from the finer wiggles, I think the general trend looks like different parts heating up differently. I'm guessing that the fast initial slope reflects the pulley heating quickly. Then the slower up-slope reflects the XY table growing taller as it heats up less quickly. That's a little less speculative because I can test that by unplugging the X&Y motors. The second-to-last spike-drop-slow-rise in the first big graph dropped like others then turned back up less quickly with the XY motors unplugged, which seems to corroborate that idea. The fact that there's still some slower exponential-like change happening suggests something else warming up. I'm guessing that it's the bulk of the Z axis heating up. Maybe changing the relationship between the stepper axle(s) and the tool clamp. ?.
Anyhow, this kinda sorta validates the idea that the Z probe data reflect smaller and larger parts heating up quickly or slowly:
The yellow line is the sum of two exponential curves -- one faster and one slower. The gap reflects the time span of uncollected data.
The horizontal lines on that last graph above mark 25µm intervals, which is the variation I'm kindasorta aiming for. From my "artist's interpretation" curve fit, it looks like the longer time constant is about 45 minutes. That suggests that letting the machine sit for some small multiple of 45 minutes with the steppers powered would get well within 25µm of dimensions at eventual thermal equilibrium.
Not indicated there is the further effect of the "spindle" (dremeloid) heating up too.
The first big graph includes several temp cycles; the second big graph reflects longer kinda-continuous heating.
I think some of the trending in the first big graph correlated with room temperature.
So maybe something like...
I've been trying this idea: let the machine sit with the spindle running, room closed (doors/windows), and the XY table scanning back and forth across a diagonal similar to the extent of planned work at the planned XY feed rate, for a sufficiently large small multiple of whatever the long time constant turns out to be. Then probe/map the surface (because Z precision motivated by milling copper-clad board) and start a job.
Scripting gcode to loop scanning X&Y was reason to get after a >25-year-old to-do item: learn some expect (beyond most trivial use).
There there's yet more other stuff...
Z hoist cord material
For a first try, I used the same white, three strand, probably-nylon cord that I've been using for the tool clamp. That gave the first encouraging result of close-enough-to-uniform 50 µm Z steps milling a small part.
While that finish cut sequence of starting at the top and stepping down demonstrated adequately holding a constant Z between equal increments down, it didn't really challenge repeatability of moving away (up) and returning to the same point. While that stuff showed pretty good short term repeatability for small motions, I was getting pretty random results from longer moves (higher Z lift). Like, more than 100 µm variability but I don't think I kept any numbers. Then I tried heavy carpet thread to see if that would be more consistent. It was, but not really convincingly so. But then there was other stuff going on that I didn't understand (see above) too, so: inconclusive.
For a different project idea a while back I looked for the lightest/thinnest Spectra® (UHMWPE) cord and found some 0.5 mm < d < 2 mm options sold for kites and spear/bow fishing. That didn't go anywhere and I didn't buy anything then. Looking again this time I discovered "braided" fishing line. Fishing people ("anglers" but does anyone other than anglers know what "angler" means?) use braided Spectra®/Dyneema®/generic UHMWPE cord with diameters down to less than 0.1mm. Prices at the nearest sporting goods monger were essentially flat up to 50lbs tensile strength before ramping up significantly for stronger/bigger line. So I picked up a reel of 50lbs-rated braided Spectra cord with nominal diameter of 0.36mm. Woot. Because neat.
That eventually looked like it would work well enough (first big graph). While the per-unit cost of enough of that is nearly nothing, the retail cost of >100x the needed length becomes the most expensive item in the BoM. So I went back to trying the carpet thread again. It kinda looked like that would work (second big graph). But...
Skipping steps - the wrong way
After much (muchly much) futzing, I've lately convinced myself that the Z stepper shaft(s) rotation is in fact actually drifting out of sync from where Grbl thinks it is. For now I'm believing that Grbl is doing the right thing with step pulses and not accumulating asymmetric rounding or some such subtle evil.
The weight of the Z axis hangs directly from the output shaft(s) of the lamest of geared steppers. Missing steps would be no surprise ... if the axis was drifting down as a result of missing upward steps. How does it miss downward steps and drift up?
I have half an idea what might be happening, and a couple of ideas to try...
...and so it continues. Bah.