Voron VFA and Salmon Skin — Diagnosis and Elimination
Troubleshooting Calibration Print Quality
What Are VFA and Salmon Skin?
Vertical Fine Artifacts (VFA) are fine, closely spaced horizontal bands or ripples on the vertical walls of a 3D print. They appear as periodic texture that repeats every 0.5-2mm of Z height. VFA is distinct from Z-banding (which repeats at leadscrew pitch intervals of 2-8mm) and from ghosting/ringing (which appears at sharp corners). VFA is most visible on flat, vertical surfaces printed at moderate-to-high speeds.
Salmon skin is a specific type of VFA that creates a repeating diagonal or diamond pattern on the print surface, resembling the scales of a salmon. It is caused by periodic micro-stepping error in the stepper motor drivers — the motor's magnetic field creates small positional errors as it moves through each full step, and these errors manifest as a diagonal texture at a 45° angle relative to the X/Y motion.
Root Causes of VFA and Salmon Skin
Stepper Motor Pole Pass Frequency
The most common cause of VFA on Voron printers is the stepper motor's pole pass frequency (PPF). Each full electrical revolution of a 2-phase stepper motor passes 50 pole pairs (for a standard 1.8° motor) or 100 pole pairs (for a 0.9° motor). As the motor rotates, the magnetic attraction between the rotor and stator varies slightly at each pole pass. This micro-variation in torque translates into a periodic velocity variation that shows up as lines on the print.
The frequency of VFA from pole pass is calculated as:
VFA frequency (Hz) = (print speed in mm/s) / (linear distance per motor rev)
x (number of pole pairs)
For a typical Voron with 20T pulleys and 2mm belt pitch (40mm per motor revolution), at 100mm/s print speed:
- 1.8° motor (50 pole pairs): 100 / 40 x 50 = 125 Hz
- 0.9° motor (100 pole pairs): 100 / 40 x 50 = 250 Hz
At 125-250 Hz, these vibrations are in the range that creates visible surface artifacts on most Voron printers.
Microstepping Error (Salmon Skin)
Stepper motor drivers use microstepping to divide each full step into smaller steps (16, 32, 64, or 128 microsteps per full step). However, microstepping is not perfectly linear — the torque vs. position relationship is sinusoidal, and the driver's approximation of this sine wave introduces positional error at each microstep transition. The error is most pronounced at the 1/4-step and 3/4-step positions within each full step.
This positional error repeats every 4 microsteps (one full step period), creating a diagonal surface pattern. The pattern is called salmon skin because the diagonal texture resembles fish scales. It is most visible on prints with large, flat vertical surfaces at angles near 45°.
Mechanical Resonance
VFA can also be caused or amplified by mechanical resonance in the printer frame, gantry, or toolhead. Even if the motor produces clean torque, the mechanical system may amplify specific frequencies. Common resonators:
- Belt tension — belts that are too loose or too tight act as springs and amplify certain frequencies.
- Linear rail bearing preload — tight bearings create stick-slip friction that manifests as VFA.
- Gantry stiffness — toolhead wobble or gantry flex at specific frequencies creates visible artifacts.
- Z-axis leadscrew or belt resonance — vibrations from the Z system couple into the X/Y gantry.
Diagnosing VFA vs Other Artifacts
Print a calibration cube or a 60x60mm single-wall square with 4 perimeters at your normal printing speed. Examine the vertical walls under bright, raking light (light coming from the side at a low angle):
- VFA — Very fine lines spaced 0.5-2mm apart, consistent through the height. Best visible with a bright light shining parallel to the surface.
- Salmon skin — Diagonal or diamond-shaped texture on the surface. Rotate the print 90° — the pattern direction changes relative to the print orientation. Most visible on 45° angled surfaces.
- Z-banding — Lines at 2mm, 4mm, or 8mm intervals matching leadscrew pitch. Easy to measure with calipers.
- Ghosting / ringing — Repeating patterns at sharp corners and features, strongest on the first 10-20mm after a direction change.
- Input shaper artifacts — Wavy or rippled surfaces at specific frequencies that change when input shaper is disabled.
Solutions for Stepper Motor Pole Pass VFA
Solution 1: Switch to 0.9° Motors
0.9° stepper motors have twice as many pole pairs (100 vs 50) and produce smoother torque output. The VFA frequency from pole pass with 0.9° motors is double that of 1.8° motors — pushing the artifact frequency higher, where mechanical damping is more effective and the artifact amplitude is lower. This is the single most effective VFA reduction mod for Voron printers. Recommended motors: LDO 0.9° or StepperOnline 0.9°.
Solution 2: Reduce Print Speed at the VFA Frequency
Since VFA is frequency-dependent, you can avoid the resonant frequency by changing print speed. If VFA appears at 100mm/s, try 80mm/s or 120mm/s. The artifact may disappear or shift enough to be less visible. Use the SPEED variable in your slicer to quickly test different speeds on a calibration print.
Solution 3: Increase Belt Tension
Higher belt tension shifts the mechanical resonance frequency higher, reducing the coupling of motor VFA into the print. Use a belt tension meter and target 110-130 Hz for Voron 2.4/Trident and 120-140 Hz for Voron 0.2. Do not overtighten — excessive tension wears bearings and belts.
Solution 4: Use Input Shaper with Careful Tuning
Input shaper (particularly MZV or EI) can dampen VFA by filtering out specific vibration frequencies. However, poorly tuned input shaper can make VFA worse by introducing its own artifacts. Run SHAPER_CALIBRATE carefully and test with a VFA diagnostic print after applying a shaper. If you see new periodic artifacts after enabling input shaper, try a different shaper type (e.g., switch from MZV to 2HUMP_EI).
Solutions for Salmon Skin (Microstepping Error)
Solution 1: Use Higher Microstepping
Increase microstepping from 16 to 32 or 64. Higher microstepping reduces the positional error per microstep. In printer.cfg:
[tmc2209 stepper_x]
microsteps: 32 # Or 64
# Note: rotation_distance must account for microsteps
# rotation_distance = <belt_pitch> * <pulley_teeth>
When increasing microsteps, you must also update rotation_distance if using microstep-aware rotation distance calculation. For standard Voron kinematic setups (20T pulley, 2mm GT2 belt), rotation_distance = 40mm regardless of microsteps — microsteps only affect step_distance, not rotation_distance. Verify your config handles this correctly.
Solution 2: Enable StealthChop2
TMC2209 and TMC2240 drivers support StealthChop2, which uses a different microstepping algorithm that produces smoother motion than SpreadCycle. Enable it in your config:
[tmc2209 stepper_x]
stealthchop_threshold: 999999 # Always use stealthchop
# OR set a threshold below which stealthchop is used
# stealthchop_threshold: 150 # Use stealthchop below 150mm/s
Note: StealthChop reduces audible motor noise but can reduce torque at high speeds. For Voron printers printing at 100-200mm/s, StealthChop is generally fine but should be tested with your specific motors and speeds. Above 200mm/s, SpreadCycle may be necessary to avoid skipped steps.
Solution 3: Use Hybrid Mode (SpreadCycle + StealthChop)
Set a threshold to use StealthChop at low speeds (where salmon skin is most visible) and SpreadCycle at high speeds (where torque is needed):
[tmc2209 stepper_x]
stealthchop_threshold: 150 # mm/s
This configuration runs the motor in StealthChop below 150mm/s (smooth motion, no salmon skin) and switches to SpreadCycle above 150mm/s (higher torque, more audible noise).
Solution 4: Adjust Driver Current and Microstep Interpolation
TMC drivers have internal microstep interpolation (called "microstepping interpolation" or "smoothing"). Disable it to see if it worsens or improves salmon skin:
[tmc2209 stepper_x]
interpolate: False # Disable 256x microstep interpolation
Some users find that disabling interpolation reduces salmon skin because the internal 256-microstep interpolation introduces its own positional errors. Test with interpolation on and off to see which works better for your specific hardware combination (motor + driver + voltage).
Mechanical Solutions
Linear Rail Maintenance
Dirty or under-lubricated linear rails create stick-slip friction that amplifies VFA. Clean rails with IPA and a lint-free cloth, then lubricate with PTFE grease (Super Lube 21030) or lithium grease. Apply grease sparingly — excess grease traps debris. A well-lubricated rail drastically reduces high-frequency vibration transmission.
Gantry Stiffness
Check all gantry bolts and screws for proper torque. Loose gantry components resonate at low frequencies and amplify VFA. Use a 1.5mm hex driver and check every screw on the toolhead, X/Y carriage, Z joints, and motor mounts. Loose belts should be re-tensioned.
Toolhead Mass Damping
Adding mass to the toolhead can dampen VFA. This is counter-intuitive (more mass usually increases ringing), but high-frequency VFA is dampened by mass because the artifact frequency shifts below the resonant frequency of the gantry. Do not add more than 20-30g. Examples: use a heavier CNC toolhead, add a stainless steel backplate, or use a brass hotend mount.
Vibration Dampening Feet
Sorbothane or silicone vibration dampening feet under the printer can decouple frame vibrations from the floor and reduce VFA caused by vibration coupling. Use 30-50 durometer Sorbothane hemispheres at each corner. Ensure the printer remains level and stable.
Klipper Config Tuning for VFA Reduction
Pressure Advance Tuning
Poorly tuned pressure advance introduces extrusion inconsistency that looks like VFA. Run TUNE_PRESSURE_ADVANCE to calibrate. Under-tuned PA creates blobs at corners; over-tuned PA creates corner indentation and inconsistent wall thickness. Both appear as vertical surface artifacts.
Square Corner Velocity
Reduce square_corner_velocity in printer.cfg from 5.0 to 3.0 or 2.0. This reduces the speed at which the printer rounds corners and tightens the nozzle path, reducing high-frequency velocity variation that excites VFA:
[printer]
square_corner_velocity: 3.0 # Default is 5.0
Minimum Cruise Ratio
Enable and tune minimum_cruise_ratio to reduce the number of acceleration/deceleration transitions that excite VFA:
[printer]
minimum_cruise_ratio: 0.2 # Ensure 20% of moves are at full speed
Test Print to Diagnose VFA
Create a test print that sweeps through speeds to find where VFA is worst:
- Design a 100mm tall, 10mm wide, single-wall tower.
- Each 10mm section prints at a different speed: 60, 80, 100, 120, 140, 160, 180, 200, 220, 240 mm/s.
- Examine each section under raking light. Note which speeds produce the cleanest surfaces.
- Set your printing speed to the speed range that produces the least VFA.
- Repeat the test after each change (motor swap, driver tuning, belt tension) to measure improvement.