M116 and temperature overshoots...
-
I run a toolchanger with rapido hotends that overshoot target temps by 2 to 4 degrees. Setting M116 Sxx. All works as intended as the temps approach target then the tool is picked up and retracts from the parking posts as the temperature overshoots where it sits and dribbles filament until it falls to within 2 degrees which at this point I have to assume is some baked in default that it reverts to once M116 parameters have been satisfied.
Is there some way to override or compensate for the temperature overshoot? I'm currently running two M116's, one as it approaches the tool and one just prior to my nozzle purge routine but occasionally the temperature is still above 2 degrees and the tool hangs and dribbles when it's sitting over the bed.
-
@edsped I don't much like M116 because as you say, it will often wait for the temperature to drop to within (I think) 1 degree of the set point as well as wait for heating. So with a slight overshoot as is often the case, it can take quite a while for the temperature to settle, meanwhile the tool is oozing filament as you have noticed. I have another issue in that I use the nozzle as a probe so I like to heat the hot end to 140 deg C or above to soften any filament that might have oozed prior to probing the bed. So I want to use any temperature at or above the set the point.
So instead of M116 I use the following format of conditional gcode
while sensors.analog[1].lastReading < 140 G4 S1
In your case, change the 140 to your print temperature. Essentially this is a loop which checks the temperature and if it's below 140 it waits for 1 second and checks again. It will continue to do so until the temperature is at or above 140.
So that would work for your overshoot.
-
Why not use the 'S' parameter for the M116 command?
-
@jens55 said in M116 and temperature overshoots...:
Why not use the 'S' parameter for the M116 command?
I do, at tpost0.g i have this as my first line...
M116 P0 S2 ; Wait for tool to reach temperature
Then in purging macro that follows I have this...
if state.currentTool = 0 M116 P0 S1 elif state.currentTool = 1 M116 P1 S1 elif state.currentTool = 2 M116 P2 S1 elif state.currentTool = 3 M116 P3 S1 M302 P0 ; Prevent Cold Extrudes, just in case temp setpoints are at 0 G1 E15 F800 ; Unretract to nozzle G1 E5 F200 ; Pebble Purge M106 S255 ; Cooling 100% G4 S1 ; Wait 3 seconds G53 G1 Y305 F24000 ; Retract the entire tool and wipe Backwards. G1 R2 Z0 F24000 ; Restore prior Z position before tool change was initiated. ; Note: tool tip position is automatically saved to slot 2 upon the start of a tool change. ; Restore Z first so we don't crash the tool on retraction. G1 R0 Y0 F24000 ; Retract tool by restoring Y position next now accounting for new tool offset. ; Restoring Y next ensures the tool is fully removed from parking post. G1 R0 X0 F24000 ; Restore X position now accounting for new tool offset. M106 R2 ; restore print cooling fan speed
-
@deckingman said in M116 and temperature overshoots...:
@edsped I don't much like M116 because as you say, it will often wait for the temperature to drop to within (I think) 1 degree of the set point as well as wait for heating. So with a slight overshoot as is often the case, it can take quite a while for the temperature to settle, meanwhile the tool is oozing filament as you have noticed. I have another issue in that I use the nozzle as a probe so I like to heat the hot end to 140 deg C or above to soften any filament that might have oozed prior to probing the bed. So I want to use any temperature at or above the set the point.
So instead of M116 I use the following format of conditional gcode
while sensors.analog[1].lastReading < 140 G4 S1
In your case, change the 140 to your print temperature. Essentially this is a loop which checks the temperature and if it's below 140 it waits for 1 second and checks again. It will continue to do so until the temperature is at or above 140.
So that would work for your overshoot.
Thanks! I'm going to give this a try I still need to get a handle on conditional code.
-
That's not quite getting what I want either... Ultimately I'd like it to start printing if it's at or above set temps. I think there might be a +/- 2 degree hard coded setting in the firmware I'd like to override that to -2 +5 degrees as I'm not overly concerned if the hotend is slightly over temps.
-
So you would like the M116 S parameter to accept min_temp:max_temp, using the : as the delimiter as do many parameters already?
Sounds like a good idea.
How about posting it in the Firmware Wishlist category?
In the meantime you could use the loop and test for two temps rather than one.
Frederick
-
@edsped That's easy enough to do too. Say for example your set temperature is 230. Then in your while loop you check if the temperature is at or above 228. You could then have second while loop to check if it's below 235. That'll give you the -2 +5 tollerance.
For info, something else I do is in my pre-print macro, I start by setting the bed to the desired temperature then use a while loop to wait for it to get to the set temperature minus 5 degrees, at which point I start heating the hot end and homing the printer. The net result is that all the homing gets done while the bed is heating and the hot end reaches its set point at more or less exactly the same time as the bed. Neither too long before, nor too long after and everything happens in the shortest possible time (which is how long it takes to heat the bed).
-
@fcwilt That would help, something like a M116 Px S2:4 Or something to override the the default +/-2 that seems to kick in once M116 has been satisfied or make M116 Sx persistent.
-
@deckingman That works well enough for the initial tool but not sure if it would be good for tool changes during the print.
-
@edsped said in M116 and temperature overshoots...:
@deckingman That works well enough for the initial tool but not sure if it would be good for tool changes during the print.
You could use global variables for the min/max temps and change them in the tool change code
In config.g you could put this to create the global variables:
global min_temp = 0 global max_temp = 0
In the tool change code you would have something like this:
set global.min_temp = 195 set global.max_temp = 205
And in the while loop:
while true var reading = sensors.analog[state.currentTool].lastReading if var.reading >= global.min_temp && var.reading <= global.max_temp break
The above assumes the tool temp sensors are numbered 0 to 3 and match up with the tool numbers 0 to 3
Frederick
-
@fcwilt Is there some way to pass the print temps from PS? I'm hoping to not have to tweak every time I change filaments.
-
@edsped said in M116 and temperature overshoots...:
@fcwilt Is there some way to pass the print temps from PS? I'm hoping to not have to tweak every time I change filaments.
What is PS?
I use the Filament Management feature of the DWC to take care of changing temps to match the current filament.
Are you familiar with that feature?
By creating different filament entries you can have whatever temps you want just by selecting the desired filament for the desired tool in the DWC Desktop.
Frederick
-
@fcwilt Sorry PrusaSlicer... I abandoned the filament profiles when I couldn't use the same profile for multiple tools simultaneously. Four profiles for the same filament became unruly.
-
@edsped said in M116 and temperature overshoots...:
I abandoned the filament profiles when I couldn't use the same profile for multiple tools simultaneously. Four profiles for the same filament became unruly.
It must depend on how it is done. I have an E3D MS/TC printer and using the same filament for all four tools is not a problem.
Frederick
-
@edsped said in M116 and temperature overshoots...:
@deckingman That works well enough for the initial tool but not sure if it would be good for tool changes during the print.
You can read the active temperature for a tool using the object model e.g in your tool change macro use tools[n].active[0] and use that instead of a fixed value.