SV08 Eddy conclusions and next steps

Hello guys,

after reading different posts for 2 hours, please allow me to briefly list my understanding, and let me know whether it’s right so far.

  • w/o eddy, SV08 homes on bed via induction sensor and measures difference btw. sensor and nozzle via pressure plate behind the bed.
  • w/ eddy kit, it homes using hover mode and the distance between eddy and nozzle is static
    => this method of homing is quite unreliable in +/- 0.1-0.2mm (as per my experience with calibration at least, independent of temperature - probe_calibration restart and off by 0.1..0.2mm. rinse, repeat, off the other direction…)
  • Improvement for this would be usage of EddyNG Tap mode, but this would require mainline klipper (as eddyng plugin does not work out of the box with sovol klipper version). Mainline requires access to EMMC as described by * rappetor so some effort required.

Hope this is not to far off reality…
2nd point makes me wonder - I changed the internal_endstop_offset: -1...1, restarted, ran G28 followed by z_offset_calibration method=force_overlay and G0 Z0.1 - I expected the nozzle to either be significantly higher or potentially ram into the bed. Instead, nothing like this happend. It was the same position no matted what I entered in internal_endstop_offset.

Wondering why they did not keep the pressure plate in the back and use it once to “calibrate” the eddy in z and then move the head a little and calibrate the nozzle in z.

Regards,
Daniel

I don’t have a SV08 so this is all theory.

Tracing through the macros (with assistance from Claude AI) the stock sequence looks like:

Z Offset — How It’s Determined in This Config

This config uses two probes and a dedicated Z offset calibration plugin — it’s meaningfully different from the stock SV08 approach.

The Two Probes

  • [probe] — the Eddy current sensor (inductive), on extra_mcu:PB6. Used for bed mesh and QGL. Has x_offset: -17, y_offset: 10. Its z_offset is stored in the SAVE_CONFIG block at the bottom of printer.cfg (z_offset = 1.0).
  • [probe_pressure] — a physical contact/nozzle-touch probe on PE12. Used exclusively for Z offset calibration. Its z_offset is hardcoded to 0 because the nozzle is the probe tip — by definition zero.

Z Homing

endstop_pin: probe:z_virtual_endstop

Z homes using the Eddy probe as the virtual endstop. The homing sequence moves the toolhead to X191, Y165 (center) before triggering it.

Z Offset Calibration — [z_offset_calibration]

This is a Sovol custom Klipper plugin (not stock Klipper). It works by:

  1. Moving to the bed center (191, 165) and touching down with the Eddy probe to establish a reference
  2. Moving to the endstop position (289, 361) and touching with the probe_pressure (nozzle contact probe) to get the true nozzle-to-bed distance
  3. Computing the difference — that difference becomes the Eddy probe’s z_offset, which is then saved via SAVE_CONFIG to the #*# block in printer.cfg

This is triggered by Z_OFFSET_CALIBRATION, which is called from _CALIBRATION_ZOFFSET:

QUAD_GANTRY_LEVEL → CLEAN_NOZZLE → Z_OFFSET_CALIBRATION

The offsetadjust Variable

saved_variables.cfg contains offsetadjust = 0. In this config, offsetadjust is reset to 0 by the _auto_zoffset delayed gcode and is never applied via SET_GCODE_OFFSET anywhere in START_PRINT. There is no SET_GCODE_OFFSET call in the print start sequence at all.

This means the only active Z offset is the one stored in the SAVE_CONFIG block (z_offset = 1.0 on the [probe] section), computed by the Z_OFFSET_CALIBRATION plugin each time it’s run.

Summary Flow

Boot / pre-print
     │
     ▼
Z_OFFSET_CALIBRATION plugin runs
     │  Eddy probe touches bed center
     │  Nozzle contact probe touches endstop point
     │  Difference calculated
     ▼
[probe] z_offset written to SAVE_CONFIG block in printer.cfg
     │
     ▼
G28 Z  →  homes using Eddy probe + that z_offset
     │
     ▼
QGL + BED_MESH_CALIBRATE (Eddy probe, no additional offset applied)
     │
     ▼
Print starts — no SET_GCODE_OFFSET, offsetadjust is unused

Notable Issue

Since offsetadjust is always reset to 0 and never applied, there’s no way for the user to apply a persistent baby-step correction via the saved variables system. Any live Z adjustment made during printing (baby stepping in Mainsail) is session-only and lost on restart. If the nozzle-to-bed distance needs tweaking between full Z_OFFSET_CALIBRATION runs, there’s no path to save it.

In typical Sovol style any babystep correction is lost on start_print.

The eddy “touch” at the beginning of the process does use a method similar to Eddy-NG to find the Z axis position (counts) at nozzle contact.

I find it amusing that on the Zero Sovol abandoned the loadcell under the plate and uses eddy taps as the only reference. If that works (it does) why not use it for the SV08. The SV08 Max has no loadcell and uses eddy taps.

Fix

Append this line at the end of the start print macro:

SET_KINEMATIC_POSITION Z={printer.toolhead.position.z - 0.0}

Change 0.0 to your correction value. Positive moves nozzle away from bed, negative moves it closer.

(post deleted by author)