I’ve not seen this discussed in detail elsewhere, but another improvement for the J1…
On the monster thread regarding intermittent skips/clogs, and the ultimate solution of all-metal hotends, I highlighted that whether homemade or Snapmaker official, I started sometimes getting first-layer hard clogs with all-metal hotends.
I suggested the solution might be the default start gcode (at least for Cura plugin) could be the problem: It heats both the hotend and bed at the same time, but the bed takes a few more minutes. Instead, preheating the bed before heating the hotend works better. I discovered this accidentally because I usually preheat while slicing, and in that case hadn’t noticed any clogs.
@Mechanikus says yes and suggests one better: Preheat the bed to 5 degrees less than target, then heat both to target. This wastes less time, since the nozzle takes about 5 degrees of bed temperature to fully heat itself.
Let’s take a look at the start gcode as specified in the Snapmaker Plugin for Cura. (Your slicer may vary!)
;--- Start G-code Begin ---
M104 S{material_print_temperature_layer_0} ;Set Hotend Temperature
M140 S{material_bed_temperature_layer_0} ;Set Bed Temperature
G28 ;Home
G1 Z0.8
M109 S{material_print_temperature_layer_0}
M190 S{material_bed_temperature_layer_0}
G1 Z0.8 F6000
M201 X10000 Y10000 Z500 E5000
M205 V5
G92 E0
G1 F200 E2
G92 E0
;--- Start G-code End ---
Line 2 (M104) starts the hotend heating. Line 3 (M140) starts the bed heating. Lines 5 and 6 then wait for the hotend and bed, respectively. The hotend heats in about a minute. The thick glass bed takes 4-5 minutes.
The following is an alternative solution that follows @Mechanikus improved suggestion. Unfortunately Cura does not permit math in start/stop gcode macros like Prusa Slicer. We find this solution instead on StackExchange.
1) Define the bed pre-heat temp:
First, in $CURA_PATH$\share\cura\resources\definitions
(Windows), find the file fdmprinter.def.json
. In this, find the block definition for the variable "material_bed_temperature_layer_0":
and add the following variable definition in the block after:
"material_bed_temperature_pre":
{
"label": "Build Plate Preheat Temperature",
"description": "The temperature used for preheating the heated build plate.",
"unit": "°C",
"type": "float",
"resolve": "material_bed_temperature_pre",
"default_value": "material_bed_temperature_layer_0 - 5",
"value": "material_bed_temperature_layer_0 - 5",
"minimum_value": "0",
"minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))",
"maximum_value_warning": "130",
"maximum_value": "200",
"enabled": "false",
"settable_per_mesh": false,
"settable_per_extruder": false,
"settable_per_meshgroup": false
},
This creates a new variable material_bed_temperature_pre
we can use in our start gcode that’s 5 degC lower than the first layer bed temp.
2) Modify start gcode for Snapmaker J1
Now in Cura, go to the Machine Settings for the Snapmaker J1 and modify the first few lines of the start gcode to be:
;--- Start G-code Begin ---
M140 S{material_bed_temperature_pre} ;Set Bed Preheat Temperature
G28 ;Home
G1 Z0.8
M190 S{material_bed_temperature_pre} ;Wait for bed preheat
M104 S{material_print_temperature_layer_0} ;Set hotend temp
M140 S{material_bed_temperature_layer_0} ;Set full bed temp
M109 S{material_print_temperature_layer_0} ;Wait for hotend temp
M190 S{material_bed_temperature_layer_0} ;And full bed temp
G1 Z0.8 F6000
M201 X10000 Y10000 Z500 E5000
M205 V5
G92 E0
G1 F200 E2
G92 E0
;--- Start G-code End ---
Note we still do M104 and M140 before doing M109 and M190. This is to make sure both start heating before getting to the first wait command, so one does not possibly block the other from starting because it hasn’t reached temp yet.
Save the new start gcode, and restart Cura if you haven’t already to pick up the changes. Also double check the start gcode sticks after restarting.
Starting from cold, this is now the result:
The bed (blue) preheats to 55 C in 3-4 minutes. The hotend (red) then turns on and heats to 210 C while the bed finishes heating from 55C to 60 C in about one additional minute.
And @Mechanikus is right! In this test for PLA-like settings, the hotend and bed were finished heating at almost the exact same time.
Snapmaker Luban
Luban is very Cura-like. The above should work, however I think the variable must be added in the file $LUBAN_PATH$\resources\app\resources\print-settings\printing\fdmprinter.def.json
. Then the start gcode modified as it is above for Cura.
There is not a UI interface to editing the start gcode in Luban. I seem to recall you need to directly edit the machine json file for the Snapmaker J1 to change start gcode? It is contained in $LUBAN_PATH$\resources\app\resources\print-settings\printing\snapmaker_j1\machine.def.json
in the variable machine_start_gcode
.
One would need to test and confirm details.
Prusa/Orca Slicers
The modified start gcode above would be similar. However, these slicers support variable arithmetic. So you can skip defining material_bed_temperature_pre
and replace it in the start gcode above with the arithmetic for “whatever bed temp variable - 5”. I’m not so familiar with those slicers, but maybe someone can post their tested solution.