Anyone with a RepRap or other 3D printer knows how much of a pain leveling the bed is. To get a good quality print, the bed – the surface the printer prints on – must be exactingly level, and may the engineering gods help you if your surface has the slightest bump in it. [Atntias] is developing a solution to this problem: an auto leveling platform that shouldn’t require any parts at all if you already have a metal bed.
The idea is incredibly simple: Just ground your metal bed, and apply a small voltage to the tip of your hot end. [Atntias]’ code (available on GitHub) probes the surface of the bed and shoots out a 3D mesh of your current bed profile. This can be used as a GCode offset, so the bottom of your print is always directly on the top of the bed.
Although the utility of leveling a bed down to the micron level is of questionable utility for 3D printers, it’s vitally important if you want to mill a PCB on your printer. [Atntias] says his idea is currently being implemented into the Marlin firmware, so it looks like another firmware update is in our future.
Thanks go to [technodream] for sending this one in. Check out the video after the break to see the bed leveling process in action.
[youtube=http://www.youtube.com/watch?v=tKFhiu2a64I&w=470]
While it can compensate for a tilted surface, a bump is still a bump, and so the compensation for that is to work around it. But it is nice to know that the surface is bumpy and where.
I thought the technique of properly laying down an underlying scaffold of build material then having the hot nozzle leveling it in the process compensates for this. For PCB’s a two axis tilt bed or frame can certainly help, especially when routing multiple identical boards one after another.
That technique has some drawbacks, and as printers have improved and people are doing incredibly small layer heights (like .01mm), the drawbacks of that technique outweigh the benefits. So often now people print the part directly on the bed (this is the suggested way of printing with an Ultimaker, for example. I’ve never printed a raft with my Ultimaker in the 6 months I’ve owned it). But now the bed being level is extremely important! Or at the very least, compensating for the bed using a technique like this.
Nice development. Laying down the first layer when you are printing below 0.1mm layer height is a small nightmare, just because the tolerances get that much tighter. This will hopefully help with that.
On the other hand, how will this data be used, will it crumple up the whole Z-plane, so the bumps you have in the platform will come out on top of your model too, or will it even out the compensation in the first few layers?
As noted a “work in progress”, but considerably more work and thought required.
A few points:
Precision leveling is used widely for aligning machine tools. However, not because there is a requirement that they be level. The gravity direction vector is simply a reliable reference. On some submarines during WWII the lathe was mounted vertically to fit available space.To deal
avoid twisting the bed a 3 point mount was used.
Simply put, leveling ensures that the frame is not twisted.
The program described cannot do this. It’s certainly useful as it solves an important practical problem of determining errors in the XYZ positioning systems. But it cannot detect a an error which is common to both the table and the XYZ motion frame.
However, by tracking a differential pressure sensor across the table the deviation of the table from a perfect plane can be determined to great accuracy. Differential pressure sensors w/ a full range of 10″ of water coupled w/ 16 bit A/D will get as close as is practical for most work.
One of the bad habbits we’ve gotten into in the 3D printer community is using the word ‘level’ when we really mean ‘tram’, as in the tool head XY plane and the build platform plane are parallel.
The machine shop usage of “tram” relates to perpendicularity of a spindle to a plane which is a completely different problem that this project does not address at all.
I’ve got a rubber magnet label w/ “In Tram” stuck to the head of my Clausing mill. If I take it out of tram I turn the magnet upside down.
Obviously for important work I’d retram even if the magnet said it was in tram.
There are 3 distinct errors to consider:
distortion of the frame in XYZ
flatness of the table
perpendicularity of the axes of motion
This project only addresses the first. It is “necessary, but not sufficient”. The other two are also essential for accurate work.
Perpendicularity is the most difficult as it absolutely requires a precision square which is neither cheap nor easy to make. A spindle attached to the head could be perfectly in tram, but that would not say anything about whether the XYZ axes of motion were perpendicular to each other nor whether the axis of rotation of a spindle was parallel to the Z axis.
Having never build a 3D printer I may be way off the mark but surly it would be easier to “bolt” a dremel in place of the print head and have it do a run over the bed to level it’s self?
It would only work if the tool bit is very very close to perpendicular to the bed. Otherwise you end up with a sawtooth pattern in the bed. Moreover it would translate errors in the bearings to the bed. On say, a Bridgeport mill with worn bearings and ways, trying this would make the table concave, just like the bearings.
The bed level constantly changes, so you’d have to be cutting it constantly and eventually you’d run out of bed. Also, these machines are nowhere near rigid enough to do any milling, typically, so you wouldn’t end up with a flat bed, you’d end up with a horribly rough surface. Definitely what is shown above is a great technique. Its non-destructive so it can be done many times.
Wire EDMs use the same principle for sensing edges, and picking up the location of holes.
For fussy stuff, we used to have one hole jig ground for me to pick up its location. Provided that I set up the block level, I could get a position accurate to a micron.
I started implementing a possibility of doing a compensation of such probe data in marlin:
http://www.youtube.com/watch?v=5jqsojWzysE
Wow, I never realized a Z-probe was that simple. I can’t wait for the update :]