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

    Dynamically preheating the bed before auto calibration

    Scheduled Pinned Locked Moved
    Tuning and tweaking
    4
    13
    1.4k
    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.
    • punamenonundefined
      punamenon
      last edited by

      This post is deleted!
      1 Reply Last reply Reply Quote 0
      • mrehorstdmdundefined
        mrehorstdmd
        last edited by mrehorstdmd

        The coefficient of thermal expansion of aluminum is about 24 um/m-k. An aluminum bed that is 10 mm thick (atypically thick) and heated from an ambient temperature of 20 C to 100 C ( a rise of 80 K) will expand vertically by 24 um/m-k x 0.01 m x 80 k = 19.2 um The difference between say 70C and 100C is only 30 K, so the difference in bed thickness for printing PLA and ABS is about 7.2 um. A real bed is typically 6 mm or even less in thickness, which further reduces those values. I wouldn't consider the numbers substantial unless you're trying to print in 20 um layers, but if you're doing that, you're probably not going to print the first layer than thin. Since the offset between PLA and ABS temperatures is easily calculated, you could just build those few um into the calibration. But if the sensor can't guarantee repeatability better than 10 um, it's all just noise.

        If you're printing something that has to be accurate to within 7 um in vertical height, you shouldn't be printing it- it should be milled, and then ground to final size. Have you looked closely at the top layer of a print? There's a lot more than 7 um in surface roughness.

        Warping is a bigger issue than expansion in thickness, but that's unpredictable and depends on a lot of things.

        Since zeroing and leveling really should be done at print temperature, to account for bed warping among all the other problems, it would be useful if the auto leveling/zeroing/mesh compensation heated the bed before running.

        https://drmrehorst.blogspot.com/

        punamenonundefined Phaedruxundefined 2 Replies Last reply Reply Quote 0
        • deckingmanundefined
          deckingman
          last edited by

          As @mrehorstdmd has said, the thermal expansion of the bed isn't worth worrying about. Having said that, it's easy enough to put the commands in the slicer start.g code. I don't know about other slicers but if you set the first layer bed temperature in Slic3R, it inserts the M190 snn command before any start gcode commands in any case. So as long as you have Z homing or any level/flatness commands in the start.gcode, they will get carried out after the bed has been heated.

          Ian
          https://somei3deas.wordpress.com/
          https://www.youtube.com/@deckingman

          punamenonundefined 1 Reply Last reply Reply Quote 0
          • punamenonundefined
            punamenon @mrehorstdmd
            last edited by

            @mrehorstdmd While this is true for the expansion of the bed in thickness (the z direction) it doesn't take into account the expansion over the horizontal (X and Y directions). If you expand a sheet of aluminum uniformly, it doesn't just grow and maintain flatness. It tends to buckle as it assumes a more spherical shape. Thus, the minuscule values which you reported are greatly increased. So much so that I was able to measure them using a hand tool modified with 3D printed parts: https://youtu.be/_-fAMAnn3_s?t=11m54s

            Despite your dismissal, this is definitely an issue. I measured a variance of about 0.3mm which is orders of magnitude larger than your theoretical figures. Doing an auto calibration at the temperature at which you are printing is helpful for achieving a good first layer without bulging (aka elephant's foot) or narrowing of the bottom of your print.

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

              @mrehorstdmd said in Dynamically preheating the bed before auto calibration:

              Since zeroing and leveling really should be done at print temperature, to account for bed warping among all the other problems, it would be useful if the auto leveling/zeroing/mesh compensation heated the bed before running.

              That's what macros are for.

              ; 0:/macros/Bed Leveling/0_Grid Compensation Assist.g
              ; Macro to run a mesh bed compensation routine (G29)
              ;
              
              M291 P"Grid bed compensation map will be cleared and re-calculated. Ok or Cancel?" R"WARNING. This will take about 30 minutes." S3 ; User must click OK or cancel.
              
              ; Preheat to probing temps
              ;
              M291 P"Preheating to bed to 60 and nozzle to 210 for accurate probing" R"Proceed?" S3
              T0			; Activate first tool
              M190 S60		; Set bed to 60 and wait
              ;M109 S210		; Set nozzle to 210 and wait. Used only for stall detection probing.
              
              ; Clear current mesh compensation map and disable compensation.
              ;
              M561			; Disable any current bed compensation
              G29 S2			; Clear mesh bed compensation parameters
              G28			; Home all
              G29 S2			; Clear mesh bed compensation parameters
              
              ; Set lower speeds for Z homing and lower Z motor current
              ;
              M566 Z10			; Set maximum instantaneous speed changes (mm/min) (Jerk)
              M203 Z400			; Set maximum speeds (mm/min)
              M201 Z100	 		; Set maximum accelerations (mm/s^2)
              M913 Z50			; Drop motor current to prevent damage in case of head crash
              
              M291 P"Running mesh grid compensation probing cycle. Do not disturb the printer." T0 S0
              
              G29			; Run mesh compensation
              
              ; Turn off heaters
              ; 
              M140 S0		; Set bed to 0 and release
              M104 S0		; turn off hot end heater
              M913 Z85	; Return Z motor current to normal
              G28		; Home all
              
              ; Tone to get user attention
              ;
              M400			; Clear movement buffer so tones play reliably
              M300 S666 P500
              G4 P501
              M300 S1111 P300
              G4 P301
              
              M291 P"Check heightmap for results." R"Probing complete!" S3
              

              Z-Bot CoreXY Build | Thingiverse Profile

              punamenonundefined 1 Reply Last reply Reply Quote 0
              • punamenonundefined
                punamenon @deckingman
                last edited by

                @deckingman According to the study I did, thermal expansion of the bed is worth worrying about. It is the slope of the line which I directly measured in the real world. As my bed heats up, it grows in Z height. This effect is most pronounced in the middle, and is due to the flat bed assuming a more spherical shape as it uniformly expands in the X,Y plane.

                Here is my study: https://youtu.be/_-fAMAnn3_s?t=11m54s

                mrehorstdmdundefined 1 Reply Last reply Reply Quote 0
                • punamenonundefined
                  punamenon @Phaedrux
                  last edited by

                  @phaedrux Yes! This is the kind of thing I'm trying to do, except I want to do it before every print at the bed temperature for that print. Since I vary the temperature of my prints depending on material I'm using, I can't use a one-size-fits-all solution. I need to dynamically heat the bed before running the print up to the bed temperature used in the print file, but I need to do this before the firmware starts reading the Gcode of the actual print. In other words, I want my macro to do the following

                  1. pre-read the gcode looking for the bed temperature
                  2. Set the bed to that temperature and wait until the temperature is reached, at which point
                  3. Print the part by running the gcode file where I have G32 and G29 auto calibration commands setup in the start code from my slicer
                  1 Reply Last reply Reply Quote 0
                  • Phaedruxundefined
                    Phaedrux Moderator
                    last edited by Phaedrux

                    @punamenon This can be accomplished with the tools available.

                    Your slicer will have to do the preheating for you in the start gcode. All slicers have variables for bed and hot end temperatures. If you don't have a heating commands using these variables present in your start gcode it will automatically preheat the bed and first tool for you before it executes the start gcode.

                    All you have to do is add a G32 G29 command to the start code and it will be executed after heating is complete. Or if you want to do something more complex with a macro, you can simply call that macro in your start gcode with M98.

                    Z-Bot CoreXY Build | Thingiverse Profile

                    punamenonundefined 2 Replies Last reply Reply Quote 0
                    • punamenonundefined
                      punamenon @Phaedrux
                      last edited by

                      @phaedrux Right, but the start code in my slicer is similarly undynamic to a Macro. I haven't found a way to enter in a variable bed temperature BEFORE running the auto calibration in the start code. I guess I'm just going to have to get into the habit of opening up my gcode files in a text editor and adding that line in there by hand.

                      1 Reply Last reply Reply Quote 0
                      • punamenonundefined
                        punamenon @Phaedrux
                        last edited by

                        @phaedrux NEVERMIND! I just opened up my gcode file generated by CURA, and the very first line of actual g-code is to get that bed up to printing temperature before running the start code which includes the auto calibrate. It seems the smart folks over there at CURA figured out this issue long ago and already implemented a solution so seamlessly that I wasn't even aware of it.

                        Problem solved, because it was never a problem in the first place. Now, I wonder if all the other slicers do it the same way.

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

                          @punamenon said in Dynamically preheating the bed before auto calibration:

                          Now, I wonder if all the other slicers do it the same way.

                          They do.

                          Z-Bot CoreXY Build | Thingiverse Profile

                          1 Reply Last reply Reply Quote 0
                          • mrehorstdmdundefined
                            mrehorstdmd @punamenon
                            last edited by

                            @punamenon said in Dynamically preheating the bed before auto calibration:

                            @deckingman According to the study I did, thermal expansion of the bed is worth worrying about. It is the slope of the line which I directly measured in the real world. As my bed heats up, it grows in Z height. This effect is most pronounced in the middle, and is due to the flat bed assuming a more spherical shape as it uniformly expands in the X,Y plane.

                            I think you're confusing bed warp with expansion. If the bed is thin and flexible, and the material has the grains of metal oriented in one direction, like extruded or rolled sheet, it will tend to warp when heated, partially due to uneven thermal expansion. Materials like cast tooling plate with a more amorphous grain structure and greater rigidity by virtue of being thicker, don't have warping to any degree that matters.

                            Most bed mounting systems don't take thermal expansion into account. As the bed expands it pushes laterally on the leveling screws which in turn, cause the support plate in which the screws are anchored to flex, especially if there are 4 leveling screws. If the bed is thin, it too, may flex due to the lateral forces on the screws.

                            I designed and built a kinematic mount for the bed in my printer that allows thermal expansion without producing any lateral bending forces. It uses a piece of 8mm thick cast tooling plate that doesn't warp when heated. It has been working very well and doesn't require releveling unless I take the machine apart. More info here.

                            https://drmrehorst.blogspot.com/

                            punamenonundefined 1 Reply Last reply Reply Quote 0
                            • punamenonundefined
                              punamenon @mrehorstdmd
                              last edited by

                              @mrehorstdmd I'm not confusing anything man. I apologize if I was a bit snarky in my last response, but I perceive the tone of your messages to be dismissive and condescending.

                              I have measured several beds in real life. They all move substantially in the Z direction when they heat up. The physics of this is simple. Heated beds don't have heating elements that go all the way to the very edges of the bed. Even if a bed were designed with heating elements that go all the way to the edges we would still have the problem of cooler edges because the the edges of the bed lose heat faster as they have 3 surfaces exposed (top, side, bottom) to the cool air rather than two sides exposed in the middle (top, bottom). Because the edges will always be cooler, they will not expand as much. Thus the greater expansion in middle will look for a place to expand to and that will have the effect of turning the previously flat surface into a sphere like surface. It may be concave or convex, but it won't be flat, as my real world testing has proven. Go test it for yourself on a variety of typical heated beds available on 3D printers. I don't care if you have designed the perfect bed for your 3D printer. Mine isn't perfect. Neither are the beds on 99% of printers. That's why we have Auto Calibration to compensate for the imperfection.

                              Anyway, it's a non issue. The folks at CURA are keenly aware of the issue and they have long ago designed their slicer software to compensate. The thing I was trying to solve was already solved years before I even became aware of it.

                              I should probably just delete my post.

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