G30 inductive probe auto nozzle height calibration
-
Automatic nozzle offset calibration is working but not exactly as I wanted.
Quick background: $5 Inductive probes have great 60 second short-term accuracy something like 3um. Turns out time and temperature both change the probe triggering distance and adjusting the first layer nozzle height with baby Z steps gets old fast.
My solution is to calibrate the probe trigger to nozzle height difference followed by probing the bed height. A printed stair with two steps is used for calibration. The height of the printed step is the actual physical probe trigger to nozzle height offset distance.
One issue is I wanted to include the offset calibration in homeall.g but I was unable to probe the bed correctly with G30 after offset calibration. I relocated the probe offset calibration gcode to homez.g which requires a homeall.g before and after probe calibration to correctly set the bed height for the first layer.In config.g the only modified line is
M558 P4 H0.9 A3 S-1 F50 T600 ; probe 3 times and average the results.My modified homez.g below only calibrates the nozzle offset
G31 ; report initial nozzle offset
G1 X14 ; move above low step
G31 Z0.0 ; set probe trigger to nozzle offset to zero
G31 ; report the nozzle offset is 0
G30 ; probe low step 3 times and set average height of trigger events =0
G1 Z5 ; raise nozzle 5mm
G1 X0 ; move above high step
G30 S-3 ; probe then set the nozzle offset height difference
G1 Z5 ; raise nozzle
G31 ; report calibrated nozzle offset
M140 ; report bed temperatureOddly the G30 S-3 only probes once and then sets the nozzle offset.
Also, if after M140 above I add a G1 to move to the bed center and then a G30 to probe the bed, the Z movement is odd with typical error messages like probe triggered before probe move or did not trigger during probe move. It would be nice if this worked so this routine could be added to homeall.g
Result: Repeated continuous calibration produces an offset result that bounces around by less than +-4um. Over 1 hour the result can drift +- 0.1mm however this change is unimportant because the drift is canceled out if the bed height is probed shortly after the calibration. In for a penny, I printed (not recommended) a 50um thick skirt which printed fine but it measured 38um in thickness.
Cheers -Peter
-
@Peter120 said in G30 inductive probe auto nozzle height calibration:
Oddly the G30 S-3 only probes once and then sets the nozzle offset.
Why is that odd? That's what it's supposed to do.
G30 S-3 ; Probe the bed and set the Z probe trigger height to the height it stopped at (supported in RRF 2.03 and later)
@Peter120 said in G30 inductive probe auto nozzle height calibration:
the Z movement is odd with typical error messages like probe triggered before probe move or did not trigger during probe move.
Is the sensor too close to the bed at that point?
-
Hi Phaedrux, honestly I was expecting G30 S-3 would probe three times and average the results like G30 does without the S-3 suffix. The nozzle height measurement error by averaging 2 of the 3 different probe measurements makes this approach substantially more accurate than adjusting Z by eye using 50um baby steps. I built a heated chamber enclosure from a 4x8' clear corrugated plastic sheet $36 Canadian with a $20 Ikea picture frame as a clear plastic door. This resulted in a changing nozzle offset and a big pain.
After many hours of tweaking I could not eliminate the error messages by adjusting Z before the bed probing move or changing the gcode sequence order etc. My guess is a software flag in the homing routine gets in the way of non standard probing.
If anyone plays with this code I suggest probing an empty cardboard filament box placed on the bed as a probing test build surface and have your finger ready on an emergency stop. -
@Peter120 said in G30 inductive probe auto nozzle height calibration:
Quick background: $5 Inductive probes have great 60 second short-term accuracy something like 3um. Turns out time and temperature both change the probe triggering distance and adjusting the first layer nozzle height with baby Z steps gets old fast.
Well if the inductive sensor is at fault get a different one.
I have a 8mm unit with a 2mm sensing distance and it does not exhibit any such changes but it cost more than $5.
Frederick
-
@Peter120 said in G30 inductive probe auto nozzle height calibration:
I was expecting G30 S-3 would probe three times and average the results like G30 does without the S-3 suffix.
Not currently. But I suppose that could be a feature request.
-
Phaedrux I think after a bit more testing the first layer accuracy will be better than +-10um and diminishing returns kick in. The Creality textured glass bed surface has 6um deep holes for first layer grip so…
Hi fcwilt yea it’s not perfect but its reasonably matched to the task. The inductive probe I’m using is the 8mm trigger distance model with an M18x1 threaded body however under the probe I have a 7mm steel ball bearing that physically touches the probed surface. Using averaging the RMS error is 0.003mm powered from the 24V 22A printer supply. It has occurred to me that some power supply electrical noise filtering would improve the trigger stability (another plan B).
I was hoping that you or Phaedrux might know of a software switch so I could merge the homez gcode into homeall.g Not a deal breaker just aesthetics.
For the curious: The step is flipped and printed on its side and the probed surfaces are printed as walls so they can be smooth and have any height difference. Secondly tilt the upper step slightly from the front edge to the back edge so the tilted step probing position provides fine height tweaking of the nozzle offset after the step is printed. Lastly in a heated chamber the filament used needs to have a high service temperature like ABS or something better.
-Peter -
I think I understand the root cause of my G30 issue and the fix is above my pay grade.
I called the homez.g code (above) from homeall.g
The homing behavior was the same, did not work, but I could make small testing changes and think I found the issue.The top step Z height after a G30 S-3 becomes the new Z height starting/retraction reference height for any future G30 probing.
After nozzle offset calibration a G1 Zxxx still can put the nozzle on the bed surface or alternately the probe just above the trigger height, however a G30 raises the probe up away from the bed (the Z probing direction is reversed).
On the other hand, if a G1 lifts Z above the top step height prior to G30, it probes down but it stopped before the probe trigger event.In config.g I increased H in the line M558 P4 H3 A3 S-1 F50 T600
With the altered M558 the probe actually homes the bed correctly with a G30 after the nozzle offset calibration routine (homez.g above). The downside is the probing time is so much longer with the 6mm of slow velocity Z probe movement required to trigger the probe on the bed surface that I will probably not use this fix.
Cheers -Peter
-
Hi,
I've read over everything you have posted and I simply am unable to understand what it is you are trying to do.
Can you explain in simple terms what your goal is?
Frederick
-
Hi Frederick, this is all about heated chambers and printing the first layer thickness correctly. Before I made a chamber, this was never a problem.
The inductive probe trigger distance has great short-term accuracy but it drifts with temperature and in a heated chamber this becomes a pain in the ass. I wiggle paper under the nozzle like everyone but only when I change nozzles.
My previous heated chamber procedure for starting a print was watching the skirt print then canceling the print. Next I remove the skirt, measure the thickness and correct the nozzle Z offset in config.g G31, save, reboot, and now I am ready to print. I watch the skirt and a perimeter extrude before I walk away. I wanted to automate the nozzle Z offset in config.g G31 over all heated chamber conditions.
If you print a block with a height equal to the nozzle Z offset the printed block can be used as a calibration surrogate object. Probe the bed with G30, move the probe over the top of the block and probe the top with G30 S-3 and the difference from the bottom to top of the block is loaded as the new nozzle Z offset value. The block on the heated build surface is a poor position, it will soften plus it needs to be removed by hand before the start of printing. Locating the block off the build surface became the problem. I printed the block attached to a surface that I called a step as in people walking up stairs and bolted the print to the vertical 2040 extrusion. The step height difference is the nozzle offset surrogate block height. In homeall the first G30 zeros Z on the lower step before the step height difference can be measured with a G30 S-3. The next and last G30 probe command was to change the Z zero reference from the step to the center of the bed.
-Peter -
@Peter120 said in G30 inductive probe auto nozzle height calibration:
If you print a block with a height equal to the nozzle Z offset the printed block can be used as a calibration surrogate object. Probe the bed with G30, move the probe over the top of the block and probe the top with G30 S-3 and the difference from the bottom to top of the block is loaded as the new nozzle Z offset value
Well since the size of that block is a constant how does measuring it differ from just using the constant as the Z probe trigger height?
I don't think you can use the Z probe as a measurement tool to calibrate itself.
Any variations in trigger height are going to apply to both the G30 and the G30 S-3.
Or am I missing something?
Frederick
-
Frederick there is one more complicating bit that I am testing, conceptually a playground style seesaw for the nozzle and probe. The nozzle pushes down on the seesaw using G30 which raises the opposite end of the seesaw until the probe triggers. The seesaw hinge point is the G30 S-3 probing location. The hinge location is 1/3 from the nozzle for a mechanical height advantage of 2 under the probe.
Cheers -Peter
-
There is one approach that is sure to work.
Step 1 - Find a way to position the nozzle so it is known distance away from the bed
Step 2 - Issue a G92 Znnn to set the Z position
Step 3 - Issue a G30 S-3
Of course step 1 is the tricky part.
Some folks have used the nozzle as one contact of a "switch".
The other contact is a piece of metal of a known thickness somewhere on the bed that can be reached by the nozzle.
You naturally have to have a wire running from the nozzle and the piece of metal back to the board using a suitable input as an endstop sensor such that when the nozzle touches the metal piece it completes the circuit.
After positioning the nozzle over the metal piece you issue a G91 G1 H1 Z-aaa Fbbb where aaa is a distance sufficient to have the nozzle reach the metal piece and bbb is a speed slow enough to be safe.
Once the move is complete you issue a G92 Znnn where nnn is the thickness of the metal piece.
Now the G30 S-3 will be about as accurate as it can be.
Frederick
-
Frederick thanks for the info. It ain't over till the fat lady sings.
I am continuing to test the seesaw and surrogate offset combo. Mathematically I believe this compensates for 2/3 of the nozzle to bed height change caused by the probe trigger distance varying with temperature. Until there is a way of multiplying the results of probing my approach just can’t achieve 100% compensation. But honestly my first print layer is typically 0.3mm and the resulting skirts are measuring 0.23-0.32mm which is about how flat my glass bed is.
Cheers -Peter
-
Some testing observations:
Any plastic protruding down or oozing from the nozzle creates an uncompensated offset error which increases the first layer filament thickness. I clean my nozzle tip manually so currently this it’s not very automatic process.
My next seesaw will have something like a rusty hinge or actually a friction clutch. The evolving idea is the seesaw seat under the probe is pushed up, by the nozzle pushing down on the opposite end seat. The probe triggering halts Z and establishes Z zero. Next the probe is lifted and shifted. The rusty hinge keeps the Z height seat difference set at the Z zero probe trigger. Lastly the nozzle pushing down point on the seesaw is probed. The resulting Z height is the difference between the probe trigger to the nozzle tip. The previous need for a printed calibration offset block is eliminated.
Cheers -Peter -
After lots of testing I am finally ok with this version.
Turns out the seesaw concept is amazingly accurate for measuring the nozzle tip to probe height offset. The resulting measurement produces single digit micron errors. While this level of accuracy is overkill; all elephant foot is gone.I used a ¼”-28tpi hex bolt and with a hack saw converted it into a T-bolt. The friction (rotation brake) results from ball bearing preload. Two belleville washers (cupped spring washers) axially squeeze the inner bearing races together as the nut is tightened which increases the braking force. The nut also secures the T-bolt to the 2040 extrusion. An aluminum pipe is used as a spacer between the 2040 extrusion and the belleville washer.
The seesaw "board" is bent to lower the T-bolt mounting position on the 2040 extrusion.
A paper clip was formed into a ramp that resets the seesaw height for the next offset probing cycle whenever the Y axis is homed.
For cleaning plastic from the nozzle tip, I used a 614 foil from an old Braun shaver (it didn’t have any big holes when I started). This is effective for cleaning plastic from a HOT nozzle tip over a few mm of Z height but it is not fully finished.
Some parts for a previous design that were not used.
Cheers -Peter