Jump to content
Ultimaker Community of 3D Printing Experts
Daid

Inside the Ultimaker 3 - Day 6 - Active leveling

Recommended Posts

This is day 6 of "Inside the Ultimaker 3", Active leveling.

 

-

 

 

Other days:

Day 1 - GCode

Day 2 - Remote access part 1

Day 3 - Remote access part 2

Day 4 - Electronics

Day 5 - Developer mode & Linux/Systemd

 

-

 

 

Today we will talk a bit about out feature called Active leveling. This feature has been called (incorrectly) Auto bed leveling internally for a very long time. So excuse me beforehand if I slip up and call it wrong.

Why do we not call it Auto bed leveling? Because it's not. We do not level the bed, the bed stays where it is. We compensate for a tilted bed.

 

Active leveling

First off. What is Active leveling, and why do we want it?

The initial task of Active leveling is automatic bed height and tilt/skew calibration. In the Ultimaker 2 you have to manually setup the bed start height and manually set it straight. While this process has been made as painless as possible, it is one of the things that is extremely important to get right to get the highest success ratio in prints.

So for the Ultimaker 3 we have build Active leveling. This is a special sensor that measures the height of the bed at 3 set locations and then knows how much tilt/skew there is in the bed, as well as on which height to start printing.

 

-

 

 

Next, we use this feature for a second piece of calibration. We use it to know the height difference between hotend 1 and hotend 2 as well. Manufacturing differences here can be more then a layer height, so the more accurately we know this difference the better print results we will get. Else we are printing hotend 1 on a different height then hotend 2.

We provide the option to calibrate this by hand as well. However, this is very hard to get right, and I personally do not trust myself to do this properly.

 

Active leveling - Start height and tilt/skew

As I shortly explained, we measure the bed on 3 points. Two points at the front and one point at the back. This gives us with 3 slightly different heights for each location on the bed. With these 3 points we assume the bed is a straight piece of glas and calculate the start height and tilt/skew with these 3 points.

Now, how do we use this data? And this is where some people have their concerns. We use this to only move the bed up and down to compensate for the skew/tilt of the bed. We do not rotate the whole object. And we apply this compensation for the first 10mm, then we gradually stop compensating after 20mm of printing height.

So, in theory if you print a cube, and look at from the front your object will look like this:

Day6-1.png.85d81339e8fe0d54f666ca453ebe9d18.png

Random person: Daid HOW CAN YOU DO THIS TO US?!?

Daid: Because I'm evil. No wait. Because we are exaggerating.

If I take the worst case skew that I can introduce into an Ultimaker 3, across the X axis is about 5mm. This is over a length of 220mm. So, if we put the picture into the proper scale, it looks like this:

Day6-2.png.a4ffec02457f66ecd38c25087eb211a3.png

So, we can still see for a bit that the bottom is skew. But, let us play a little game. I rotated this cube. Tell me what the skewed side is, without using measuring tools. As you can identify the skewed side on the unrotated picture due to the fact that pixels are also square.

Day6-3.png.a6f99cf96ea3245a133e3d351db9e9ff.png

Still think our simple skew correction is so bad? And remember, this is a worst-case-scenario. As the beds come manually leveled from the factory.

I hope this changes some minds about this correction method. Else, you can still turn it off, use manual leveling. This disables any skew correction. The real question here is, do you want your print to fail, or do you want your print to be slightly (almost impossible to see) skewed.

 

-

 

 

The two reasons for not applying a full skew/tilt is that it does not help with printing quality to keep moving the bed. Moving the bed also adds noise. And, we could potentually move the print head into the side of the printer then (thus reducing the effective build volume).

A bonus reason is that the code is simpler. Which makes it easier to test.

 

Active leveling - Difference between PrintCore 1 nozzle and PrintCore 2 nozzle

This is quite simple and obvious. We measure the two nozzles at about the same spot. But not exactly the same spot. This is because residue from one nozzle could prevent the other nozzle from properly detecting the bed height. Especially with materials that have vastly different processing temperatures.

We store this difference. Simple, effective, the machine applies this difference when the active hotend is switched. Not much more to say. You don't need to account for this from GCode. It's quite transparent.

 

Active leveling - The measurement

Now. Let us get down to the actual measurement. During the development of this feature we had one important requirement. We want to know when the nozzle is at a certain distance of the print bed.

Other printers, for example PrintrBot are using industrial capacitive sensors. Example: https://printrbot.com/shop/auto-leveling-probe-2/

These have a sensing distance of 10mm. And thus can be mounted above the hotend and still be used to measure the height of the bed.

 

-

 

 

There are just a few problems with it. For us, it's large. It's about the size of a PrintCore. So that part we didn't like. It also has a different problem. You need to calibrate them. The actual specs say that the sensing distance is 10mm +-10%. And you also have a mounting difference from machine to machine. And, to add an extra variation, the sensing distance has an EXTRA +-10% depending on temperature. Which isn't a very good thing next to a hotend.

 

-

 

 

Now, we didn't want to exchange 1 manual calibration step for another. So, we build our own sensor, still based on capacity. Capacity is actually the ability to store electric charge. How do we use this? We measure how much charge we can store between 2 electrical plates. These plates are:

 

  • The bottom of the print head
  • The alumimum plate of the print bed

 

You can store a tiny electric charge between this. Really tiny, I wouldn't even know how tiny. But we have special chips to measure this. And, the amount of charge we can store depends on the distance between these two metal plates. That is good. However, the charge also depends on... just about anything else, temperature and humidity levels are quite big factors for example.

So we are not there yet. As we still do not have a way to detect a set distance between the nozzle and the print head. We just have a measurement that corrosponds to the distance between the bottom of the print head and the bed.

 

Active leveling - Touching the bed

So, we touch the print bed with the hotend. We actually slightly push on the print bed with the head. Before we hit with the nozzle on the bed the bed keeps moving towards the print head. When the bed hits the nozzle, the bed deflects a bit and so the distance between the head and the bed no longer changes. So we actually look for this lack in change. Slightly crazy? Yes. Accurate, hell yes.

Take a look at this graph:

Day6-4.thumb.png.ac4fe5a5215b70ac0630492d580c68f2.png

The blue line is the position of the bed, the red line is the reading from our sensor. It does not take much brain power to see where the change point is. The graph before the change point is clearly a 1/X, and after that is close enough to be linear. Calculating the intersection point of that and then the corrosponding bed height value is just math. And math is easy...

 

Active leveling - How to make it fail.

While this measurement can be really accurate. However, it has pre-conditions to really work well.

 

  • Blobs of material on the nozzle. The nozzle is heated during the measurements so small amounts of filament do not effect the measurement. But large amounts will.
  • Vibrations. If the bed is viberating during the measurements, it will add a lot of noise on the sensor reading. If your printer is on your washing machine, better not use active leveling.
  • Fan cover not properly closed. While the design has been improved on this area, you can have problems with active leveling if this fan bracket isn't closed all the way. This because the sensor is attached to this bracket.
  • Hands. The sensor is very sensitive. It which means it is also very good at detecting hands. If you hold your hands in the machine during the leveling you will most likely disrupt the process. Also, touching the top of the print head, specificly the screws, you cause it to fail. So no touching!

 

 

Active leveling - The future!

We have learned a lot more during the development of this feature. Silly things like, glass isn't straight. Your 8mm axis are not 100% straight and add some problems for a perfect first layer as well. Now I know why printing with that first layer of 0.1mm is really difficult to impossible.

 

Closing words

I hope this clears up our Active leveling implementation a bit. See you next time. And post your questions!

 

-

 

 

 

-

 

 

Disclaimer: Any information presented here could be wrong. I did my best to proof read everything, but it could confict with the actual behavior of the printer.

Day6-1.png.85d81339e8fe0d54f666ca453ebe9d18.png

Day6-2.png.a4ffec02457f66ecd38c25087eb211a3.png

Day6-3.png.a6f99cf96ea3245a133e3d351db9e9ff.png

Day6-4.thumb.png.ac4fe5a5215b70ac0630492d580c68f2.png

  • Like 7

Share this post


Link to post
Share on other sites

Thanks for this insight and thanks for spending your time to write this articles :-)

 

You'll be surprised how many people inside of Ultimaker are thanking me for these as well ;-)

As we where growing quite fast during the development of the Ultimaker 3, not all knowledge is as well documented and shared as you would like.

  • Like 1

Share this post


Link to post
Share on other sites

I would be curious to know more about the limits of the sensing solution specifically thermals. All my UM machines eventually become enclosed and I expect i'll be building hood and door before too long for the UM3. Is there any electronic parts in the hot end to worry about with elevated temperatures?

During development did Ultimaker look at the TI FDC1004 for sensing proximity? That solution claims to compensate for some of the variables you mentioned for example temperature.

Share this post


Link to post
Share on other sites

During development did Ultimaker look at the TI FDC1004 for sensing proximity? That solution claims to compensate for some of the variables you mentioned for example temperature.

 

Taking 1 factor away doesn't solve all the others. We are currently looking into improving the last 10-30 micron of the measured distance. Pretty sure no amount of compensation is getting you that kind of resolution.

(Note, I'm not an electrical engineer, I could be wrong on some details)

Share this post


Link to post
Share on other sites

My formal education is electronics engineering. When you described what your were doing that IC was what popped into my mind and it compensates for more than just temperature.

I don't work for TI and have no skin in the game aside from using UM fine printers.

BTW your software is what attracted me to UM initially.

Share this post


Link to post
Share on other sites

@Daid: Thanks again for these posts!

@SandervG: Is there a way to pin these golden posts on the sub-forum? It would be a pity if these get buried after a while. If not - then I hereby submit a feature request for highlighting great posts :)

 

Well there lies a challenge in these posts, for the same reason Daid adds his disclaimer.. these might get outdated due to software of firmware developments. I don't know if Daid wants to be held responsible for keeping the info up to date?

On another note, I do have an idea on how to highlight the most important posts. And I can see how some, which might be less prone to quick changes, of these posts find a place there.

Share this post


Link to post
Share on other sites

Clicking are from Z axis.

It is about active leveling ?

It is trying to compensate ?

difficult to tell, I often get a very soft click click click when it is compensating this sounds different. you can put a bit of tape on the axis at the bottom, so you can see it turning(let the tape stick out in one direction and don't put it too high or it will get crushed by the bed coming down)

also note: compensation happens up to 2cm high in your print, not beyond it.

Share this post


Link to post
Share on other sites

I second making this as some sort of sticky. I asked about this and was pointed to this thread. But finding it on my own was difficult. Also, not sure what to search for back then as I was calling it auto-levelling and that can make a difference.

While the details may change with updates and such, the philosophy makes a good instruction on how things work.

Now, when I change buildplates, I just active level to make sure the glass is good and off I go. I will manually level at various times to just make sure there is no 'drift', but this made me more comfortable with the process.

Share this post


Link to post
Share on other sites

Today I've found an interesting issue (possibly) with auto leveling. After some time I enabled it again because of wobble issues, but now it seems as the Auto Leveling at the begin of a print overrides my manual settings of the print bed.

The back part of the bed was a little bit too high, so after Auto Leveling, during the print of the brim I adjusted the back bed screw so the layer was fine again. But the next time I started a print, after Auto Leveling the brim looked the same way it did before. After 100 prints the back screw is possibly falling off the bed :p

Why does the auto leveling compensate my compensation? Does it have some always applying correction matrix or something else? If yes, why is then leveling necessary at all if it always "does its own thing"?

Share this post


Link to post
Share on other sites

Thats the whole idea of auto leveling to correct your adjustments. During auto leveling it measures the bed position and adjusts for that. So if you keep manually changing it then it will keep adjusting.

If one area is still to close after auto leveling then I would check to see if you glass plate is flat. You might find it's bent which will cause your issue.

Share this post


Link to post
Share on other sites

Why does the auto leveling compensate my compensation? Does it have some always applying correction matrix or something else? If yes, why is then leveling necessary at all if it always "does its own thing"?

 

Active leveling overrules your manual leveling. The reason for this is simple, the accuracy of the active leveling surpasses the accuracy of our experts at the office.

If you want to use full manual data, you will have to set the active leveling to never.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

[[Template core/front/global/_customFooter does not exist. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]
×

Important Information

Welcome to the Ultimaker Community of 3D printing experts. Visit the following links to read more about our Terms of Use or our Privacy Policy. Thank you!