Folk have advised me to print a temperature ladder with new filament to determine the best hot-end temperature to use with it. Is there a way to automate this so that the temperature set point is adjusted automatically at each step?
I’m assuming the temperature ladder is an .stl file that is sliced to produce .gcode. The .stl file can be procedurally generated but none of the existing slicers that I am aware of have a way of dynamically changing the hotend temperature (unless it supports post-processing extensions). G-code doesn’t have any support for doing math. The best you could do would be to post process the .gcode file with slicer extensions or a program of some sort.
OK thanks for the response.
So without be able to adjust the set point for each temperature step, what would the procedure be for printing a temperature ladder on my original Mini?
Pick a temperature tower model. The model should have instructions that describe its geometry including a recommended layer height. Using these parameters in your slicer and produce a .gcode file. Edit this .gcode file inserting “M104 Sxxx” commands at the appropriate locations (by layer or by height).
Here’s a pointer to one that includes everything you should need including post processing macros, https://www.thingiverse.com/thing:2729076. If you don’t like that one, here’s a pointer to everything tagged with “Temperature Tower”, https://www.thingiverse.com/tag:Temperature_Tower
Google will be your friend if you ask it the right question. Try “automated 3d temperature tower” and throw in the name of your preferred slicer.
I know this post is a few months old … but there is built-in support for this in Cura Lulzbot Edition
Load your temperature tower (i.e. find one you like from a website such as Thingiverse. There are many of these and you’ll find them with temp ranges printed on the towers that correspond to common temp ranges for various filaments… e.g. PLA temp towers, ABS temp towers, etc.)
Set the temperature used for the first section of the temperature tower (think of this like a tall building with “levels” or “floors”) and set that temp in Cura as you normally would.
From the Cura main menubar, navigate to “Extensions” -> “Post processing” -> “Modify G-code”
Click “Add a script” and select the script named “Tweak at Z or Layer”
Determine if you’d prefer to tweak at a layer number … or at a height (in millimeters). Suppose you choose to do this by layer number and the first temperature change (from the original print temp) should occur at layer number 100. You’d click the “Trigger” and set that to “Layer number” (instead of “Height”). then you’d fill in the layer number in box below (the one named “Tweak Layer”).
You’ll notice you can tweak lots of things… print speed, flow rate, fan speed, etc. But what you want to change is the extruder temp. So put a check in the box for Extruder Temp. Then fill in the new temp you want to use.
But that just changes one “level” of the tower and your tower needs several of these changes.
So go back and repeat just as you did in Step 4 … pick “Add a script” and add another “Tweak at Z or Layer” and repeat the steps of determine the new height or layer number and set the next extruder temp.
Repeat for each level/floor of the temp tower until you are done.
Now slice the job and send it to the printer.
Be aware that the best temp to use can be affected not just by the filament… but also by things like layer heights, flow rates, fan speeds, retraction settings, etc.
Lastly but VERY important. One you add these scripts… they can stay there. That means that when you’re ready to print an actual part (not a temp tower) make sure you turn off all these temp change scripts. (just loading a new part into Cura doesn’t clear the scripts).
Your last paragraph is confusing me a little. Are you saying that after printing the temp tower, when I load a new job ( .gcode) to be printed which has previously been sliced, the settings will be left as they were for the temp ladder? If that is the case, how would I ‘turn off’ the temp change scripts.
I hope I am making sense here
@bbc0, correct. Assume you set up and printed the temp-tower with all the temperature changes and finished your print. Then in Cura you clear the build plate and load something new into Cura… you’ll likely find that all those temperature changes are still active even though it’s a completely different part.
You’ll notice that even with a new part, you can go into Extensions -> Post Processing -> Modify G-codes … that all those scripts are still enabled.
Just click the tiny “X” icon to the right of each script to clear them.
If I completely quit Cura and restart… it clears all the scripts. But if I simply clear the build-plate and load a new part to slice… the scripts do not clear – I have to manually clear them.
Interesting. I have never made any gcode mods so I will have to remember to do this when the time comes. Often though I only print one item in an evening and then shut down the power for the night, so I should be alright in that case.
The G-codes are fairly simply and meant to be human-readable. You can find a list of them here: http://marlinfw.org/meta/gcode/
E.g. G-codes such as G00 or G01 are followed by X, Y, and possibly Z coordinates and that causes the print head to move to a new position (at some travel speed and possibly also laying down filament … or not laying down filament … while moving). Not all codes start with “G”.
Many years ago (probably about 35 years ago) I used to program CNC numerical milling machines by hand (no computer software generated the G-codes) to make machined parts and that’s when I originally learned the G-codes. When I got into 3D printing I was surprised to see those same G-codes still in use today.
If you were to tell your slicing software (e.g. Cura) to “save to file” instead of sending the G-codes to the printer, you could follow through the text file line-by-line while looking at that reference page and see exactly what each code does.
Knowing how this works make it easy to understand how to change temperatures, fan speeds, or other things … in the middle of a print (as long as some subsequent g-code in the file doesn’t over-ride the change you just made.)