Diagnosing and fixing ringing versus vibration artefacts
Diagnosing two common surface finish problems in low-cost printers.
Ringing (or ripples or shadowing or ghosting or echoing) is a surface finish defect in 3D prints that is created by the sudden acceleration of the printer’s moving parts. When part of the printer is jerked into motion, especially when it’s the build platform that is being moved, it shakes the whole machine. This shaking can become visible as ripples in the surface of the print, which are particularly visible next to a corner or after a surface feature. The vibrations that cause ringing last for a short time, but quickly dissipate into nothing and leave a clean surface for the remainder of the face.
If the waves on the part don’t dissipate, then you’re looking at an inherent vibration problem. This is more difficult to deal with because it means that the moving parts are constantly creating pretty boisterous vibrations of their own.
A closer view of a single line (in this case, the skirt line) shows what is actually happening. As the printer moves, the bed vibrates up and down along the Z axis. The vibrations bring the surface of the bed closer to the nozzle or farther away from it, which creates a regular pattern of too-squished and not-squished-enough plastic. And because the vibration is inherent to the movement of the printer itself, and not to the sudden jerk of the printer stopping or starting, the bed never has the chance to settle back to a consistent nozzle distance.
Since ringing is caused by temporary vibrations created by the printer as it jumps in speed, your first action should be to reduce jerk to make those vibrations less violent to begin with. Jerk is the initial burst of speed that gets a printer moving from a stop, and it also figures into acceleration and deceleration calculations (at least in Marlin firmware). Reducing jerk will result in a gentler print, but it will also make your prints take a bit longer. After reducing jerk, you can also reduce acceleration to help the printer stabilise.
M501 ; Read current firmware values
M204 S1500 ; Set X/Y acceleration to 1500 mm/s^2
M205 X5 ; Set X/Y jerk to 5 mm/s^2
M500 ; Save edited firmware values
You can enter this gcode into your terminal, or you can add it to your start gcode script, or you can get super fancy with your slicer and see if you can deploy variable jerk and acceleration depending on the feature being printed at the time. This is post-processing code for Simplify3D, and should be put into the Additional terminal commands for post-processing box in Edit process settings → Scripts:
{REPLACE "; inner perimeter\n" "; inner perimeter\nM204 S1500\nM205 X5\n"}
{REPLACE "; outer perimeter\n" "; outer perimeter\nM204 S750\nM205 X3\n"}
{REPLACE "; solid layer\n" "; solid layer\nM204 S750\nM205 X3\n"}
{REPLACE "; infill\n" "; infill\nM204 S3000\nM205 X10\n"}
{REPLACE "; gap fill\n" "; gap fill\nM204 S1500\nM205 X5\n"}
{REPLACE "; skirt\n" "; skirt\nM204 S750\nM205 X5\n"}
Simplify3D comments every type of feature, so the above code uses the REPLACE post-processor command to find these feature comments and append M204
and M205
calls to the end of them. This means that I can print fast and dirty where it doesn’t matter (infill and internal perimeters), but slow down for best print quality when it’s visible (outer perimeters and top/bottom layers). This lets me print at 150 mm/s or faster without a net decrease in quality.
If you don’t use Simplify3D, read the gcode that’s generated by your slicer and see whether there are feature comments. If so, you’re in luck and you can edit your code using find/replace, or write a quick bash script that automatically does it for you.
If you have a vibration problem then you need to eliminate as much friction and vibration as you can. Where you need to remove it from depends on what is causing it, and there are two ways to find out.
Use a gcode script to move the printer around. Put your fingers on the print bed and feel the vibrations, or use an accelerometer or a smartphone accelerometer app to quantify the vibrations on the bed.
G28 X0 Y0 Z0 ; Assuming a 200 × 200 × 180 mm volume
G1 F6000 ; Base speed 100 mm/s
G1 X100 Y100 Z90 ; Center all axes
G1 X10 ; Traverse X 3 times
G1 X190
G1 X10
G1 X190
G1 X10
G1 X190
G1 X100
G1 Y10 ; Traverse Y 3 times
G1 Y190
G1 Y10
G1 Y190
G1 Y10
G1 Y190
G1 Y100
G1 Z10 ; Traverse Z 3 times
G1 Z170
G1 Z10
G1 Z170
G1 Z10
G1 Z170
G1 Z90
M1 ; Sleep. Stops printer from going back to home.
A gcode script like this might return this kind of data once you’ve put some effort into making it all pretty:
In this graph, I put my phone face-up on the print bed and ran three different motion scripts while I recorded the accelerometer output. By comparing how vibrations along the Z axis change (i.e. the bed is vibrating up and down), you can see that any movement involving the Y axis is a real problem.
I recommend my design, TEST - The Generalised Test Object, which can help you separate the effect of axis moves on surface finish.
If your problem is that movement along Y creates vibrations, for example, then the side of TEST that is printed horizontally along X will look good, but vibration will be visible on all other faces because the Y axis is moving for all of them. The curved faces of TEST will also become flattened if your motion components are not moving smoothly enough.
When I was setting up my second printer, a Wanhao Duplicator i3 Plus, I went through a looooooong process of tracking down and fixing an inherent vibration issue. I wrote the whole ordeal up in my printer maintenance log, if you want to read that.
Long story short, I worked out that the vibrations were mostly being caused by the Y carriage of the bed as it was being moved back and forth, although some residual vibration was still present when only the X axis moved. The general solution was:
Your own solution will largely be mechanical in nature like mine was. At the end of it you may still have some surface finish problems, but they’ll be downgraded from horrible vibration problems to normal ringing problems, which can be solved by tweaking jerk and acceleration as demonstrated earlier.
Finally, anything you can do to minimise vibration will be an overall net positive for your print quality. For example,
And if you’re thinking about a new printer, consider a printer that moves as little mass as possible (i.e. a printer that doesn’t constantly move the print bed around). Something like a quad-rap motion system (Ultimaker/Zortrax M200/Wanhao Duplicator 6) or a Core-XY motion system or a Delta motion system that only moves the extruder block.