Synchronised Bed & Hotend, Homing not required after print.
-
2 situations for time saving
1: I would like to know how to set up the duet so i can time the heated bed and hot end so they are both ready at the same time.
2: I would like to know how to bypass all homing for printing after i have homed at least once without the motors turning off (Kept on reduced power to hold position)
Kind Regards
Scott -
- Pre heating commands are typically part of start gcode inserted into the job file by the slicer. If you use different filaments and/or bed surfaces you probably have a bunch of combinations of bed and hotend temperatures so to do this accurately you would need to know the time it takes to heat to those temperatures. In addition this is also complicated by sometimes you are heating from cold, and sometimes after the machines has not cooled down completely from the previous job. If you had a set of times then it would be possible to have a macro that started (say) the bed heater and then waited a set amount of time before starting the hotend heater. then waited for them both to reach temperature (using M116) before ending and returning control to the job file. An alternative that may get you most of the way there but is much simpler to implement is to use M116 to wait until the bed heater is within a set amount of the target (say 20C):
M140 S120 ; set the bed to 120C but don't wait. M116 H0 S20 ; wait for heater 0 (assumed bed) to get within 20C of the target M568 P0 S250 ; set tool 0 to 250C active (you may also need to select the tool if you have not already) M116 ; wait for all temperatures to be within the default range of their setpoints (default 2C)
Tweak the first M116 so the point where it stops waiting and starts heating the hotend is roughly right for the range of temperatures you use on you system.
- You can check if an axis is homed using the object model key:
move.axes[n].homed
wheren
is the axis number, X=0, Y=1, Z=2 typically.
So a if statement like this should work:
if !(move.axes[0].homed) | !(move.axes[1].homed) | !(move.axes[2].homed) G28
That will run G28 to home the machine only if one of the axes is unhomed.
You can get fancier and extend the logic to only home an axis if its unhomed if you need to.You will need to be sure that your idle hold current is sufficient to prevent unintended motion when doing things like removing prints from the bed.