Ideas on boosting speed for multi-color printing with AMS

You can do multicolor without tower. Tik it out in Orca. I nearly never use a tower. Just make sure enough filament is pooped and start layer with inner wall (I do) or with infill. Works very well for me.
–>add: together with DzzD’s filament change gcode

2 Likes

I used some retraction \ anti-waste code originally posted but is there newer\updated?
Did you shorten your PTFE tubes?
Anything else to benefit?
My LiDar doesnt turn on\off with purging so … must be old code etc.

Any chance I could get some specifics, eg link or speciffic revsion and steps?

1 Like

uhm… Now you have me questioning it… I copied and pasted the most recent updated code from DzzD’s Github. I’ll post the link here in a bit or attached my code within.

I reduced my PTFE line to the bare minimum while still suiting my setup needs. I’ll get those specs too if you want.

The biggest benefits are

  • Faster purge ~ hard poops become simple stringy poops & like 20% hard from the end of purging
  • No prime tower needed
  • Color change significantly quicker / extra reduction in time when reducing PTFE from AMS - Buffer
  • little to no risk of purge chute clogs ~ faster extrusion allows the initial purge to reach the bottom of “chute door” and the weight from the last bit of hard poop adds weight for poop to slide down the chute
1 Like

Hi, everyone. I’m totally new here. Just googled and found this thread…read through all the great ideas but did not see mine covered. Is anyone working on a way to take advantage of the fact these machines should know the exact nozzle and head geometry in space while also knowing the exact geometry of what’s being printed in space…together? Every time I watch my (new and very cleverly designed) bambu x1 print I wonder if there’s a way to make it smart enough to print say 25 layers of one color and then, if the clearance is available, dive back in and catch up on the other 25 layers. It would do this WITHOUT changing filmament between every layer. I’m fairly certain this would speed multi-color printing WAY up. The programming would be very similar to what manufacturing programmers do in software like surfcam for cnc machines (3 axis or higher) where the software can optimize end mill clearance relative to the part and generate tool paths. What am I missing? Would love to hear some thoughts…

Thanks!

I’ve had similar ideas and yeah it should be very effective when applicable. The only current optimization is that when a layer is complete it starts the next layer with whatever color is already loaded.

That current scheme is low hanging fruit though while your idea is likely really tricky to implement. You could try adding a feature request to Bambu Studio and/or Orca Slicer. If you do, please post the issue number(s) here bc I’d want to track them for possibly interesting discussions.

if the clearance is available, dive back in and catch up on the other 25 layers

you don’t only need clearance from the nozzle, toolhead, fan duct etc but your airflow from the aux & parts cooling fan will not get there if you are printing inside an enclosed geometry and it’ll create artifacts —> inhomogeneous print quality

2 Likes

It often wouldn’t apply though: imagine printing a flag upright. I think the only optimization possible is what’s already implemented. Only single colored objects separated with enough clearance (or when colors otherwise don’t touch any other color bc of voids) would apply - much like current ‘print by object’ but with less restrictions because like you say we could print eg. 25 layers at a time as opposed to the entire object.

Yeah unfortunately that might be an even worse problem than the complexity of implementing it

“it often wouldn’t apply”

^— correct. software would need to be developed to do this. I’m not saying it’s easy. it would need to run optimization during slicing and identify, for lack of a better term, dive pockets. these dive pockets would need to have geometry that protruded upward at some maximum slope angle (due to nozzle tip geom) and only a couple dozen layers (due to head clearance). It would be very complex to implement but could save a bunch of time on the thing I’m printing now…certainly small portions of most multi color models could benefit. No idea what percent…haven’t thought about it that much.

Thanks for the great feedback!

great point… but for 25 layers I think there’s still a chance airflow would be sufficient.

I had a similar idea but for the prime tower, instead of priming on every single layer, why not prime only when a color change occurs.

For example, imagine printing a tall model with only one color change near the end. I was printing a fishing float, it’s all in one color except for the last 10-20 mm, a color change to red is made. if prime tower is enabled, there’s a lot of wasted material but it reduces the blobs which is good.

This can be optimized with a minimum of 3 layers at the beginning, and one layer for each color change after layer 3.

1 Like

Lots of people (including me at some point in time) get target fixated on the prime tower but it weighs virtually nothing, very low density. If you want the savings anyway, completely disabling the prime tower typically works just fine. Print inner wall before outer just in case.

hi, i have just got a bambu p1s printer and find the colour change on my frst print really slow, ive read this post with much interest but im a bit clueless what gcode i use and where it goes to make it work, would anyone be able to help me with this please so i dont screw up my new printer haha,
thank you

Hi all, as this thread was recently poped out, I wanted to give what I have used for monthes now, I did not have the wanted free time to update & publish all things I would like to, including this filament change g-code, hope soon to have some more free time.

I may have done some tests & posts elsewhere, but this one work fine for me and is pretty short :

image

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




; Save/Pullback XX mm filament before cut (as this small part of filament is not yet in the melting area)
; This value may need to be adjusted or removed and I cant guarantee that it will be good choice for all situation
; If modified search and replace all occurrences of "flush_length_1 - xx" by "flush_length_1 - yy (and flush_length_2 3 4 ...)"
G1 E-10 F1800 ;May need to be low as it can make random clog/underextrusions 


;Set fan 1 (part cooling) to 100%
;- try to reduce filament spillage while cutting filament and until hotend reach purge bucket;
;- this also make the filament purged more brittle
;- I was not able to determine the best value : 
;   * lower value make could sticky blobs, more chance that they pop out of the purge bucket orclog it
;   * higer value make purged filament like spagetti, and took a lots more space
M106 P1 S256
M106 P2 S0 ; Auxiliary fan set to zéro

;Using M104 rather than M109 make that printer will not wat for the nozzle to reach its final temperature
;Why is it safe ?
;- because hotend is heating very fast
;- because changing filament take ages
;- because temperature for purging do not need to be set precisly
{if new_filament_temp > 142 && next_extruder < 255}
M104 S[new_filament_temp] ; Nozzle will change its temperature while doing other stuff
{endif}

;Fastly go near the filament cutter pusher
G1 X54 F24000
G1 Y0 F24000

{if toolchange_count == 2}
; get/set travel path for change filament
M620.1 X[travel_point_1_x] Y[travel_point_1_y] F24000 P0 ;X=54 Y=0 => probably cutter
M620.1 X[travel_point_2_x] Y[travel_point_2_y] F24000 P1 ;X=54 Y=0 => probably cutter
M620.1 X[travel_point_3_x] Y[travel_point_3_y] F24000 P2 ;X=54 Y=245 (travel_point_3_y = 245) => probably purge bucket
{endif}


M620.1 E F{old_filament_e_feedrate * 3} T{new_filament_temp}
T[next_extruder] ; Cut the filament, purge the remaining old filament, unload old filament & load new filament
M620.1 E F{new_filament_e_feedrate * 3} T{new_filament_temp}


M400


;  Purge filament by pulse : the main change from original code is that here :
; - we are using constante time pause between pulse rather than a proportional time based on purge volume. Constant pulse pauses use a lot less time.
; - we use purge filament flow rate higher, it is safe as we are making little pause that let the plastic get molted more before extruding each pulse
{if next_extruder < 255}

; I have always wondering why this part was split in four blocks ?
G92 E0
{if (flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4) > 10}

{if (flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10) > 10}

; FLUSH_START
{if (flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10) > 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 + flush_length_2 + flush_length_3 + flush_length_4 - 10) - 22.7) * 0.25} F{old_filament_e_feedrate * 1.5}
G1 E0.2 F120
G1 E{((flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10) - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
G1 E{((flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10) - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
G1 E{((flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10) - 22.7) * 0.25} F{new_filament_e_feedrate * 1.5}
G1 E0.2 F120
{else}
G1 E{(flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4 - 10)} F{old_filament_e_feedrate * 1.5}
{endif}

{else}
G1 E{(flush_length_1 + flush_length_2 + flush_length_3 + flush_length_4)} F{old_filament_e_feedrate * 1.5}
{endif}


; FLUSH_END
{endif}



;The main change here is that we are extruding very slowly to let time for pressure to be released from the nozzle in addition to the 1 mm extrusion
;This help (IMHO and based on my tests) in making using a purge tower useless
G1 E1 F30 ; Compensate/slow down for filament spillage / pressure during two second
; FLUSH_END

M400
M106 P1 S256
G92 E0
G1 E-[new_retract_length_toolchange] F1800

G1 E-0.5

;I have no clue of what S3 parameter means
M400 S3; this one is required : if it is missing time will be counted as "Sparse/Wall or other Print" time, if it is present time will be couted as "Travel" time


;The followng comment is a TEST COMMENT
;The following line make mess on Bambu Lab printer so it is commented, I don't know why but all 
;  following moves speed goes down to a very slow speedwhen using this "G1 Y245 F18000"
;G1 Y245 F18000; Actually nozzle seems to be already there but to have a right preview on Bambu Studio it is required to add this move
;/END TEST COMMENT

;The main change here is that as the filament is cooled and brittle we can (try) to break it before wiping the nozzle
;try to break the filament before wiping
G1 Y250 F18000
G1 Y235 F18000
G1 Y250 F18000
G1 Y235 F18000
G1 Y265 F18000

; shake to put down garbage
G1 X80 F18000
G1 X60 F18000
G1 X70 F18000
G1 X90 F18000

G1 X100 F10000 ;wipe and shake
G1 X70 F10000 
G1 X100 F10000
G1 X70 F10000
G1 X100 F10000
G1 X125 F10000
G1 Z{max_layer_z + 3.0} 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
G1 E0.5
12 Likes

Hi ! I’m very new here but I would like to know which command / combination of command makes the filament swap. Is it only M620 S[Next_extruder]A ?

There are (experimental last I saw) slicers that will do non-planar printing. I assume it does it through a combination of variable layer thickness and allowing for more complex toolpaths (and yes - nozzle geometry would have to be included in the planning unlike the normal planar prints)

It is interesting, as this can also make prints stronger and less likely to show failure at layer lines.

That approach could help, by approaching it as maximizing the print volume of one color before switching to the next. It makes the logic much more complex, in multiple ways. But, for an AMS solution, it could (depending on the model of course) make a big difference in waste and time.

Hey, thanks for sharing this and PR to bambulab.

Is this compatible with the new long retraction feature?

If I have a single color change near the end or top of a model, I disable the prime tower altogether, so far I’ve seen no issue with this. What I don’t understand is if there is ample space for the prime tower in it’s normal location, why not have an option to prime when needed by bringing the build plate back up, prime, lower, and continue? This way filament is not wasted for the entire model.

Which flavor of Capricorn? The XS (1.9mm ID) or the TL (2mm ID) or “filament guide” (3mm ID) capricorn? I’m honestly thinking the TL would be narrower to help prevent TPU from bunching up in the AMS (yeah, i know, not recommended, but I get 98A to feed pretty well, but it does jam up every now and then), while still being large enough for a friction free filament path.

What about the coloring speed on the computer if I am creating my own models?
I have a P1S printer with the AMS … I am doing architectural models and printing them.
The coloring process takes forever on the bambulab app. What are the other alternatives to that, and could I do the coloring process specifically on Rhinoceros 3D?