For anyone who has attempted to print ABS or ASA, I'd fall over backwards if you said you didn't run into some warping issues, or at least implement some measures so you wouldn't run in to warping issues. It's a fantastic filament, and great for functional parts and tools, but oh boy does it give some of us enthusiasts a headache!
Introduction
I live in a cold climate with erratic humidity levels, so warping is something I have had to pay particular attention to while tuning my printer (Bambu P1S is the printer in question here). I have put the printer in a creality canvas enclosure (yes, I know, blasphemous. It works a treat though!), I've installed an active chamber heater and I have a pre-heat routine that has been refined and tuned. Alas, this wasn't enough to rid me of warping issues entirely. I found that after all this, the parts would be perfect until the print finished and the bed turned off, after which the bottom of the print would cool too quickly and the part would warp. They'd then either peel from the build plate or take the whole built plate with it.
To combat this, I have whipped up some g-code that, instead of turning the print bed off entirely at the completion of a print, steps down the bed temperature in 5deg increments over 10-minute intervals. This allows the part to cool down much more consistently and was the final step toward banishing warping issues from hindering my printing.
Solution - Warping During Printing
Mitigating warping during the print is mostly just about getting ambient conditions and bed adhesion right. When making attempts to mitigate warping during a print, users should always tackle ambient conditions first, then bed adhesion second. That is because more often than not the ambient conditions are the main cause of warping, and better bed adhesion can mask that and act as a band-aid fix.
Mitigation strategies for warping during the print may include:
-
Pre-heat printer chamber
-
I live in a cold climate, so I tend to use the print bed to heat up the chamber by putting the heat bed at 100deg Celsius and waiting 2-3 hours.
-
-
Improve bed adhesion
-
This could be an entire article in itself. Instead, the improvements I use are: clean bed with dish-washing soap, don't touch the bed with my hands, apply a layer of glue on to the print bed and I have increased my nominal bed temp for ASA from 90deg to 95deg.
-
-
Install an active chamber heater. I have a chitu systems mini heater installed in my Bambu Lab P1S and it is one of the best upgrades I have done to it! Absolutely recommend.
-
Eliminate drafts that are incident on the printer
-
An additional enclosure around the printer
-
As I said earlier, I have my P1S in a Creality canvas enclosure and it helped the printer maintain adequate ambient temperature a lot!
-
-
Try to design out any sharp corners
-
Use rafts, brims or mouse ears
-
Quick google will tell you all you need to know about this
-
-
Play around with infill settings
-
Type
-
Percentage
-
-
Design a wall that surrounds the print. This will help keep the heat close to the print and will either warp before the actual print or warp instead of the print.
I have listed these in the order that I think you should try. Not all of these strategies must be implemented, but it's certainly worth knowing what's available so you can choose the appropriate strategies that match your printer and environment.
ShapeMaven resides in one of the coldest parts of Australia (gets down to about -8 deg Celsius in the depths of winter) that is also quite humid, so warping is a big issue!
The methods that have my P1S printing ASA like it's PLA include: pre-heat the chamber (with both the bed and the Chitu Systems heater) to about 55deg Celsius, canvas enclosure with a little extra insulation, a wee bit of liquid adhesion agent (generic stuff from Jaycar) and a HEPA/Active Carbon filter for peace of mind! I have also added the following code to prints that have a large (roughly more than 1/5 of the build plate) surface on the build plate.
Solution - Warping When Print Is Finished
Before you have a crack at implementing this solution, there are a couple of important things to keep in mind.
ShapeMaven understands that editing g-code may result in damaged equipment. This article is to be used for informational purposes only.
Users who wish to implement this solution should do their own testing on their machines to verify (1) the code functions as it should, (2) these changed do not introduce safety concerns and (3) these changes do not introduce risk of damaging equipment.
With that all out of the way, we may continue.
The code contains lines like this:
M140 S90 ; set bed temp to 90
G4 S600 ; wait 10 min
And here's what the components mean:
-
M140 calls the bed function
-
S90 sets the temperature to 90deg (Celsius for my machine)
-
G4 calls for a wait
-
S600 sets that wait to 600 seconds (10 minutes)
When users first implement this code, ShapeMaven recommends testing the functionality by doing a 'dummy print' that is small, and observing the printer behaviour at the end of the print.
During my testing, I change '600' to '10' to speed up the testing. This made the wait between increments 10 seconds as opposed to 10 minutes.
This is where the temperature step-down code comes in handy. This is a procedure of implementation:
1. Click the 'Click to edit preset' button in the printer menu of Bambu Studio.
2. Find the 'Machine end G-code' field in the menu
3. Remove the M140 S0 ; turn off bed line
4. Add in code to step down temperature, right at the end of the end G-code!
And this is the code:
; ====== Code block by ShapeMaven 09/05/2024 ======
; == If filemant is ASA or ABS, step down temp. Otherwise turn print bed off ==
{if (filament_type[initial_extruder]=="ABS")||(filament_type[initial_extruder]=="ASA")}
M140 S90 ; set bed temp to 90
G4 S600 ; wait 10 min
M140 S85 ; set bed temp to 85
G4 S600 ; wait 10 min
M140 S80 ; set bed temp to 80
G4 S600 ; wait 10 min
M140 S75 ; set bed temp to 75
G4 S600 ; wait 10 min
M140 S70 ; set bed temp to 70
G4 S600 ; wait 10 min
M140 S65 ; set bed temp to 65
G4 S600 ; wait 10 min
M140 S60 ; set bed temp to 60
G4 S600 ; wait 10 min
M140 S55 ; set bed temp to 55
G4 S600 ; wait 10 min
M140 S50 ; set bed temp to 50
G4 S600 ; wait 10 min
M140 S0 ; turn off bed
{else}
M140 S0 ; turn off bed
{endif}
; ====== End of code block ======