Diagnosing and fixing ringing versus vibration artefacts

Created on Saturday, September 30, 2017.

Diagnosing two common surface finish problems in low-cost printers.


This is ‘ringing’

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.

This is inherent vibration

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.

Fixing ringing

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.

Diagnosing the source of inherent vibration

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.

Method 1: Feel the vibrations

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.

Method 2: Print a test Object

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.

Fixing inherent vibration problems

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:

  1. Remove all bearings and bearing blocks from the Y carriage.
  2. Test-fit all bearings on both of the Y axis’ linear rods, and keep the three bearings that ran the smoothest.
  3. Reinstall the good bearings into the bearing blocks.
  4. Install the bearing blocks back on the Y carriage in a triangle configuration, matching the bearings to the rod that they ran most smoothly on.
  5. Remove one spring/screw assembly from the print bed to convert it into a 3-point setup too.
  6. Ensure that all belts are taut, and all linear rods are tightened down.
  7. Add a Z-brace mod to control vibrations created by the X and Z axes.
  8. Place the printer on a sturdy surface that resists or dampens vibration. I put the stock rubber feet on my printer, put the printer on a 25 kg concrete paving stone, put the paving stone on felt furniture pads, and put all that on an IKEA Lack table that was reinforced with angle brackets to keep the legs square.
  9. Make sure that the nozzle is clean and clear. Lost steps on the extruder are another source of vibration.
  10. Finally, start tweaking print speeds and acceleration/jerk to remove the ringing that remains.

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.

Preventative actions for avoiding vibration problems

Finally, anything you can do to minimise vibration will be an overall net positive for your print quality. For example,

  • Make the printer frame more rigid.
  • Put the printer on a solid, heavy base like a sturdy table or a paver block.
  • Put stiffer springs on the bed so that it bounces less.
  • Make the moving parts lighter so that it takes less energy to get them moving, and they bleed less energy when they come to a stop. An aftermarket Y carriage is a really good upgrade for an i3-style printer because it gives you stiffness, removes weight, and makes it easier to level the bed.
  • Make the non-moving parts of the printer heavier so that it takes more energy to get them vibrating.

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.

That's all there is, there isn't any more.
© Desi Quintans, 2002 – 2022.