Dynamically preheating the bed before auto calibration
-
This post is deleted! -
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.
-
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.
-
@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.
-
@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
-
@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
-
@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
- pre-read the gcode looking for the bed temperature
- Set the bed to that temperature and wait until the temperature is reached, at which point
- 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
-
@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.
-
@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.
-
@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.
-
@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.
-
@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.
-
@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.