Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Heightmap, BLTouch and First Layer height

    Scheduled Pinned Locked Moved
    General Discussion
    4
    19
    3.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 3Dreamerundefined
      3Dreamer @dc42
      last edited by

      @dc42 said in Heightmap, BLTouch and First Layer height:

      No. If you tell your slicer to print at 0.2mm layer height, it will position the nozzle at Z=0.2mm when it starts printing the first layer. If you tell your slicer to use 0.3mm layer height, it will position the nozzle at Z=0.3mm t print the first layer. And so on.

      Yes, BUT also no!
      I mean that if your gcode contain, for the first layer, the instruction "G1 Z0.2" then your nozzle will physically elevate at 0.2 mm not from the bed, but from the Gcode Zero position.
      So, if you have set your M208 softstop to bring the nozzle at 0.2 mm from the bed, then you will obtain a REAL first layer 0.3mm thick. This behavior happen when not using/considering an heigthmap.

      (Sorry If I'm using a "didactic" writing, too often articles are badly written, leading to big semantic misconceptions.)

      Actually, to cause the nozzle to start lower when printing, you need to increase the G31 Z value, not reduce it.

      OK, my fault.

      It's usual to set the M208 Z minimum to zero. But when calibrating the Z probe trigger height, you need to be able to lower the nozzle until it it touching the bed (or gripping a piece of paper) even if the current Z position is a little inaccurate. So when doing that you should either set the M208 minimum Z value negative (e.g. -0.5mm) or use M564 S0 to allow axis limits to be ignored.

      I can partially understand you, because:

      • touching the bed or gripping a piece of paper is not the same thing. A piece of paper can be 0.1 mm thick, so you will "start" from different positions.
      • All pieces of the puzzle are clear to understand, but it's not clear how all the pieces comes together.

      So let me understand which can be the correct procedures to use when you want to implement an Heightmap:
      One hypothesis:

      1. Use M564 S0 to ignore axis limits.
      2. Set the M208 Z value at... ?
      3. Obtain the correct G31 Z value by probing some times the bed on it's center.
      4. Obtain an Heightmap trough G92.
      5. Use the obtained Heightmap during print.

      So If this procedure is correct (?) I ask myself how the system is able to know what is the true physical distance between the nozzle and the bed for Gcode Zero? because it is from this distance that the nozzle will elevate when create the first layer.

      Or maybe one can ask: what are the parameters that the system need to know in order to correctly obtain the desidered first layer height on all the plane, using an Heightmap? How to control, on all the plane, the physical distance between the nozzle and the bed, in order to use this distance (ex. 0.1 mm, 0.2 mm, etc.) as GCode Zero?

      Thank you!
      Mark.

      3D Printing new Applications Researcher.

      3Dreamerundefined dc42undefined 2 Replies Last reply Reply Quote 0
      • 3Dreamerundefined
        3Dreamer @3Dreamer
        last edited by

        @3dreamer said in Heightmap, BLTouch and First Layer height:

        I mean that if your gcode contain, for the first layer, the instruction "G1 Z0.2" then your nozzle will physically elevate at 0.2 mm not from the bed, but from the Gcode Zero position.
        So, if you have set your M208 softstop to bring the nozzle at 0.2 mm from the bed, then you will obtain a REAL first layer 0.3mm thick. This behavior happen when not using/considering an heigthmap.

        (I'm sorry, in this scenario you will obtain a real first layer 0.4 mm thick.)

        3D Printing new Applications Researcher.

        1 Reply Last reply Reply Quote 0
        • dc42undefined
          dc42 administrators @3Dreamer
          last edited by dc42

          @3dreamer said in Heightmap, BLTouch and First Layer height:

          So, if you have set your M208 softstop to bring the nozzle at 0.2 mm from the bed, then you will obtain a REAL first layer 0.3mm thick. This behavior happen when not using/considering an heigthmap.

          No. 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.

          Duet WiFi hardware designer and firmware engineer
          Please do not ask me for Duet support via PM or email, use the forum
          http://www.escher3d.com, https://miscsolutions.wordpress.com

          3Dreamerundefined 1 Reply Last reply Reply Quote 0
          • Leblondundefined
            Leblond
            last edited by

            If I can afford ... for this purpose I created 2 macros that I think could serve your purpose.
            The first MACRO: G28
                                           M561
                                           M208 S1 Z-3

            The second MACRO: G92 Z0
                                               G4 P2000
                                               G1 Z5
                                               G4 P2000
                                               G30 S-1

            the first macro allows you to: bring the axes home "ATTENTION !!! I use the mini ir probe of DC42 on the center of the bed", to clear any previous survey and to get to the center ready for offset calibration extruder.
            At this point place an A4 sheet on the plate, lower the extruder until the tip touches the sheet and face it. Slightly effortlessly remove it, "I recommend you bring the extruder and the bed to print mode before the correct calibration" once you do that 'remove the sheet and launch the second macro that will allow you to bring the offest to zero, to position itself at + 5mm from the zero point and finally to read the difference.
            The final result that you will see in video or in panel of height Z will be the actual offset that you will have to put in the configuration file.
            Correct me if I'm wrong.

            1 Reply Last reply Reply Quote 0
            • Phaedruxundefined
              Phaedrux Moderator @3Dreamer
              last edited by

              @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.

              1. 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.

              2. 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.

              3. Mesh grid compensation routine is run to map the bed. Height map is loaded automatically at startup in config.g

              4. 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.

              Z-Bot CoreXY Build | Thingiverse Profile

              1 Reply Last reply Reply Quote 1
              • 3Dreamerundefined
                3Dreamer @dc42
                last edited by

                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.

                3D Printing new Applications Researcher.

                1 Reply Last reply Reply Quote 0
                • dc42undefined
                  dc42 administrators
                  last edited by dc42

                  How are you homing Z? It sounds like you have a 0.2mm error in your Z homing position.

                  Duet WiFi hardware designer and firmware engineer
                  Please do not ask me for Duet support via PM or email, use the forum
                  http://www.escher3d.com, https://miscsolutions.wordpress.com

                  3Dreamerundefined 1 Reply Last reply Reply Quote 0
                  • 3Dreamerundefined
                    3Dreamer @dc42
                    last edited by

                    @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.

                    3D Printing new Applications Researcher.

                    1 Reply Last reply Reply Quote 0
                    • dc42undefined
                      dc42 administrators
                      last edited by

                      It sounds to me that your M208 S0 Z value is 0.2mm too small.

                      Duet WiFi hardware designer and firmware engineer
                      Please do not ask me for Duet support via PM or email, use the forum
                      http://www.escher3d.com, https://miscsolutions.wordpress.com

                      3Dreamerundefined 1 Reply Last reply Reply Quote 0
                      • 3Dreamerundefined
                        3Dreamer @dc42
                        last edited by

                        @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.

                        3D Printing new Applications Researcher.

                        dc42undefined 1 Reply Last reply Reply Quote 0
                        • dc42undefined
                          dc42 administrators @3Dreamer
                          last edited by

                          @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.

                          Duet WiFi hardware designer and firmware engineer
                          Please do not ask me for Duet support via PM or email, use the forum
                          http://www.escher3d.com, https://miscsolutions.wordpress.com

                          3Dreamerundefined 1 Reply Last reply Reply Quote 0
                          • 3Dreamerundefined
                            3Dreamer @dc42
                            last edited by

                            @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.

                            3D Printing new Applications Researcher.

                            dc42undefined 1 Reply Last reply Reply Quote 0
                            • dc42undefined
                              dc42 administrators @3Dreamer
                              last edited by

                              @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.

                              Duet WiFi hardware designer and firmware engineer
                              Please do not ask me for Duet support via PM or email, use the forum
                              http://www.escher3d.com, https://miscsolutions.wordpress.com

                              3Dreamerundefined 1 Reply Last reply Reply Quote 0
                              • 3Dreamerundefined
                                3Dreamer @dc42
                                last edited by

                                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.

                                3D Printing new Applications Researcher.

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post
                                Unless otherwise noted, all forum content is licensed under CC-BY-SA