Voron Resonance Measurement Guide — ADXL345, Manual, and Analysis
Calibration Klipper Advanced
Every Voron printer has resonant frequencies — natural vibration modes that get excited by the rapid acceleration and deceleration of printing. These resonances manifest as ringing (ghosting) in your prints, visible as parallel ripples after sharp corners or text features. The solution is input shaper, which Klipper uses to cancel out specific frequencies by applying a controlled counter-vibration. But effective input shaping requires accurate resonance measurements. This guide covers everything from mounting an ADXL345 accelerometer on your Voron to interpreting frequency response graphs and choosing the right shaper configuration. Last updated: May 2025.
Why Measure Resonance?
Voron printers are designed for high speed, but their rigid frame and gantry still have resonant frequencies. Without input shaper, acceleration is typically limited to 3000-5000 mm/s² before ringing becomes visible. With proper resonance measurement and input shaper tuning, Vorons can reach 10,000-20,000 mm/s² with minimal ringing. The key insight is that different Voron builds have different resonant frequencies depending on:
- Frame size (250mm vs 300mm vs 350mm)
- Print head mass (StealthBurner vs MiniStealth vs AfterBurner)
- Gantry configuration (V2.4 flying gantry vs Trident fixed Z)
- Belt tension and rail smoothness
- Mounting surface and enclosure stiffness
Because these factors vary between individual printers, generic input shaper settings from another person's Voron will never be as good as measuring your own printer's actual resonance.
Method 1: ADXL345 Accelerometer — The Professional Approach
The ADXL345 is a 3-axis accelerometer that Klipper can read directly via SPI or I2C. Connecting one to your Voron gives you a direct measurement of the vibration at the toolhead, which is exactly what you need to tune input shaper.
Hardware Options
- ADXL345 on USB (Raspberry Pi Pico) — An ADXL345 connected to a Pico that presents itself as a USB serial device. This is the cleanest option since it doesn't require wiring to your mainboard. You can plug it in only when doing measurements.
- ADXL345 on SPI (direct to mainboard) — Wired directly to your BTT Octopus, SKR, or Manta board. Requires configuring the SPI pins in your Klipper config. Convenient if you leave it permanently installed.
- ADXL345 on I2C (to Raspberry Pi) — Connected directly to the Pi's I2C pins. Works but requires that the Pi isn't in an enclosure where vibrations differ from the toolhead.
- LIS3DH or MPU6050 — Alternatives to ADXL345. Supported by Klipper but less common in the Voron community. LIS3DH has lower noise floor.
Mounting the Accelerometer
Accelerometer placement is critical for accurate results. The sensor must measure the same vibrations that affect the nozzle, not the frame or the gantry structure independently.
- Mount as close to the nozzle as possible. The ideal location is on the toolhead carriage, directly above the hotend heatsink. If you have a StealthBurner, there are printed mounts available on Printables and the Voron User Mods repository.
- Use a rigid mount. The accelerometer must be mechanically coupled to the toolhead. A flexible mount (foam tape, loose zip ties, long wires) will damp out the very vibrations you're trying to measure, giving you false low readings.
- Orient consistently. Mount the accelerometer so that its X-axis aligns with the printer's X-axis and its Y-axis with the printer's Y-axis. Label the orientation on the mount for repeatability.
- Secure the cable. The accelerometer cable should be routed to prevent it from whipping during high-speed moves, which would add noise to the measurements.
- Test with a manual move. After mounting, run a manual X or Y move while
watching the
ACCELEROMETER_QUERYoutput. The values should change smoothly and return to near zero when stopped.
Klipper Configuration for ADXL345
Add the following to your printer.cfg. The exact pins depend on whether you're using SPI, I2C, or USB-Pico:
# Example: ADXL345 on USB via Raspberry Pi Pico
[mcu rpi_pico]
serial: /dev/serial/by-id/usb-Klipper_rp2040_...
# Example: ADXL345 connected to mainboard via SPI
[adxl345]
cs_pin: mcu:PA4 # adjust for your board
spi_bus: spi1 # adjust for your board
# Example: ADXL345 on I2C via Raspberry Pi GPIO
[adxl345]
# No cs_pin needed for I2C
i2c_bus: i2c.1 # for Pi GPIO 2/3
i2c_address: 83 # default ADXL345 address (0x53)
After adding the config and restarting Klipper, test the connection:
# In the Klipper Console (Fluidd/Mainsail terminal tab)
ACCELEROMETER_QUERY
# Expected output:
# Recv: adxl345 values (x, y, z): 22.12, 15.34, 980.87
# The Z value should be ~980 (gravity) when the toolhead is at rest
MEASURE_AXES_NOISE
# Expected output shows noise floor for each axis
# Values below 10-20 mg are good
Collecting Resonance Data
Once your accelerometer is confirmed working, you can run the resonance measurement procedure. Klipper will move the toolhead at varying frequencies while recording the accelerometer data.
Basic Resonance Test
# Test X-axis resonance
TEST_RESONANCES AXIS=X
# Test Y-axis resonance
TEST_RESONANCES AXIS=Y
# Test both axes (takes longer but provides complete data)
TEST_RESONANCES AXIS=1,1
The test moves the toolhead back and forth on the specified axis, sweeping through
frequencies from 5 Hz to 133 Hz (configurable with FREQ_START and
FREQ_END parameters). The output appears in the console and is also
saved to /tmp/resonances_x_*.csv and
/tmp/resonances_y_*.csv.
Advanced Testing Options
For more precise measurements, especially on larger Voron 2.4 350mm builds:
# Test a wider frequency range (covers larger printers with lower resonances)
TEST_RESONANCES AXIS=X FREQ_START=10 FREQ_END=150 ACCEL_PER_HZ=75
# Higher sweep density (more frequency points = smoother graph)
TEST_RESONANCES AXIS=X HZ_PER_SECOND=2 # default is 1
# Reduce testing acceleration to prevent mechanical damage
TEST_RESONANCES AXIS=X ACCEL_PER_HZ=75 # default is 75
# Maximum input shaper frequency (for high-speed Vorons)
TEST_RESONANCES AXIS=Y MAX_SMOOTHING=50
Interpreting the Frequency Response Graph
Klipper generates a frequency response graph saved as a PNG in the same directory as the CSV data. Here's how to read it:
- X-axis: Frequency in Hz (usually 10-150 Hz range)
- Y-axis: Power spectral density (amplitude of vibration)
- Peaks: Each peak represents a resonant frequency. The taller and narrower the peak, the stronger and more localized that resonance is.
- Primary peak: The highest peak is your dominant resonant frequency, which input shaper will target for cancellation.
- Secondary peaks: Smaller peaks at other frequencies. A well-built Voron should have one or two dominant peaks, not a forest of them.
Ideally, a Voron should show:
- One clean dominant peak per axis (typically 40-80 Hz for X, 30-70 Hz for Y on 350mm builds)
- Peak width at half height less than 10 Hz (narrow peak = clean resonance)
- No significant peaks above 100 Hz (these indicate high-frequency rattling from loose components)
- Similar peak frequencies between X and Y (difference of more than 20 Hz suggests uneven belt tension or frame stiffness)
If you see many peaks or very broad peaks, check:
- Loose screws on the accelerometer mount
- Loose gantry components (belts, pulleys, rail carriages)
- Unstable printer surface (printer rocking on the table)
- Wires slapping against the frame during testing
Generating Shaper Recommendations
Once you have clean resonance data, Klipper can automatically recommend the best shaper configuration:
# Run full calibration with shaper recommendations
SHAPER_CALIBRATE
# This runs resonance tests on both axes, analyzes the data,
# and outputs recommended settings like:
# Recommended shaper type for X: zv (frequency = 45.2 Hz, damping = 0.15)
# Recommended shaper type for Y: mzv (frequency = 52.1 Hz, damping = 0.20)
Klipper evaluates several shaper types and ranks them by effectiveness:
- Z (ZV): Simplest shaper. Best for single, dominant resonance peak. 20-30% vibration reduction.
- MZV (Modified ZV): Better damping than ZV. Good for moderate ringing. 30-40% reduction.
- EI (Eckman-Input): Very smooth, broad damping. Best for multiple resonance peaks. 40-50% reduction.
- 2HUMP EI: Wider damping notch. Good for varying resonance frequencies. 45-55% reduction.
- 3HUMP EI: Widest damping. Best for printers where resonance frequency changes during printing. 50-60% reduction.
The recommendation includes a "smoothing" value — higher smoothing means more aggressive vibration cancellation at the cost of slightly rounding sharp corners. For Voron printers, MZV or EI are typically the best balance of effective ringing reduction and minimal corner smoothing.
Saving the Results
# After SHAPER_CALIBRATE finishes and you're satisfied with the recommendation:
SAVE_CONFIG
# This appends the recommended shaper settings to your printer.cfg
# and restarts Klipper. The recommended section looks like:
# [input_shaper]
# shaper_type_x: mzv
# shaper_freq_x: 45.2
# shaper_type_y: mzv
# shaper_freq_y: 52.1
Method 2: Manual (No Accelerometer) Approach
If you don't have an accelerometer, you can still tune input shaper using a test print. This method is less precise but can achieve 80-90% of the improvement.
- Print a ringing test tower (available on Printables, thingiverse, or generate one with a gcode generator). The tower has sharp corners or text at various heights, with each section using a different shaper frequency.
- Inspect each section under good lighting. The section with the least ringing tells you the correct shaper frequency for that axis.
- Repeat for the other axis (you need two test towers, or a single tower that tests both axes at different heights).
- Enter the frequencies into your printer.cfg manually in the
[input_shaper]section.
Manual tuning typically requires 3-5 iterations to dial in. The accelerometer method achieves the same result in a single automated pass and is significantly more accurate. If you're building a new Voron, spending $10-15 on an ADXL345 and a Pico is one of the best upgrades you can make.
Advanced: Plotting and Analysis Tools
For power users who want deeper analysis, the CSV data from
TEST_RESONANCES can be plotted with external tools:
# Copy CSV data from the Pi to your computer
scp pi@voron.local:/tmp/resonances_x_*.csv .
# Python script to plot the data
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Load the CSV
data = pd.read_csv("resonances_x_20250501_123456.csv")
# Convert to numpy arrays
freqs = data.iloc[:, 0].values
psd_x = data.iloc[:, 1].values
psd_y = data.iloc[:, 2].values
psd_z = data.iloc[:, 3].values
# Plot
plt.figure(figsize=(12, 6))
plt.plot(freqs, psd_x, label="X-axis")
plt.plot(freqs, psd_y, label="Y-axis")
plt.plot(freqs, psd_z, label="Z-axis")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Power Spectral Density")
plt.title("Voron Resonance Measurement - X Axis Test")
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig("voron_resonance_plot.png", dpi=150)
You can also use Klipper's built-in graphing by navigating to
http://voron.local:7125/server/files/tmp/ in your browser (Moonraker
API) to view the generated PNG files directly.
Common Resonance Measurement Pitfalls
- Accelerometer not rigid enough: The most common source of bad data. The mount should feel like it's part of the toolhead. Printed PLA mounts work fine but must have zero play.
- Testing at wrong speed: The
TEST_RESONANCEScommand sweeps frequencies automatically, but if your max acceleration limits are too low, the test may not excite higher frequencies effectively. Setmax_accel_to_decelto at least 5000 for testing. - Ignoring Z-axis vibration: Most input shaper tuning focuses on X and Y,
but Z-axis vibration can also cause ringing on thin walls and overhangs. Test
with
AXIS=Zif you have a Z-tilt system. - Not re-running after changes: If you change hotend, toolhead, or belt tension, your resonant frequencies will change. Re-measure after any mechanical modification.
- Running shaper at wrong frequency: A shaper frequency that's off by 5-10 Hz will not only fail to cancel ringing but may amplify it. Always verify with a test print after saving new shaper values.
Re-Measurement Schedule
Resonant frequencies are not permanent. Re-measure your Voron's resonance:
- After any toolhead change (new hotend, extruder, fan mod)
- After belt replacement or retensioning
- After moving the printer to a different surface
- If you notice new ringing in prints that previously had none (indicates belt wear)
- As part of a quarterly maintenance routine for industrial-style consistency
Resonance measurement is one of the most impactful calibration procedures you can
perform on your Voron. A properly shaper-tuned machine running at 10,000 mm/s²
will produce cleaner prints than an untuned machine at 3,000 mm/s². The time
invested in setting up an accelerometer and running SHAPER_CALIBRATE
pays for itself in the first print.