About automatic bed leveling...

About automatic bed leveling…

At the start of my time as a working engineer, I read Butler Lampson’s “Hints for Computer System Design” and one bit that stuck (paraphrased):

" Only end-to-end checks matter - everything else is (or should be) an optimization. "

(If your history goes back to the ISO/OSI network model, this is a rich analogy. For anyone more recent, the OSI model was horribly over-complicated, though not completely obvious at the time. Modern networks are more direct.)

In the case of bed leveling, the end-to-end check is when the nozzle touches the bed. Everything else is indirect, and subject to error. Not inductive sensors. Not a limit switch at the remote end of the print bed. Not a mechanical switch possibly aligned with the nozzle.

At some point in reading about other’s experiments with 3D printers, ran across someone who had done exactly this … but I cannot now find the reference.

The exact end-to-end check is to detect when the nozzle physically touches the print bed. That means some sensor (limit switch?) to detect when the nozzle makes physical contact with the bed.

Could put the print-head on a spring, backed by a limit switch. Not keen on that, as printing forces might move the head vertically. Could use a servo(?) to unlock the head assembly when checking limits, and lock when printing. Maybe. (Might be much the same problem as swapping tool-heads, or not.)

Any reference to using physical contact of the nozzle with the bed?
http://web.mit.edu/6.826/archive/S99/00-Hints-for-computer-system-design.pdf

Hackaday had a post where they used a sensor that detected vibrations, and vibrated the nozzle and detected those vibrations on the bed.

Most nozzle detection systems suck. I have a number of lulzbot Taz6s at work, and we constantly have issues with the auto levelling. They use an electrical contact type.

There were others who tried pressure sensors, which have repeatability issues or temperature limitations.

The nozzle tents to build up gunk, carbonization or oils. It’s a terrible way to sense.

@Stephanie_A The gunk on the end of a nozzle is a concern, but we can wipe the nozzle (as we might do manually). Might even mount the wiper on the same frame as the head (so fixed relation).

Not wanting to re-invent the wheel, if someone has already explored this question. Crudest version that comes to mind is using a servo to unlock the print-head, so free to move against a spring, and a limit switch to detect bed contact.

mechanical switches are noisy and the contacts will probably change shape with temperature.
I seem to recall one person talked about using a strain gauge. Somebody else had a floating stick with a magnet that triggered a hall effect device [and maybe a servo to lift the stick up further when it wasn’t being used but my memory is foggy on that detail].

I remember an interesting system using piezo electric probes under the bed. they revealed exact moment of impact of nozzle to the bed. But seems that piezos are not so easy to implement in this application. Here one video https://www.youtube.com/watch?v=Zn9X-WGBuvQ

We are investigating strain gauges :wink: I got some of those piezos and, ya… needs work but it’s interesting

I have seen a Kossel where the sensor was positioned under the hotend. It had a fixed size that was programmed into the firmware.

Every sensor will be subject to error, even a sensor that uses the hotend (be it a tiny error). Therefore the first thing that needs to be establish is what is a acceptable level of error.
With the tolerances in the 3D printers we have i suspect you’ll find that the error in most if not all sensors used nowadays is well within the limits of what is acceptable and will have little to no impact on the print quality.
Then a more important aspect - for me at least - is the ease of implementation of the sensor. Having tried a few different methods (Microswitches, FSR et.c.) i ended up with a bltouch which is very easy to install and although it has a 20mm offset from the hotend results in a perfect first layer after delta and grid calibrations.

Just a very rough thought but what about a two stage process where we first level with a normal sensor and then verify the correct height by printing a short 3 line test pattern and then control that by an optical approach based on opencv with an openmv can module. If it gets squished we see that and correct and if its too far away we also can adjust for that.

There is a way to do it “sensorless”. Use stepper motor back emf and miss step detection. For example trinamic have stepper drivers where you can control the current and can sense a miss step. So the theory is you reduce current to the bare minimum required to move the head down in Z and hold. You then move down slowly towards the bed, full steps at a time (not microsteps). As soon as the stepper miss steps, its hit the bed (or another immovable object). You then increase the current, retract, move to next point and repeat. This is the theory. It should work. There are no controller boards with the necessary stepper drivers or control over them to do it.

After playing around with a variety of sensing mechanisms I always come back to the same thing. Build it right, manually calibrate, done. It is the only way that I have found to be accurate, robust, repeatable, etc. It just works. It avoids pretty much every problem that has been described thus far and should take no longer than a few minutes to do. Once set it should not need to be adjusted until the user alters something that adversely effects the existing calibration. Every other method is a hack to get around the fundamental inadequacy of your physical structure. My personal opinion is that too much reliance is placed on software fixes for hardware problems, and this is coming from a programmer.

@Daryl_Bond For a Cartesian, yes. For a delta, not so much. Manually calibrating a delta takes an hour if not more. With a probe it takes a minute…

@Johan_Jakobsson Yes and no, I have had a delta and I agree with the manual calibration taking a while the first time. But, that should be a once off operation. I have no problem with people using auto calibrate, go for it, just realise that you shouldn’t have to run it every time you press print.

@Steven_Johnson back-emf stall detection only works at moderate to high speeds. No good for creeping a nozzle probe. And it only tells you where you are within 1-2 full steps of precision, which isn’t adequate for Z probing.

On the reprap forums there are lots of people using a piezo sensor in the hotend mount, with apparent great success. You can order kits, I’m trying it soon. I agree that using the nozzle itself to detect the bed (without any kind of offsets etc) is best. I hope that the piezo solution works well, it seems like it would work but the implemention is tricky due to the nature of piezos.

@Preston_Bannister some techniques that have been used:

  1. 3 FSR sensors under the bed, which detect force exerted by the nozzle on the build plate
  2. FSR sensor on the effector with the hot end mounted on a hinge/lever so nozzle force transfers to the FSR
  3. Floating nozzle on a spring, with a magnet and hall sensor for height detection (Makerbot 5th Gen line)
  4. Hot end mounted on an electrically-conductive magnetic kinematic coupling that breaks a circuit when the nozzle force overcomes magnet force and unseats one of the coupling balls from either side of its groove
  5. Electrically conductive nozzle that hits a conductive bed target to complete a circuit (can the bed mounting frame)
  6. Electrically conductive nozzle and detachable 100um feeler gauge attachment that mounts on the the carriage and hangs down below the nozzle then is pressed into the nozzle upon bed contact to complete a circuit (unreleased Makerbot product)
  7. Piezo sensors (commercially available)
  8. Strain gauge built into a PCB effector plate (commercially available w/ Duet)
  9. Accelerometer that measures the impact when the nozzle strikes the bed
  10. Ultrasonic acoustic contact sensor that registers a change in resonant frequency when the nozzle contact the bed

So many different attempts at it, but out of all the printers I’ve used, the makergear m2 with screw bed levelling and single motor for z has been the most reliable and consistent. Sure if you remove the hotend you’ll need to re-level the bed, but it takes 30 minutes max including calibration prints. Versus the thousands of failed prints I’ve had on the Taz6 and countless hours spent watching the beginning of each print to ensure auto levelling succeeded.

@Stephanie_A I don’t personally put Z probes on Cartesian printers, although it would be nice to not have to adjust Z height when I change build plates or nozzles. The idea I have for that is to mount a Z endstop switch on the Z bed stage off to the side of the bed, at a height equal to the bed height (eg the bed fits under a rigid edge clip to register it at the same height as the switch) and then have the switch run into the nozzle during Z homing.

For Deltas, if you EVER work on or upgrade your printer, or use different build plates for different materials, Z probing is a godsend. I’ve manually calibrated my deltas enough times, and I’m done doing it now.

Checkout ultimaker 3 leveling. Pretty clever use of capacitive charge

To be clear, the direct end-to-end case is when the physical nozzle makes mechanical contact to the physical print-bed. If we can detect that accurately, then every other solution is inferior.

Not interested in capacitive, inductive, resistive, or enlightened psychic indirect sensors - if we can make direct mechanical sensing work in this case.

Yes, I am sure that all the other solutions can be made to mostly-work, much of the time. Or not. This is a physical problem. The end concern is the physical placement of the nozzle, relative to the bed. Not else.

Seems the (slightly fossilized) RepRap wiki has a relatively fresh page on the subject of Piezo-electric sensors. If we can get (effectively) zero-displacement of sufficient accuracy, that might be the optimal solution.

http://reprap.org/wiki/Piezo-electric_sensors

Wadding through… :slight_smile: