Ideas on boosting speed for multi-color printing with AMS

Here is a result on a simple box :

Filament change time : 99 (with 400mm³ filament volumetric purge)

With original “Filament change g-code” and original PTFE length : 4h40m

With modified “Filament change g-code” and reduced PTFE length : 3h00m

This is 1h40m less, nearly 35% of printing time reduction :slight_smile:

3 Likes

@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.

1 Like

Ok, I have made the pull request to Bambustudio.

EDIT: sorry there was an error in gcode… will post it later

1 Like

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

1 Like

Ok, here is the new working g-code for “Change filament G-code” in printer settings :

Paste here :
image

Obviously, no warranty :slight_smile:

g-code removed / obsolete, see below for new optimized version
5 Likes

I tried your new gcode, definitely faster but leaves a blob on the print right after the change. Maybe a little to aggressive.

2 Likes

Did you use a purge tower ?, I did not make any test without

Probably it requiere more wipe at the end, (and a retraction that I have maybe removed by error)

2 Likes

No purge tower, usually don’t use them. Just a simple block with two color changes for a test.

Yes I think the added wipe would work.

1 Like

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

2 Likes

Please, give me more feedback, printing mutli-color twice faster is a big step forward !

1 Like

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.

2 Likes

Maybe there are some few things still doable:

  • 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 :
  1. cutting filament can be done three times faster without any risk
  2. path from the cutter location to the purge location can be made at max speed
  3. some pauses can be removed.
  4. 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.

New version, that should not requiere Purge tower !

I did some tests and results seems equivalent as using a purge tower or not, my fault I forget to set back a necessay g-code…

The good news is that is is not slower so without purge tower overall print time wshould be even better :slight_smile: happy

I have tried small black text written on white, wich is not the easiest, without any problem.

g-code removed obsolete, please view below for the new one

Thanks for the work on this, will give a test out.

1 Like

Tried out your newer fast gcode filament changer.

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.

This ones a keeper, Thank You

1 Like

Many thanks for you feedback, I have done some tests and get good results tool :slight_smile:

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 :slight_smile:
Printed without purge tower and new filament g-code


END EDIT

What’s your overall PTFE length ?

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

EDIT : g-code updated 26/04/2023
EDIT : g-code updated 28/04/2023
EDIT : g-code updated 08/05/2023
EDIT : g-code updated 24/09/2023

PR made for Bambustudio, if you want to vote :slight_smile:

2 Likes

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 would advice low because you dont care that PETG melt a little with PLA.

I have exacly the same idea to test PETG as a PLA support or vice-versa :slight_smile: let keep us informed of the results

My first tests will be with 100m³

I will start with another little test to get an idea for the best starting point:

https://www.printables.com/model/370605-bambu-lab-x1c-p1p-flushing-volume-calibration

and then focus on getting a clean change from PETG to PLA.

2 Likes

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 :slight_smile:

PLA white, PETG green (Obviously interface Z gap == 0), I wouldn’t have believed this works as well as support-W

image

1 Like