Heightmap, BLTouch and First Layer height
-
@3dreamer I think the main thing you are assuming is that in order for the mesh grid compensation to account for a dip in the bed that goes below the z=0 position you must set M208 Z to a negative value. This is not how it works however. The only time you would set M208 to a negative value is when first measuring the trigger height in case you can't lower the nozzle enough. But after that first measuring step you don't need to have M208 negative.
Here's my procedure for setting trigger height and ensuring a good first layer.
-
Mechanically level the bed by moving the nozzle to the 3 adjustment screws around the bed. one of them is the reference point and doesn't change. That;s my z=0. The other 2 screws are adjusted until the nozzle just touches the bed at z=0. I determine this visually. I can get close enough and even enough to see daylight between the nozzle and bed. Helps to have a bright light behind. No paper gap. With 0.02 movement steps it's easy to get it just touching.
-
Trigger height is measured at bed center, same location as where Z homing is done. Again I touch the nozzle to the bed and reset G92 Z0. If I can't lower the nozzle enough to touch the bed I send G92 Z5 to trick the firmware into thinking it's higher than it is. No need to change M208, though that is an option. M564 S0 to allow axis limits to be ignored is another option. When the nozzle is touching the bed, send G92 Z0 and then G30 S-1 to get the trigger height. Repeat a few times and take the average result.
-
Mesh grid compensation routine is run to map the bed. Height map is loaded automatically at startup in config.g
-
I print a test file that covers the whole area of the bed with a 2 perimeter path. If my e steps and extrusion factor are calibrated and the z height is correct, the 2 walls should be touching and fused nicely and should be consistent across the whole surface. While it's printing if it looks too squished or too high across the whole surface I will use baby stepping to fine tune it until it looks just right. If some parts are high and some parts are low, I would go back and look at my heightmap. In my case it appears to be too squished everywhere across the bed and I raise the nozzle by 0.1mm baby steps. So I go back to the G31 and subtract 0.1 and print again. This time it prints perfect. Z height is calibrated.
Extrusion factor must be calibrated, because it's easy to mistake over extrusion on the first layer for printing too close. You can verify this if the first layer looks perfect, but then the other layers look under extruded.
By using a visual contact method for setting Z=0 you don't have to take any paper gap or other offset into account. But even if you do use paper to measure, you can fine tune the first layer height with baby stepping.
-
-
First off all, thank you dc42, Leblond and Phaedrux for your precious information
Unfortunately the matter appear not really clear to me, I'll try to test your tips and let we see the results
@dc42 said in Heightmap, BLTouch and First Layer height:
If the GCode tells the firmware to put the nozzle at Z=0.2mm and the M208 X lower soft stop is 0.2mm, then it will go to Z=0.2mm. But if you change your mind and decide to print with 0.1mm first layer height, you had better reset the M208 soft stop to 0.1mm or below.
The M208 soft stop is a limit, not a Z offset.
My tests seems to say a different thing!
I have set a Z value for M208 that, when I command the print to go to Z zero, the bed go up and stop when the bed-nozzle gap is about 0.2 mm.
When I print with a gcode that contain the instruction G 0.2 (because, for ex. I have set the first layer in Simplify3D to be 0.2mm height), the nozze go physically to 0.4 mm from the bed! I have measured it with gauges.So... who's right? Are you right and my printer is an anomalous machine or are we right and we are missing some key point in this matter?
Thank you so much!
Mark. -
How are you homing Z? It sounds like you have a 0.2mm error in your Z homing position.
-
@dc42 said in Heightmap, BLTouch and First Layer height:
How are you homing Z? It sounds like you have a 0.2mm error in your Z homing position.
Homing is achieved moving the print head and the bed toward some limit switches. For the bed, this switch is positioned at the bottom of the area that accomodate the vertical movement of the bed.
So when the bed trigger this switch, the interface indicate a big Z value , exactly the same set in M208 Z Value.So my M208 Z value indicate to the system how maximum the bed can go up toward the nozzle, starting from this switch. Thus, when the bed will arrive at it's maximum height, the system will consider this situation as my GCode Z zero. At this point the true physical distance between the bed and the nozzle will depend by the bed surface, the nozzle form factor, and obviously by the M208 Z Value that I have set.
I can print objects up to 450 mm height, so If I set the M208 Z value at, for ex., 200, my GCode zero will correspond to a physical distance between the bed and the nozzle that is about 250mm!
Thank you,
Mark. -
It sounds to me that your M208 S0 Z value is 0.2mm too small.
-
@dc42 said in Heightmap, BLTouch and First Layer height:
It sounds to me that your M208 S0 Z value is 0.2mm too small.
Not necessarily, because is a personal choice and the important things is to know what's happening.
As far as I know, considering the obvious deformation of the plane, virtually we would need a specific M208 Z value for each point of the bed itself, but...
The key point of this thread is to understand how to free yourself from the M208 Z value (or some other global values) to achieve the desired first layer height, and use the “HeightMap.csv” informations to obtain a COSTANT, TRUE and SPECIFIED first layer height on all your plane (optimized steps and extrusion factor are a requirement, obviously.)
Still searching for clear instructions or guides
P.S. I know that for the 99% (?) of the users the first layer is just the foundation of their printed model, but for me the first layer IS the model, thus the search for precise control on what's happening.
-
@3dreamer said in Heightmap, BLTouch and First Layer height:
Not necessarily, because is a personal choice
Maybe you think you can define 0.0 == 0.02 as a personal choice, but that makes your printer incompatible with the GCode that your slicer generates. Z=0 must mean the nozzle touching the bed. You can make a personal choice that you won't actually allow Z=0 to be reached, because you will set Z=0.2 as the minimum allowed by the M208 S1 command.
-
@dc42 said in Heightmap, BLTouch and First Layer height:
@3dreamer said in Heightmap, BLTouch and First Layer height:
Not necessarily, because is a personal choice
Maybe you think you can define 0.0 == 0.02 as a personal choice, but that makes your printer incompatible with the GCode that your slicer generates. Z=0 must mean the nozzle touching the bed. You can make a personal choice that you won't actually allow Z=0 to be reached, because you will set Z=0.2 as the minimum allowed by the M208 S1 command.
What you write is correct.
I can control the situation by this way: if I set Z=0.2 as the minimum allowed by the M208 command, and I set (in the slicer) the first layer to be 0.2mm, I'll put (still in the slicer) the Z value in the "Global GCode Offset" to be -0.2.
So my gcode file will contain, as the first Z instructions, G1 Z0.00, and the nozzle will start extruding from a true physical distance that is 0.2 mm, matching my needs. -
@3dreamer said in Heightmap, BLTouch and First Layer height:
@dc42 said in Heightmap, BLTouch and First Layer height:
@3dreamer said in Heightmap, BLTouch and First Layer height:
Not necessarily, because is a personal choice
Maybe you think you can define 0.0 == 0.02 as a personal choice, but that makes your printer incompatible with the GCode that your slicer generates. Z=0 must mean the nozzle touching the bed. You can make a personal choice that you won't actually allow Z=0 to be reached, because you will set Z=0.2 as the minimum allowed by the M208 S1 command.
What you write is correct.
I can control the situation by this way: if I set Z=0.2 as the minimum allowed by the M208 command, and I set (in the slicer) the first layer to be 0.2mm, I'll put (still in the slicer) the Z value in the "Global GCode Offset" to be -0.2.
So my gcode file will contain, as the first Z instructions, G1 Z0.00, and the nozzle will start extruding from a true physical distance that is 0.2 mm, matching my needs.I've much the same already, if you need to set a global offset of -0.2 then it is because your homing procedure does not establish the origin of the Z axis correctly. You can home to Z=0.2 if you like, but if you tell the firmware it is at Z=0 when it reality it is at Z=0.2 then of course you will need a global offset, to counteract your error.
Why not use a set of feeler gauges to check the Z accuracy? Home Z, command the head to Z=0.3 or 0.5 or anything else as long as it is higher than your 0.2mm Zmin limit, and use the feeler gauges to check the accuracy of the gap between the nozzle and the bed.
-
Why not use a set of feeler gauges to check the Z accuracy? Home Z, command the head to Z=0.3 or 0.5 or anything else as long as it is higher than your 0.2mm Zmin limit, and use the feeler gauges to check the accuracy of the gap between the nozzle and the bed.
Yes, I'm currently working with feeler gauges.