Skip to content

Instantly share code, notes, and snippets.

@codeincontext
Last active November 6, 2023 12:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codeincontext/4efc5820e7fd4167b231dffcc4d9ccd6 to your computer and use it in GitHub Desktop.
Save codeincontext/4efc5820e7fd4167b231dffcc4d9ccd6 to your computer and use it in GitHub Desktop.
Faster bambu lab filament change gcode
M620 S[next_extruder]A
M204 S9000 ; set printing and travel acceleration to 9000mm/min^2
{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}
G17 ; select xy plane
G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift
{endif}
G1 Z{max_layer_z + 3.0} F1200 ; raise the nozzle 3mm above what has already been printed ** only requiered when printing by object ?! otherwise going + 0.5mm should be enought
M106 P1 S0 ; turn part cooling fan off
M106 P2 S0 ; turn Aux fan off
; disabled - M104 S[nozzle_temperature_range_high] ;** Change temp to max without waiting, waiting would take age for nothing
; disabled - M104 S275 ;** Change temp to 275°c without waiting, waiting would take age for nothing
;** Go to cutting current filament position
G1 X20 Y50 F20000 ; move close to filament cutting position
G1 E-20 F200 ;AH Filament is pulled up 20 mm.
G1 Y-3 F20000 ; move up to filament cutter
{if toolchange_count == 2}
; get travel path for change filament
M620.1 X[travel_point_1_x] Y[travel_point_1_y] F24000 P0
M620.1 X[travel_point_2_x] Y[travel_point_2_y] F24000 P1
M620.1 X[travel_point_3_x] Y[travel_point_3_y] F24000 P2
{endif}
M620.1 E{old_filament_e_feedrate * 3} T{new_filament_temp}
M104 S[new_filament_temp] ; Nozzle will change its temperature while filament is loaded/unloaded
T[next_extruder] ;Cut and change filament
M620.1 E{new_filament_e_feedrate * 3} T{new_filament_temp}
{if next_extruder < 255} ; if the next filament is logically possible (officially only 16 filaments)
G1 E18 F200 ;Filament is pushed out 20 mm.
G1 E2 F20 ;Filament is pushed out 2 mm but slower.
M400 ;Waits until pushing out is completed before doing anything else.
G92 E0 ;** reset extruder pos, perfect after T
{if flush_length_1 > 1}
; FLUSH_START 1
{if flush_length_1 > 23.7}
G1 E22.7 F{old_filament_e_feedrate * 3} ; do not need pulsatile flushing for start part
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{old_filament_e_feedrate * 3}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.2 F120
{else}
G1 E{flush_length_1} F{old_filament_e_feedrate * 3}
{endif}
; FLUSH_END
{endif}
{if flush_length_2 > 1}
; FLUSH_START 2
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
; FLUSH_END 2
{endif}
{if flush_length_3 > 1}
; FLUSH_START 3
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
; FLUSH_END 3
{endif}
{if flush_length_4 > 1}
; FLUSH_START 4
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 3}
G1 E0.25 F120
; FLUSH_END 4
{endif}
M400 ; AH: Don't start part fan until flushing complete
;**G1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature
G1 E1 F30 ;Compensate for filament spillage during two second
M109 R[new_filament_temp] ; set new filament temp and wait for it to be reached
M106 P1 S255
G92 E0
G1 E-[new_retract_length_toolchange] F1800
G1 Y255 F18000
G1 X80 F18000
G1 X60 F18000
G1 X80 F18000
G1 X60 F18000;shake to put down garbage
G1 X70 F18000
G1 X90 F18000
G1 Y255 F18000
G1 X100 F5000
G1 Y265 F5000
G1 X70 F18000
G1 X100 F18000
G1 X70 F18000
G1 X100 F18000
G1 X165 F18000;wipe and shake
G1 Y256 ; move Y to aside, prevent collision
G1 Z{max_layer_z + 3} F3000
{if layer_z <= (initial_layer_print_height + 0.001)}
M204 S[initial_layer_acceleration] ; if it is the first layer, set acceleration to initial_layer_acceleration
{else}
M204 S[default_acceleration] ; if it is not the first layer, set acceleration to default
{endif}
{else}
G1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F18000 ; move to position after filament change
{endif}
M621 S[next_extruder]A
;===== date: 20230428 =====================
M400 ; wait for buffer to clear
G92 E0 ; zero the extruder
G1 E-0.8 F1800 ; retract
G1 Z{max_layer_z + 0.5} F900 ; lower z a little
G1 X65 Y245 F12000 ; move to safe pos
G1 Y265 F3000
G1 X65 Y245 F12000
G1 Y265 F3000
M140 S0 ; turn off bed
M106 S0 ; turn off fan
M106 P2 S0 ; turn off remote part cooling fan
M106 P3 S0 ; turn off chamber cooling fan
G1 X100 F12000 ; wipe
; pull back filament to AMS
M620 S255
G1 E-20 F200 ;Filament is pushed out 20 mm.
M400 ;Waits until pushing out is completed before doing anything else.
G1 X20 Y50 F12000
G1 Y-3
T255
G1 X65 F12000
G1 Y265
G1 X100 F12000 ; wipe
M621 S255
M104 S0 ; turn off hotend
M622.1 S1 ; for prev firware, default turned on
M1002 judge_flag timelapse_record_flag
M622 J1
M400 ; wait all motion done
M991 S0 P-1 ;end smooth timelapse at safe pos
M400 S3 ;wait for last picture to be taken
M623; end of "timelapse_record_flag"
M400 ; wait all motion done
M17 S
M17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom
{if (max_layer_z + 100.0) < 250}
G1 Z{max_layer_z + 100.0} F600
G1 Z{max_layer_z +98.0}
{else}
G1 Z250 F600
G1 Z248
{endif}
M400 P100
M17 R ; restore z current
G90
G1 X128 Y250 F3600
M220 S100 ; Reset feedrate magnitude
M201.2 K1.0 ; Reset acc magnitude
M73.2 R1.0 ;Reset left time magnitude
M1002 set_gcode_claim_speed_level : 0
M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power
;===== machine: P1S ========================
;===== date: 20230707 =====================
;===== turn on the HB fan =================
M104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle
;===== reset machine status =================
G91
M17 Z0.4 ; lower the z-motor current
G380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed
G380 S2 Z-25 F300 ;
G1 Z5 F300;
G90
M17 X1.2 Y1.2 Z0.75 ; reset motor current to default
M960 S5 P1 ; turn on logo lamp
G90
M220 S100 ;Reset Feedrate
M221 S100 ;Reset Flowrate
M73.2 R1.0 ;Reset left time magnitude
M1002 set_gcode_claim_speed_level : 5
M221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem
G29.1 Z{+0.0} ; clear z-trim value first
M204 S10000 ; init ACC set to 10m/s^2
;===== heatbed preheat ====================
M1002 gcode_claim_action : 2
M140 S[bed_temperature_initial_layer_single] ;set bed temp
M190 S[bed_temperature_initial_layer_single] ;wait for bed temp
;=============turn on fans to prevent PLA jamming=================
{if filament_type[initial_extruder]=="PLA"}
{if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}
M106 P3 S180
{elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}
M106 P3 S255
{endif};Prevent PLA from jamming
{endif}
M106 P2 S100 ; turn on big fan ,to cool down toolhead
;===== prepare print temperature and material ==========
M104 S[nozzle_temperature_initial_layer] ;set extruder temp
G91
G0 Z10 F1200
G90
G28 X
M975 S1 ; turn on
G1 X60 F12000
G1 Y245
G1 Y265 F3000
M620 M
M620 S[initial_extruder]A ; switch material if AMS exist
M109 S[nozzle_temperature_initial_layer]
G1 X120 F12000
G1 X20 Y50 F12000
G1 Y-3
T[initial_extruder]
G1 X54 F12000
G1 Y265
M400
M621 S[initial_extruder]A
M620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}
M412 S1 ; ===turn on filament runout detection===
M109 S250 ;set nozzle to common flush temp
M106 P1 S0
G92 E0
G1 E50 F200
G1 E20 F200 ; Extrude another 20 mm so that the calculated waste amounts in bambu studio are accurate.
M400
M104 S[nozzle_temperature_initial_layer]
G92 E0
G1 E50 F200
M400
M106 P1 S255
G92 E0
G1 E5 F300
M109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit
G92 E0
G1 E-0.5 F300
G1 X70 F9000
G1 X76 F15000
G1 X65 F15000
G1 X76 F15000
G1 X65 F15000; shake to put down garbage
G1 X80 F6000
G1 X95 F15000
G1 X80 F15000
G1 X165 F15000; wipe and shake
M400
M106 P1 S0
;===== prepare print temperature and material end =====
;===== wipe nozzle ===============================
M1002 gcode_claim_action : 14
M975 S1
M106 S255
G1 X65 Y230 F18000
G1 Y264 F6000
M109 S{nozzle_temperature_initial_layer[initial_extruder]-20}
G1 X100 F18000 ; first wipe mouth
G0 X135 Y253 F20000 ; move to exposed steel surface edge
G28 Z P0 T300; home z with low precision,permit 300deg temperature
G29.2 S0 ; turn off ABL
G0 Z5 F20000
G1 X60 Y265
G92 E0
G1 E-0.5 F300 ; retrack more
G1 X100 F5000; second wipe mouth
G1 X70 F15000
G1 X100 F5000
G1 X70 F15000
G1 X100 F5000
G1 X70 F15000
G1 X100 F5000
G1 X70 F15000
G1 X90 F5000
G0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle
M104 S140 ; set temp down to heatbed acceptable
M106 S255 ; turn on fan (G28 has turn off fan)
M221 S; push soft endstop status
M221 Z0 ;turn off Z axis endstop
G0 Z0.5 F20000
G0 X125 Y259.5 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y262.5
G0 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y260.0
G0 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y262.0
G0 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y260.5
G0 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y261.5
G0 Z-1.01
G0 X131 F211
G0 X124
G0 Z0.5 F20000
G0 X125 Y261.0
G0 Z-1.01
G0 X131 F211
G0 X124
G0 X128
G2 I0.5 J0 F300
G2 I0.5 J0 F300
G2 I0.5 J0 F300
G2 I0.5 J0 F300
M109 S140 ; wait nozzle temp down to heatbed acceptable
G2 I0.5 J0 F3000
G2 I0.5 J0 F3000
G2 I0.5 J0 F3000
G2 I0.5 J0 F3000
M221 R; pop softend status
G1 Z10 F1200
M400
G1 Z10
G1 F30000
G1 X230 Y15
G29.2 S1 ; turn on ABL
;G28 ; home again after hard wipe mouth
M106 S0 ; turn off fan , too noisy
;===== wipe nozzle end ================================
;===== bed leveling ==================================
M1002 judge_flag g29_before_print_flag
M622 J1
M1002 gcode_claim_action : 1
G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}
M400
M500 ; save cali data
M623
;===== bed leveling end ================================
;===== home after wipe mouth============================
M1002 judge_flag g29_before_print_flag
M622 J0
M1002 gcode_claim_action : 13
G28
M623
;===== home after wipe mouth end =======================
M975 S1 ; turn on vibration supression
;=============turn on fans to prevent PLA jamming=================
{if filament_type[initial_extruder]=="PLA"}
{if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}
M106 P3 S180
{elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}
M106 P3 S255
{endif};Prevent PLA from jamming
{endif}
M106 P2 S100 ; turn on big fan ,to cool down toolhead
M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time
;===== mech mode fast check============================
G1 X128 Y128 Z10 F20000
M400 P200
M970.3 Q1 A7 B30 C80 H15 K0
M974 Q1 S2 P0
G1 X128 Y128 Z10 F20000
M400 P200
M970.3 Q0 A7 B30 C90 Q0 H15 K0
M974 Q0 S2 P0
M975 S1
G1 F30000
G1 X230 Y15
G28 X ; re-home XY
;===== fmech mode fast check============================
;===== noozle load line ===============================
M975 S1
G90
M83
T1000
G1 X18.0 Y1.0 Z0.8 F18000;Move to start position
M109 S{nozzle_temperature_initial_layer[initial_extruder]}
G1 Z0.2
G0 E2 F300
G0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}
G0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}
G0 X239.5
G0 E0.2
G0 Y1.5 E0.700
G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}
M400
;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==
;curr_bed_type={curr_bed_type}
{if curr_bed_type=="Textured PEI Plate"}
G29.1 Z-0.04 ; for Textured PEI Plate
{endif}
;========turn off light and wait extrude temperature =============
M1002 gcode_claim_action : 0
M106 S0 ; turn off fan
M106 P2 S0 ; turn off big fan
M106 P3 S0 ; turn off chamber fan
M975 S1 ; turn on mech mode supression
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment