# Bigtreetech Eddy

El BTT Eddy es un sensor de nivelación por escaneo de la superficie basado en corrientes de Eddy (inductivo). Este tipo de sensores pueden escanear tu cama en unos pocos segundos con una alta precisión, sin contacto físico y sin pin de toque.

<figure><img src="/files/I1unGQlPwRF3Uz9yvmTC" alt="" width="153"><figcaption></figcaption></figure>

Entre sus ventajas destacan:

* **Nivelación de alta velocidad**: completa un nivelado en unos 20 segundos para una cama de tamaño medio, y menos con la cama pequeña.
* **Alta precisión**: lecturas con resolución de 0.0005 mm.
* **Tamaño compacto y bajo peso**: 6 g, integrable en casi cualquier cabezal sin afectar a inercias ni vibraciones.
* **Compensación de temperatura**: integra la función de compensación térmica de Klipper para mantener la precisión cuando la cama calienta.
* **Escaneo continuo**: con `METHOD=rapid_scan` el cabezal no se detiene en cada punto, el sondeo se hace en movimiento. Es especialmente rápido con el BTT Eddy.

{% hint style="danger" %}
**Limitación importante**

**Por el principio de funcionamiento, el BTT Eddy solo es compatible con superficies metálicas conductivas y con campo magnético uniforme.**

Puede dar problemas con camas que tengan zonas de nivelación aisladas, imanes para fijar el fleje o PEI, o superficies no conductoras.
{% endhint %}

{% hint style="info" %}
**Klipper oficial, no el fork de BTT**

Desde hace tiempo ya no es necesario usar el fork de Klipper de Bigtreetech. Esta guía está escrita para **Klipper oficial**. Si usas el fork de BTT, migra a la versión oficial — lo más fácil es reinstalar desde [KIAUH](https://github.com/dw-0/kiauh).
{% endhint %}

## Versiones del BTT Eddy

Existen tres versiones del sensor con diferencias importantes según el setup:

<figure><img src="/files/XJQsgGnUllKnmHYTTjqJ" alt=""><figcaption></figcaption></figure>

| Versión           | Conexión       | Sensor temperatura | Cuándo usarla                                                                                       |
| ----------------- | -------------- | ------------------ | --------------------------------------------------------------------------------------------------- |
| **BTT Eddy**      | USB            | Sí                 | La opción habitual y recomendada. Se gestiona como una MCU independiente en Klipper.                |
| **BTT Eddy Coil** | I2C (EBB36/42) | No                 | Para toolheads tipo EBB36/EBB42. Simplifica el cableado pero pierde la compensación de temperatura. |
| **BTT Eddy CAN**  | CANbus         | Sí                 | Para setups con bus CAN directo al host, electrónica o toolhead.                                    |

<figure><img src="/files/ihWKij3ajK2uegZr3eUa" alt=""><figcaption></figcaption></figure>

{% tabs %}
{% tab title="BTT Eddy USB con Manta M8P v2.0" %}

<figure><img src="/files/EyDbyfzFUDXkROzbGq6X" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="BTT Eddy USB con Manta M5P" %}

<figure><img src="/files/BrfzjF9UXuT94tVg8WQJ" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="BTT Eddy Coil con EBB36 v1.2" %}

<figure><img src="/files/IYvRHr5YToepTzePESBl" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="BTT Eddy Coil con EBB42 v1.2" %}

<figure><img src="/files/fMvsH5WFdSD4Rc2aqHfX" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

## Instalación del sensor

Algunos consejos antes de montar el sensor:

* Montarlo en el cabezal con **2-3 mm entre la superficie de medición del Eddy y la punta del nozzle** (2.5 mm es el valor óptimo).
* En la versión USB, evitar que el cable pase junto a cables de motores u otras fuentes de ruido eléctrico. Usa un cable de calidad, apantallado y flexible.
* Mantener la parte electrónica del sensor alejada de fuentes de calor como el hotend.

## Compilación del firmware

{% hint style="warning" %}
El BTT Eddy solo es compatible con instalaciones de Klipper que usen **Python 3**. Si ves errores del tipo `Internal error during connect: split() takes no keyword arguments`, tu Klipper está en Python 2 — reinstala desde [KIAUH](https://github.com/dw-0/kiauh).
{% endhint %}

{% tabs %}
{% tab title="USB" %}
Desde SSH:

```bash
cd ~/klipper
make menuconfig
```

Selecciona estos valores en el menú:

<figure><img src="/files/zXRXRpi9x2ac5SBRWVWR" alt=""><figcaption></figcaption></figure>

Pulsa `Q` y `Yes` para guardar, luego:

```bash
make
```

Con el sensor desconectado, mantén pulsado el botón **BOOT** y conecta el cable USB al host. Suelta BOOT una vez conectado.

Verifica que aparece en el sistema:

```bash
lsusb
```

Deberías ver algo como:

<figure><img src="/files/xkN6mUNni9nM4VnKAytE" alt=""><figcaption></figcaption></figure>

Flashea el firmware (ajusta el ID al que veas en `lsusb`):

```bash
cd ~/klipper
make flash FLASH_DEVICE=2e8a:0003
```

Una vez finalizado, obtén el serial ID del sensor:

```bash
ls /dev/serial/by-id/*
```

Anota el ID — lo usarás en la sección `[mcu eddy]` del `printer.cfg`.
{% endtab %}

{% tab title="Coil (I2C)" %}
La versión BTT Eddy Coil se conecta al toolhead o host mediante I2C. Hay que aplicar el firmware al host EBB al que se conecta y configurarlo específicamente para I2C. Consulta la [documentación oficial de BTT](https://github.com/bigtreetech/Eddy) para los pasos específicos de tu toolhead.
{% endtab %}
{% endtabs %}

## Configuración Klipper

Elige el fichero de ejemplo según tu setup:

* **BTT Eddy como probe + z-endstop separado** → [sample-bigtreetech-eddy.cfg](https://github.com/bigtreetech/Eddy/blob/master/sample-bigtreetech-eddy.cfg)
* **BTT Eddy como probe y z-endstop** (lo más habitual) → [sample-bigtreetech-eddy-homing.cfg](https://github.com/bigtreetech/Eddy/blob/master/sample-bigtreetech-eddy-homing.cfg)
* **BTT Eddy como probe, z-endstop y con z-offset dinámico** → [sample-bigtreetech-eddy-zoffbeta.cfg](https://github.com/bigtreetech/Eddy/blob/master/sample-bigtreetech-eddy-zoffbeta.cfg)

{% hint style="success" %}
**Recomendación: usar include**

Lo más limpio es copiar la configuración de ejemplo en un fichero `eddy.cfg` y añadirlo como include en tu `printer.cfg`:

```ini
[include eddy.cfg]
```

Ponlo siempre encima de la línea `#*# <--- SAVE_CONFIG --->`. Si tienes un KNOMI, pon el include del Eddy **debajo** del KNOMI para que las macros se carguen en el orden correcto.
{% endhint %}

### Si usas el BTT Eddy como z-endstop (recomendado)

En la sección `[stepper_z]` de tu `printer.cfg`:

```ini
[stepper_z]
endstop_pin: probe:z_virtual_endstop
# Comenta o elimina la línea position_endstop
```

{% hint style="warning" %}
Si tienes un **BTT KNOMI**, algunas macros entrarán en conflicto. Comenta en el cfg del KNOMI las macros que se solapen con las del Eddy.
{% endhint %}

### Ajustes a personalizar en el cfg del Eddy

Una vez copiado el fichero de ejemplo, personaliza:

* **Serial del BTT Eddy** (versión USB): el ID que obtuviste con `ls /dev/serial/by-id/*`.
* **Offsets XY del sensor**: la distancia en X e Y desde el nozzle al punto de medición del Eddy.

{% hint style="info" %}
**Cómo medir los offsets XY**

El punto de medición del sensor está marcado en la PCB:

<img src="/files/ifes2XDzNrJUFLXgbtTj" alt="" data-size="original">

**Método manual**: mide con una regla la distancia desde el nozzle al punto de medición del sensor en X e Y.

**Método preciso** (requiere la máquina funcional con homing en XY):

1. Haz home en XY: `G28 XY`
2. Coloca el cabezal en el centro de la cama
3. Lanza `PROBE` desde la consola (pega un trozo de cinta en la cama para marcar el punto de sondeo)
4. Lanza `GET_POSITION` y anota la posición
5. Mueve el nozzle encima del punto marcado con los controles manuales
6. Lanza `GET_POSITION` de nuevo y calcula la diferencia — esos son los offsets

Aplica los valores en tu cfg y haz `RESTART`.
{% endhint %}

* **`mesh_min` y `mesh_max`**: los límites del área de mallado. Consulta la [guía de sensores de nivelación](/klipper/empezamos/sensor-nivelacion.md) para calcularlos correctamente según el offset de tu sensor.
* **`home_xy_position`**: la posición XY donde el Eddy hará el homing Z. Explicado en la [guía de sensores → safe\_z\_home](/klipper/empezamos/sensor-nivelacion.md#safe-z-homing).

## Calibración BTT Eddy

### 1. Calibración DRIVE\_CURRENT

Controla la intensidad del campo magnético que genera el sensor. Hay que calibrarla una vez (o cada vez que cambies la altura de montaje del sensor).

* Haz home en XY: `G28 XY`
* Mueve el cabezal al centro de la cama a 20 mm de altura

{% hint style="warning" %}
Si usas el Eddy como z-endstop y no puedes hacer un home completo aún, usa `SET_KINEMATIC_POSITION Z=0` para forzar la posición y poder mover el eje Z:

```gcode
G28 XY
SET_KINEMATIC_POSITION Z=0
G1 Z20 F1500
```

{% endhint %}

* Lanza la calibración:

```gcode
LDC_CALIBRATE_DRIVE_CURRENT CHIP=btt_eddy
```

* Guarda el resultado:

```gcode
SAVE_CONFIG
```

### 2. Calibración de mapeo de lecturas (correlación sensor → altura Z)

Este proceso establece la relación entre las lecturas del sensor y la posición real del nozzle. Hay que repetirlo si cambias la altura de montaje del sensor.

* Lanza:

```gcode
PROBE_EDDY_CURRENT_CALIBRATE_AUTO CHIP=btt_eddy
```

* Aparecerá el asistente para bajar el nozzle con un papel hasta tocar la cama (el procedimiento clásico del papel).
* Una vez aceptado, el proceso comienza automáticamente y tarda unos minutos.
* Al terminar, guarda:

```gcode
SAVE_CONFIG
```

### 3. Calibración de malla

Con el sensor ya calibrado, haz el mallado de cama:

```gcode
G28
BED_MESH_CALIBRATE METHOD=rapid_scan
SAVE_CONFIG
```

{% hint style="info" %}
**Parámetros avanzados de escaneo**

`BED_MESH_CALIBRATE` con el BTT Eddy soporta opciones adicionales:

* `METHOD=rapid_scan` — escaneo continuo sin parar en cada punto (el más rápido, recomendado para uso diario)
* `METHOD=scan` — escaneo con pausa en cada punto para múltiples lecturas (más lento, más preciso)
* `SCAN_MODE=detailed` o `SCAN_MODE=rapid` — submode del método `scan`
* `SCAN_SPEED=[velocidad]` — velocidad durante el escaneo continuo
* `ADAPTIVE=1` — mallado adaptativo nativo de Klipper: sondea solo el área que ocupa la pieza actual. No necesitas KAMP para esto.

Ejemplo de uso con mallado adaptativo:

```gcode
BED_MESH_CALIBRATE METHOD=rapid_scan ADAPTIVE=1
```

Añade esto a tu macro de inicio para sondear solo el área necesaria en cada impresión.
{% endhint %}

### 4. Compensación de temperatura (solo versión USB)

{% hint style="warning" %}
La compensación de temperatura solo está disponible en la versión USB, que incluye sensor de temperatura integrado.
{% endhint %}

Este proceso crea un perfil de corrección para compensar la deriva térmica del sensor conforme calienta la cama.

```gcode
G28
G0 Z5
SET_IDLE_TIMEOUT TIMEOUT=36000
TEMPERATURE_PROBE_CALIBRATE PROBE=btt_eddy TARGET=56 STEP=4
```

Ajusta la temperatura de cama y nozzle a los valores máximos que uses habitualmente. El asistente irá pidiendo ajustes del papel a medida que la temperatura sube. **Cuidado de no quemarte durante el proceso.**

Puedes controlar el proceso con:

* `TEMPERATURE_PROBE_NEXT` — forzar el siguiente paso antes de llegar a la temperatura objetivo
* `TEMPERATURE_PROBE_COMPLETE` — finalizar el proceso antes de llegar a TARGET
* `ABORT` — cancelar

Al terminar, guarda con `SAVE_CONFIG`.

### 5. Ajuste del Z-Offset

{% hint style="warning" %}
Este paso solo aplica si usas el BTT Eddy como z-endstop.
{% endhint %}

{% hint style="info" %}
**El z-offset del Eddy funciona diferente al de un sensor tradicional**

En un sensor clásico (BLTouch, inductivo...), el z-offset es la distancia entre el punto de activación del sensor y la punta del nozzle — es fijo y depende del montaje.

En el Eddy no hay "punto de activación" — el sensor envía telemetría continua que Klipper traduce a distancias. Durante la calibración le dices al sistema que, para las lecturas obtenidas con el nozzle tocando la cama (test del papel), eso es z=0.

Por eso el parámetro `z_offset` en la config del Eddy no indica la distancia sensor-nozzle, sino la altura de sondeo por encima de la cama (normalmente 2.5 mm). Ajustar la primera capa se hace con `PROBE_CALIBRATE` como en cualquier otro sensor.
{% endhint %}

Para ajustar z=0 con el Eddy como z-endstop:

```gcode
G28
PROBE_EDDY_CURRENT_CALIBRATE_AUTO CHIP=btt_eddy
```

Sigue el asistente para ajustar el nozzle con el papel. Al finalizar, `SAVE_CONFIG`.

## Video Tutorial

{% embed url="<https://youtu.be/Jjkc591tyJY>" %}

## Troubleshooting

### `Error during homing probe: Eddy current sensor error`

Indica lecturas fuera de rango del sensor. Causas habituales:

* El sensor no está a la altura correcta (debe estar 2-3 mm sobre el nozzle, óptimo 2.5 mm).
* Siempre que cambies la altura de montaje, **borra toda la calibración y repítela desde el principio**.
* Si persiste, prueba a poner `reg_drive_current: 16` manualmente en la sección del Eddy.

### `Probe Triggered Before Movement`

Sucede cuando lanzas `PROBE` dos veces seguidas sin subir el cabezal entre medidas. Sube Z unos milímetros entre comandos `PROBE`.

### Pausas o saltos durante el mallado

Causas posibles:

* Macro `BED_MESH_CALIBRATE` mal configurada — asegúrate de usar `METHOD=rapid_scan`
* KAMP instalado y en conflicto — ver sección KAMP más abajo

### `gcode command <XX> already registered`

Una macro del Eddy está siendo sobreescrita por otra configuración (KAMP, KNOMI, u otro include). Revisa el orden de los includes en tu `printer.cfg` y elimina macros duplicadas.

### Problemas de z-offset

Lee [este documento de BTT](https://gist.github.com/bigtreetech/484380b26be613b9139bc537510393df) sobre cómo funciona el z-offset en el Eddy. El comportamiento es diferente al de un sensor tradicional — entenderlo evita muchas confusiones.

### KNOMI — conflicto de macros

Si tienes KNOMI, comenta en su cfg las macros que entren en conflicto con el Eddy. Además, en el cfg de ejemplo del Eddy descomenta las macros específicas para KNOMI.

### KAMP — ya no es necesario

KAMP (Klipper-Adaptive-Meshing-Purging) fue muy útil antes de que Klipper integrara el mallado adaptativo nativo. Hoy en día:

* Klipper 0.12+ tiene mallado adaptativo nativo (`ADAPTIVE=1` en `BED_MESH_CALIBRATE`)
* El escaneo con BTT Eddy es tan rápido que sondear toda la cama tampoco penaliza mucho
* Las macros de KAMP pueden entrar en conflicto con las del Eddy

**Recomendación**: elimina KAMP o al menos comenta la línea `[include ./KAMP/adaptive_meshing.cfg]` en `KAMP_SETTINGS.cfg` y usa `ADAPTIVE=1` directamente.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://klipper.3dwork.io/klipper/empezamos/sensor-nivelacion/bigtreetech-eddy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
