@DzzD - I would bet that you could sacrifice material and decrease printing time by eliminating the purge tower all together and increasing the amount of flushing if needed, since it poops faster than it can print.
Modified even further to a M6 CHT clone nozzle, you might be able to double that flushing speed, but the CHT may have it’s own problems cleaning out completely with 3 ports.
Of the few multi color prints that I have done, even modified at 50% less flushing volume with the OEM .4mm nozzle, I have not had color bleed even from dark colors to white or clear in PLA.
ETA I have effectively stopped doing multi color prints due to waste, especially if the flushing and purge quantities is triple or more the printing volume. My first lesson was the BL Christmas Cabin and I ended up doubling the number of plates to reduce the number of color changes to only two colors on one plate.
Yes, purge tower is not always requiere when you print large area and when the print start in a non visible area (inner walls), but if you print just a tiny area of one color, like a thin letter on a face) it is requiered to make the nozzle as clean as possible to begin printing with the new filament, would be nice to be able to bumbed the purge tower speed, for now it is 2.5/3s, it could be one second only I think
You can use the smaller one, 1mm³ 2mm width, but I am gonna try to improve the g-code to take care of what you pointed out.
@everybody : having some feedbacks as @leenanj did, from this g-code would be great, as I wont be able to make all requiered tests myself, so I will be able to make the g-code fully reliable/usable and will update my MR/PR to Bambulab Studio accordingly
Been using your fast filament changer gcode now on several prints.
Added a purge tower (width 10mm volume 1mm) to catch and blobs.
Along with my shorter PTFE run from the AMS changing filament is now about 50 seconds.
This has been working great.
Probably not anywhere to go from here as far as speeding the change up.
Improving the T g-code, wich is responsible of cutting, rewinding and reloading filament, it take10s (not couting unload/load) and nothing can be done from g-code, this is a single command, it is hardcoded probably in the firmware maybe Bambulab ca do something :
cutting filament can be done three times faster without any risk
path from the cutter location to the purge location can be made at max speed
some pauses can be removed.
They could also enable a little faster unload/reload of filament from AMS
(I have posted an issue on Git about this T g-code)
Maybe 10 secondes could be gained again.
And choice between multi-color and monchrome would become definitivly much more easy.
Without a prime tower there was no blobs at all, color transition looked excellent.
Speed was slightly faster than previous gcode.
Had flushing volumes at 1.0 and saw little to no bleeding.
I printed a cone going from clear filament to black and back again.
95s to go from black to clear, 45s from clear to black.
Running flushing volume at 0.5 will yield about 4s more savings in time.
Many thanks for you feedback, I have done some tests and get good results tool
I did a last modification, here is probably the latest version (I have also updated my MR to Bambu Github) :
I cant post any new images now on the forum … forum block it, but I tried lite green text thinner than 0.4mm over a black backgroung and I cant see any default !
EDIT: now I can post
Printed without purge tower and new filament g-code
50 seconds spunds good, but 100 seconds look very slow, did you have to purge more than 650mm³ ? I think that the maximum I have used from black to white was 650mm³
Printer : Change Filament g-code
M620 S[next_extruder]A
M204 S9000
{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}
G17
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 ;** only requiered when printing by object ?! otherwise going + 0.5mm should be enought
M106 P1 S0
M106 P2 S0
;M104 S[nozzle_temperature_range_high] ;** Change temp to max without waiting, waiting would take age for nothing
;M104 S275 ;** Change temp to 275°c without waiting, waiting would take age for nothing
;** Go to cutting current filament position
;**G1 X20 Y50 F24000 ;**doing in two path to avoid problem on cutter actuator
G1 X20 F18000
G1 Y50 F18000
G1 Y-3
{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}
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 * 1.5} ; 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 * 1.5}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
G1 E{(flush_length_1 - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
{else}
G1 E{flush_length_1} F{old_filament_e_feedrate * 1.5}
{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 * 1.5}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_2 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
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 * 1.5}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_3 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
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 * 1.5}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
G1 E{(flush_length_4 - 1) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.25 F120
; FLUSH_END 4
{endif}
;**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]
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]
{else}
M204 S[default_acceleration]
{endif}
{else}
G1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F18000
{endif}
M621 S[next_extruder]A
Hi all,
Very interesting topic! (with the same fantastically mad people at work:)
Will give it a go to speed up PLA prints with PETG support interface.
Any recommendations for the purge volume, multiplier and purge tower or not for this combo?
I just did a try and it works perfeclty ! the only donwsiden but that much annoying is that PETG layers interfaces stick better to the part than to the supports.
So after removing suport you have to remove the interfaces that stay a little sticked to the part, easy job, leave a perfect layer, like a first layer on a flat surface
PLA white, PETG green (Obviously interface Z gap == 0), I wouldn’t have believed this works as well as support-W