BTT Eddy - vvuk/eddy-ng GitHub Wiki
eddy-ng
supports the BTT Eddy well. Because of the compact size of the Eddy, it's easier to use it on many toolheads. The downside is that the compact coil size makes it more difficult to calibrate, especially for tap. However, once calibrated, it works very well.
Probe Installation
Tap functionality and accuracy of eddy-ng
with the BTT Eddy are highly sensitive to the distance between the probe coil and the tip of the nozzle. The best success seems to be with the coil of a BTT Eddy mounted at about 2.95mm above the tip of the nozzle. This refers to the bottom of the coil PCB, not the bottom of the case. The case wall is about 1.2mm thick.
Known good working mounts are listed below, but many others will as well.
- Sovol SV08 (stock toolhead)
Software Installation
- Install
eddy-ng
by running theinstall.sh
script in theeddy-ng
repository. - If you had your BTT Eddy working without eddy-ng, remove your previous configuration.
- Make sure to delete the
probe_eddy_current
andtemperature_probe
sections from the saved variables area at the bottom ofprinter.cfg
. - Delete/don't include the
eddy.cfg
file that you may be using. There are a number of macros that come from BTT's config that are not relevant and will cause problems. - Delete all
probe_eddy_current
,temperature_sensor
,temperature_probe
sections that reference the eddy.
- Rebuild and flash the Klipper firmware for your BTT Eddy USB/Duo or for Eddy Coil, the MCU that it is connected to.
- You can follow the Compiling Firmware instructions here, but skip the
git checkout master
part. - For Kalico, make sure to also select "Eddy-ng" from the extras menu during
menuconfig
.
- Update your configuration by adding the following to
printer.cfg
or to an included file:
For Eddy USB/Duo (make sure to replace the variables with appropriate values for your setup). You may
already have a mcu
section if you had the BTT Eddy working previously. You can keep it (and don't include
the sample mcu section below).
[mcu eddy]
# FOR USB: replace this with your serial port ID
# FOR CANBUS: replace this with your canbus UUID
serial: /dev/serial/by-id/usb-Klipper_rp2040_5044340310A9D51C-if00
restart_method: command
[probe_eddy_ng btt_eddy]
sensor_type: btt_eddy
i2c_mcu: eddy
i2c_bus: i2c0f
x_offset: # INSERT VALUE FOR YOUR PROBE POSITION
y_offset: # INSERT VALUE FOR YOUR PROBE POSITION
[temperature_sensor btt_eddy_mcu]
sensor_type: temperature_mcu
sensor_mcu: eddy
min_temp: 10
max_temp: 100
[temperature_sensor btt_eddy]
sensor_type: Generic 3950
sensor_pin: eddy:gpio26
For Eddy Coil (make sure to replace the variables with appropriate values for your setup):
[probe_eddy_ng btt_eddy]
sensor_type: btt_eddy
i2c_mcu: # INSERT YOUR MCU NAME
i2c_bus: # INSERT YOUR MCU I2C BUS NAME
x_offset: # INSERT VALUE FOR YOUR PROBE POSITION
y_offset: # INSERT VALUE FOR YOUR PROBE POSITION
Then proceed to calibration.
Going back to the Klipper BTT Eddy support
- Run
./install.sh --uninstall
- Restore your previous eddy config
- Re-build and re-flash Klipper
Calibration
Jump to Calibration to continue.
BTT Eddy Specific Drive Current Troubleshooting
(You can skip this explanation and jump down to commands to run to try to fine tune, but the explanation helps understand what's going on!)
The BTT Eddy is small, which is a plus, but it has a coil design that causes problems under higher temperatures or close to metal surfaces. This can be counteracted by tweaking the "drive current" applied to the coil. Automatic calibration will often find the necessary values, but if it doesn't, you can manually tweak them.
The LDC1612's "drive current" setting controls the amount of current supplied to the LDC sensor's inductor. This directly affects the sensor's oscillation amplitude and sensitivity. A higher drive current leads to stronger oscillations, and may be necessary to overcome oscillation damping caused by stronger Eddy currents when the sensor is close to the target.
The design of the sensor coil heavy influences both the drive current necessary and the sensor resolution. The BTT Eddy in particular may need lots of adjustment for a working configuration, while other probes should work fine after SETUP.
At some distances both too close and too far from the target, the LDC chip will see either too high amplitudes or too low amplitudes for detection. These will result in no sensor data being provided, and the sensor won't be usable in that range. The offset of the sensor coil from the toolhead also influences this --- ultimately it's the distance between the sensor coil and the conductor that matters, but we care about the final distance between the toolhead and the bed.
For homing, the sensor needs to provide data from ~5mm down to ~1mm of toolhead-to-bed distance. Because the Z axis isn't homed at this point, for homing to succeed, the sensor needs to move first through the detected height given by adding home_trigger_height
(default 2.0) and home_trigger_safe_start_offset
(default 1.0). Calibration needs to succed at 1.0mm above this range. So, with default settings, calibration must succeed in the 4mm down to 1mm range.
For tap, the sensor needs to provide data from ~3mm down to ~-0.250mm (i.e. pressing into the bed). The tap start height is configurable via tap_start_z
, or via the START_Z
parameter to the tap command. For example, if your sensor can only reliably provide data from 2.9mm down to -0.250mm, you can set tap_start_z
to 2.9.
Sometimes, these ranges can be handled better with different drive current settings. The configuration reg_drive_current
is the drive current used for homing. tap_drive_current
is used for tap, and defaults to reg_drive_current
if not set.
Running calibration will default to the
reg_drive_current
value. But iftap_drive_current
is different, you need to calibrate that value as well by runningPROBE_EDDY_NG_CALIBRATE DRIVE_CURRENT=[value]
.
Figuring out appropriate drive current settings
Always start with automatic calibration via PROBE_EDDY_NG_SETUP
. You should hopefully be able to set least set up homing easily enough. Then, if you are having trouble setting up an appropriate configuration for tap, especially under print temperatures, you can use PROBE_EDDY_NG_TEST_DRIVE_CURRENT
to see what the valid height range is for the sensor at that drive current setting.
PROBE_EDDY_NG_TEST_DRIVE_CURRENT DRIVE_CURRENT=x
Where x
is the drive current value you want to test. Start by looking at your homing value +1 or +2.
At the end, it will print the minimum and maximum Z value where samples were received. This may be a smaller range than Z_MAX..Z_TARGET -- with your sensor mounted at the position it's in, that's the (toolhead Z) range at which samples can be detected.
You can try with a higher drive current, for example PROBE_EDDY_NG_TEST_DRIVE_CURRENT DRIVE_CURRENT=16
if your default setting is 15. You can also try with a lower value. It's not recommended to increase the drive current by more than a few steps. (The values range from 0..31, and the actual current is given in the LDC1612 datasheet.)
If you are unable to find a good drive current for both homing and tap operations, your remaining option is to move the sensor higher or lower relative to the nozzle.
You can also experiment with moving the toolhead to a Z position where you have problems, and then using the low-level PROBE_EDDY_NG_STATUS
command to look at the low-level status of the sensor. You may need to run this a few times to capture an up-to-date error. You can also change the current drive current via LDC_NG_SET_DRIVE_CURRENT CHIP=[your chip] VAL=xx
.
That's too many words
- Run
PROBE_EDDY_NG_SETUP
. - If succeeds, test tap at print temperatures. If it succeeds, you're done.
- If SETUP fails, or if tap fails, test drive current values higher than what SETUP found using...
- Run
PROBE_EDDY_NG_TEST_DRIVE_CURRENT DRIVE_CURRENT=[that value]
. Take note of the height range. If it includes the 1mm..4mm range, this is a good drive current for homing. Setreg_drive_current: ...
to this value in your config. If the height goes all the way down to 0.0xx, this should be a good drive current for tap operations as well. In that case, stop here. If it doesn't go down to 0.0xx, continue. - If the range that's returned is higher than the range needed for home and/or tap, run again with
DRIVE_CURRENT=
1 higher than previously. If the range returned is lower, run with 1 lower. - Try to find an appropriate drive current for tap (or homing if that isn't setup). When you find a drive current for tap that's different than the homing one, set
tap_drive_current: ...
in the config. - If you're unable, consider moving the sensor physically higher or lower.