What is Input Shaping and Why Should I Use It? #
Input shaping is a software process of resonances compensation to help cancel out the “ghosting” or ringing artifacts seen on 3d prints when quickly changing directions, as well as some of the vibrations of the printer itself. This is done by the firmware adjusting the accelerations while printing based on the M593 values set after tuning to combat the vibrations caused by the change in print direction, resulting in cleaner prints. Though, the ringing artifacts are generally caused by issues with the machine itself: the frame not being ridged, belt issues, and heavy mass movement from the bed or hotend and should be addressed first, if possible. While not a required feature, we have seen some noticeable improvements in print quality in our testing. Marlin has introduced this feature the 2.1.2 thanks to the work of tombrazier and the Marlin team. To read more on Toms work on Marlins Input Shaping, you can read his github post here.
Prerequisites and Recommendations
- Firmware updated to Marlin 2.1.2 or Unified 2.60 beta or later with Input Shaping enabled
- For best results a 32bit board is recommended due to the extra processing required.
- A slicer that can use custom Gcode macros, we recommend PrusaSlicer or SuperSlicer for this guide we will be using SuperSlicer.
- A shiny/non-matte color filament to better highlight the ringing
Profile Setup & Slicing #
Its recommended to have your slicer and filament profiles tuned for best results. Teaching Tech has an amazing resource for calibrating your profiles here.
Download the Ringing Tower STL which you will slice and use for the print test. For a CoreXY printer you should rotate the model 45 degrees, which isolates the A and B components of the motion system. Other than CoreXY, the model should be sliced as imported.
- layer height set to .2mm
- 1-2 perimeters or enable vase mode
- 0 infill and top layers
- Do not use the Arachne engine as it smooths out corners.
- High speeds settings for external perimeters, (90mm/s+ or the fastest you can reasonably achieve)
- High acceleration values (>= 1000mm/s^2) for X and Y
- Disable any minimum layer time settings (in SuperSlicer: Filament Settings> Very short layer time> Layer time goal = 0 to disable)
- Disable any slicer acceleration setting changes (Printer Settings>Machine Limits and set Max feed rates/accels and jerk limits to 0
- Turn off Linear Advance via the LCD menus on the printer or by adding M900 K0 to the starting Gcode
- Add the Input Shaping Test Gcode into Printer Settings> Custom G-code >After later change Gcode
This will run a test range from 15Hz to 60Hz
Slice the model with the required changes and verify the speeds are correct in the Gcode Viewer tab by changing the View: Feature Type at the bottom left to Speed
Correctly Sliced file
Incorrectly Sliced file
Measurements and Calculations #
After the print is complete, you will want to find the point where the print looks the best with the least amount of ringing. Measure the heights of the best results on X and Y and use the formula:
15 + 45 * (z / 0.2 – 2) / 297
Where ‘z’ is the measured Z height of the best results or input the values into our Input Shaping Calculator to get the values and Gcode commands to set compensation values.
For our example print the X looks best around 26.66mm and Y looks best around 26.62mm as well but your results may vary
Using the calculator, our end frequencies are 34.89 for X and 34.86 for Y and can be input with the Gcode command:
M593 X F34.89 Y F34.86
and saved with M500
The Results #
Finally we print a test calibration cube print with Input Shaping off and with it tuned and turned on,
While still being a new feature to Marlin, we have seen promising results so far with our testing and tuning of it. All while not requiring a raspberry Pi or ADXL to use it like you would with Klipper.