Ir al contenido

Cómo instalar un BLTouch en una Ender 3: soporte, cableado y offsets

·3641 palabras·18 mins
Emiliano Fernández Cervantes
Autor
Emiliano Fernández Cervantes
Construyo cosas en la frontera entre el hardware y el software: arquitecturas en Verilog, instrumentación biomédica y un home lab que nunca deja de crecer.
Mejorando la Ender 3 - Este artículo es parte de una serie.
Parte 3: Este artículo

¿Ya te pasaste una tarde entera persiguiendo la primera capa perfecta, solo para dejar bien una esquina y perder la otra? Nivelar a mano la cama en una Ender 3 de fábrica es un ritual: cuatro perillas, una hoja de papel, y una primera capa que queda preciosa del lado izquierdo de la cama y translúcida del derecho. El problema no es que seas malo girando perillas. Es que la cama no está plana, y por más que ajustes cuatro esquinas no vas a corregir una superficie que se pandea en el centro.

Un BLTouch resuelve esto de otra manera. En lugar de pedirte que dejes la cama plana, mide qué tan chueca está y le dice a la impresora que siga esa forma. Este post trata de instalarle uno a una Ender 3 que ya trae una BIGTREETECH SKR Mini E3 V2.0: imprimir un soporte, cablear el sensor y (la parte que de verdad decide si funciona) medir los offsets entre el sensor y la boquilla.

Esto no lo saqué de cero. El procedimiento que sigue está basado en la guía de Teaching Tech BLtouch for any 3D printer - Comprehensive step by step guide, que es el video que tuve abierto en la segunda pantalla mientras instalaba el mío. Lo que yo agrego aquí es todo lo específico de esta máquina: el cableado de la SKR Mini E3 V2.0, los offsets que medí en mi propio soporte, y los números que solo aparecen cuando haces la aritmética para tu propia geometría.

Esta es la parte 3 de cinco. La parte 2 fue el cambio de placa que hace fácil todo esto, y la parte 4 compila el firmware que amarra todo el conjunto.

Gráfico de reemplazo que dice que la foto del BLTouch montado viene en camino
El BLTouch montado junto al hotend en un soporte impreso, con el pin desplegado.

Qué es realmente un BLTouch
#

El nombre suena a algo exótico, pero el mecanismo es simple e ingenioso. Dentro de la carcasa hay un pin retráctil y un solenoide, además de un sensor de efecto Hall que detecta magnéticamente la posición del pin.

Para tomar una medición, el firmware energiza el solenoide y el pin cae. La impresora baja el eje Z hasta que el pin toca la cama y es empujado de vuelta hacia adentro del cuerpo; el sensor Hall detecta ese movimiento y el sensor manda una señal de disparo, exactamente igual que si se cerrara un final de carrera. El firmware registra la altura Z en ese instante, retrae el pin y se mueve al siguiente punto.

Haz eso en una cuadrícula de puntos por toda la cama y tienes una malla: un mapa de qué tan alta o baja está la cama en cada posición. Durante la impresión, Marlin ajusta Z continuamente contra esa malla, así que la boquilla sigue la superficie real en lugar de un plano imaginario perfectamente horizontal.

Vale la pena tener claras dos consecuencias prácticas del mecanismo antes de instalar uno:

  • Toca la cama con un pin de plástico, no con la boquilla. Así que mide sobre cualquier superficie que le pongas debajo, y si le toca un clip de la cama te va a dar felizmente una lectura sin sentido.
  • Hace un autotest al encender. Cuando prendes la impresora, el pin debe desplegarse y retraerse un par de veces y terminar retraído, con la luz roja fija. Ese bailecito es tu primer y mejor diagnóstico: si no ocurre, o el pin se queda afuera parpadeando, el sensor tiene un problema de cableado o de alimentación, y no tiene caso avanzar al firmware.

Imprimir el soporte
#

El BLTouch no trae ninguna forma de sujetarse a una Ender 3. Te la imprimes.

Yo usé (Yet Another) Ender 3 BLTouch Mount, del usuario de Thingiverse StevenMLawson (con licencia Creative Commons). Reemplaza la tapa frontal del shroud del ventilador del hotend y sostiene el sensor hacia la izquierda de la boquilla, que es la razón por la que más adelante el offset en X sale tan grande.

La descarga trae dos modelos:

  • BLTouchMount.STL: la versión normal, que es la que yo imprimí.
  • BLTouchMount-Laser.STL: una variante preparada para un módulo láser, que solo quieres si de verdad vas a montar uno.

Imprímelo en PETG si puedes. Esta pieza queda pegada al bloque calefactor. El PLA aguanta un rato, pero después de una impresión larga en un día caluroso tu sensor termina inclinándose en silencio una fracción de milímetro fuera de posición, y eso aparece como una primera capa fea que vas a pasar toda una tarde persiguiendo. Con PETG o ABS te ahorras el tema completo.

En cuanto a parámetros, nada exótico: capas de 0.2 mm, 4 perímetros, 30–40 % de relleno. Esta pieza sostiene la alineación de tu instrumento de medición, así que vale la pena imprimirla sólida y revisar que haya salido sin deformaciones antes de atornillarle un sensor.

Móntalo con los tornillos del ventilador del hotend, usando tornillería M3. La regla general es dejar el sensor lo más cerca posible de la boquilla, pero no tan cerca como para que falle por la exposición al calor, y atornillarlo bien firme, porque cualquier juego o bamboleo en el soporte arruina la exactitud de todas las lecturas que tome. Tres cosas que hay que verificar una vez puesto:

  1. Que el cuerpo del sensor quede a escuadra con la cama y sin juego. Un sensor inclinado mide una malla inclinada, y uno flojo mide una cama distinta cada vez.
  2. Que el pin retraído quede entre 2.3 mm y 4.3 mm por encima de la punta de la boquilla. Ese es el rango que marca Antclabs, y tiene dos límites porque el recorrido del pin es fijo, así que el sensor falla distinto en cada extremo. Si lo montas muy arriba, el pin desplegado ya no baja lo suficiente por debajo de la boquilla como para tocar la cama primero: llega antes la boquilla, el sensor nunca dispara y Marlin sigue bajando Z porque, hasta donde él sabe, la cama todavía está lejos. Ese es el extremo peligroso, y termina con la boquilla enterrada en tu superficie de impresión. Si lo montas muy abajo, el palpado en sí funciona bien, pero el pin retraído queda colgando dentro de la zona de trabajo durante todo el resto de la impresión. Ajustar la altura es más fácil de lo que suena. Con la impresora apagada, baja el cabezal a mano hasta que la boquilla descanse sobre la cama, y usa una llave allen de 3 mm como separador para fijar contra ella la altura del sensor. Si el soporte no deja deslizar el sensor, usa rondanas para calzarlo hasta que caiga dentro del rango.
  3. Que no haya nada en la cama con lo que el pin retraído se pueda atorar. Este es el extremo bajo de esa misma preocupación, pero verificado contra tu máquina real y no contra un número: despliega el pin a mano en distintas posiciones y confirma que nunca cae sobre un clip cuando la impresora palpa cerca de una orilla, y que no tiene de dónde engancharse cuando el cabezal pasa sobre una pieza alta.
Gráfico de reemplazo que dice que la foto del soporte impreso viene en camino
El soporte impreso del BLTouch recién salido de la cama, antes de montarlo.

El cableado
#

Un BLTouch viene con cinco cables, normalmente repartidos en dos conectores:

  • Un conector de 3 pines: café (GND), rojo (5 V) y naranja/amarillo (la señal de control, que se comporta como una señal de servo y le dice al pin que se despliegue o se guarde).
  • Un conector de 2 pines: negro (GND) y blanco (la señal de disparo, que se comporta como un final de carrera).

En la mayoría de las placas tienes que llevar esos dos conectores a dos lugares distintos, que es justamente la incomodidad que hacía molesto agregar un sensor a la placa Creality de fábrica. La SKR Mini E3 V2.0 trae un header de probe dedicado que acepta ambos, así que aquí es un solo conector.

En términos de firmware, ese header corresponde a dos pines del STM32: la señal de disparo cae en PC14 y el control del servo en PA1. Vas a ver PC14 aparecer explícitamente en la configuración de la parte 4, así:

#define Z_MIN_PROBE_PIN PC14

Cuidado con la polaridad del conector. El header de probe tiene guía, pero el cable que viene con el BLTouch no siempre está crimpado en el orden que esperas, y meterle 5 V al pin de señal arruina la tarde. Compara los colores de los cables contra las etiquetas serigrafiadas junto al header antes de empujarlo hasta el fondo.

¿Y el final de carrera Z original? Déjalo conectado. El sensor tiene su propio pin dedicado, así que el switch mecánico del eje Z no le estorba, y conservarlo no cuesta nada. El firmware va a usar el sensor para hacer home en Z (esa es la opción USE_PROBE_FOR_Z_HOMING) mientras el switch se queda cableado como el final de carrera Z-min de siempre.

Lleva el cable junto al arnés existente hacia el hotend, con suficiente holgura para que un recorrido completo en X y Y no lo jale, y suficiente sujeción para que nunca se meta en el camino del pórtico. Los cinchos y la malla original son tus aliados aquí.

Gráfico de reemplazo que dice que la foto del cableado del BLTouch viene en camino
El conector de 5 pines del BLTouch conectado al header de probe dedicado de la SKR Mini E3 V2.0.

Probar el sensor antes de confiar en él
#

Antes de nivelar nada, confirma que el sensor responde a los comandos. Conéctate por USB y manda estos uno por uno:

M280 P0 S10    ; desplegar el pin
M280 P0 S90    ; guardar el pin
M280 P0 S120   ; correr el autotest (el pin cicla repetidamente)
M280 P0 S160   ; reset / liberar estado de alarma

Si S10 y S90 funcionan, tu señal de servo está bien cableada y el firmware está hablando con el sensor. Manda S120, déjalo ciclar unas cuantas veces y luego S160 para detenerlo.

Después confirma la señal de disparo, que es un cable aparte y puede estar mal aunque desplegar y guardar funcionen perfecto. Despliega el pin y manda:

M119

Busca la línea z_probe, o z_min si tu configuración no tiene un pin de probe aparte. En cuanto configuras un sensor de nivelado automático, Marlin le da su propia línea de estado, y esta instalación tiene un Z_MIN_PROBE_PIN dedicado, así que z_probe es la línea que importa aquí.

Empuja el pin hacia arriba con la mano y vuelve a mandar M119: el estado debe cambiar. Aquí está el detalle que hace que mucha gente persiga fallas imaginarias: el BLTouch reporta lo contrario de lo que esperarías de un final de carrera. Con el pin retraído y en reposo marca TRIGGERED, y con el pin desplegado esperando la cama marca open. Si lees esa polaridad de la forma intuitiva, vas a concluir que un sensor perfectamente sano está descompuesto. Lo que estás confirmando es simplemente que los dos estados cambian cuando el pin se mueve. Un sensor que despliega precioso pero que nunca cambia de estado va a clavar la boquilla contra la cama en el primer G28, así que no te saltes esta prueba.


La parte que sí importa: los offsets del sensor
#

El BLTouch no está donde está la boquilla. Cuelga hacia un lado, a una altura distinta. Cada medición que toma la toma entonces en otro lugar, y el firmware necesita saber exactamente dónde para convertir lecturas del sensor en alturas de la boquilla.

Eso es un solo ajuste, tres números:

#define NOZZLE_TO_PROBE_OFFSET { -41, -12, -1.925 }

Esos son los números con los que terminé para este soporte. No los copies a ciegas: X e Y dependen de tu soporte, y Z depende de tu sensor específico, de tu soporte y de cómo quedó atornillado. Así los sacas tú.

X e Y: dónde está el sensor respecto a la boquilla
#

Los valores se miden de la boquilla hacia el sensor, en coordenadas de la impresora. X negativa significa que el sensor está a la izquierda de la boquilla; Y negativa, que está adelante.

El método confiable de baja tecnología:

  1. Pega una hoja de papel a la cama y haz home.
  2. Baja la boquilla hasta que apenas toque el papel y marca el punto exacto que queda bajo la punta.
  3. Sube Z, mueve el carro con los controles de la propia impresora hasta que el pin del sensor quede sobre esa marca, y despliega el pin para que toque el papel. Marca ese punto también.
  4. Mide con calibrador las distancias en X y en Y entre las dos marcas, y deduce los signos según hacia dónde tuviste que mover el carro.

Medir directo sobre el hardware con un calibrador también funciona si la geometría es accesible: la distancia horizontal entre el centro de la boquilla y el centro del pin, en cada eje. Para mi soporte eso dio 41 mm a la izquierda y 12 mm hacia el frente, de ahí -41 y -12.

Además, esos números tienen un costo real, y vale más hacer la cuenta que andar adivinando. El carro solo se mueve hasta cierto punto, así que un sensor que cuelga 41 mm hacia un lado simplemente no alcanza la franja más lejana de la cama. Súmale los 10 mm de PROBING_MARGIN que mantienen los puntos de palpado alejados de las orillas (ambos valores se definen en la parte 4) y, sobre una cama de 235 × 235 mm, Marlin recorta la zona palpable a esto:

  • X: de 10 mm a 194 mm, o sea 184 mm de los 235 mm disponibles. El extremo lejano sale directo del offset (235 − 41 = 194) y el cercano, del margen.
  • Y: de 10 mm a 223 mm, o sea 213 mm. Aquí el offset de 12 mm cuesta mucho menos (235 − 12 = 223), y otra vez el margen define la orilla cercana.

Así que el sensor toca en realidad unos 184 × 213 mm de los 235 × 235 mm, lo que deja casi 30 % del área de la cama sin medir directamente. Haz esa misma resta con tus propios offsets y tu margen y vas a conocer tu número antes de imprimir nada.

Esa franja sin medir es justamente la razón por la que en la parte 4 se activa EXTRAPOLATE_BEYOND_GRID, que extiende la malla más allá de los puntos palpados más externos para que las orillas y las esquinas sigan recibiendo corrección en lugar de quedarse fuera del mapa.

Z: qué tan abajo del punto de disparo queda la boquilla
#

Este es el número que decide si tu primera capa es perfecta o una embarrada, y a diferencia de X e Y no lo sacas con una regla.

El procedimiento clásico:

  1. Haz home con G28, luego manda M851 Z0 y M500 para poner en cero cualquier offset guardado y partir de un estado conocido.
  2. Muévete al centro de la cama y baja Z en pasos pequeños con una hoja de papel debajo de la boquilla, hasta que el papel se arrastre apenas. Anota el valor de Z de la pantalla. Ese número negativo es tu offset.
  3. Guárdalo:
M851 Z-1.925
M500

Marlin también trae una versión guiada de exactamente esto, el asistente de offset del probe, que te lleva de la mano desde la pantalla y guarda el resultado por ti. Viene activado en el firmware que compilamos en la parte 4, precisamente porque hacerlo a mano es latoso y vas a querer repetirlo cada vez que cambies de boquilla o vuelvas a montar el sensor. Un detalle que le cuesta a mucha gente una tarde de búsqueda: PROBE_OFFSET_WIZARD no está en Configuration.h, donde vive cada uno de los ajustes que esta serie va citando, sino en Configuration_adv.h, el segundo archivo de configuración y bastante más largo. Marlin hasta deja una nota al respecto en el primer archivo, señalando hacia el otro: “PROBE_OFFSET_WIZARD (configuration_adv.h) can be used for setting the Z offset.”

La otra herramienta que vale la pena activar para esto es el babystepping con BABYSTEP_ZPROBE_OFFSET, que también vive en Configuration_adv.h. Eso te deja ajustar Z en vivo, durante la primera capa de una impresión, y que el ajuste se escriba de vuelta en el offset del sensor en lugar de perderse al terminar. Empieza una primera capa grande y obsérvala; en esta configuración llegas al ajuste con doble clic sobre la pantalla de estado (eso es DOUBLECLICK_FOR_Z_BABYSTEPPING, también activado), y de ahí ajustas hasta que la extrusión se vea bien y guardas con M500. Es de lejos la forma más rápida de converger a un buen número.


Nivelar y que se quede
#

Con los offsets puestos, el flujo real de nivelación es corto:

G28        ; home de todos los ejes (Z ahora hace home con el sensor)
G29        ; palpar la cuadrícula y construir la malla
M500       ; guardar la malla en la EEPROM

El G28 primero no es opcional, y la razón es más específica que “primero haz home y luego mide”. El propio Configuration.h de Marlin lo dice sin rodeos: “Normally G28 leaves leveling disabled on completion.” Hacer home no es que simplemente deje de activar la compensación, es que la apaga. Por eso el M420 S1 tiene que ir después, para volver a prenderla, y por esa misma razón la variante de volver a palpar que viene más abajo pone el G29 después del G28 y nunca antes. Con un sensor instalado, Marlin además exige hacer home de Z en un punto seguro y no en la esquina (la opción Z_SAFE_HOMING), porque en la esquina extrema el sensor quedaría colgando fuera de la cama, sin nada debajo.

Y luego viene el paso que todo el mundo olvida. Guardar la malla no significa que la impresora la use. La malla tiene que cargarse y activarse al inicio de cada impresión, que es una línea en el start G-code de tu slicer:

M420 S1

Ponla después del G28 en la secuencia de inicio. Sin ella, la impresora guarda obedientemente un mapa perfecto de tu cama y luego lo ignora, y tú concluyes que el nivelado automático no sirve.

Si prefieres volver a palpar antes de cada impresión en lugar de confiar en una malla guardada, cambia el M420 S1 por un G29 en el start G-code, siempre después del G28. Cuesta un minuto o dos por impresión y es más robusto si mueves la impresora de lugar o cambias de superficie seguido.

Gráfico de reemplazo que dice que la captura de la malla de la cama viene en camino
La malla de la cama después de un G29, mostrando qué tan lejos de plana está en realidad.

Por qué las piezas altas dejan de seguir la cama
#

Hay un comportamiento que sorprende a casi todos la primera vez que lo notan: la corrección se desvanece con la altura. ENABLE_LEVELING_FADE_HEIGHT viene activado de fábrica en Marlin, con DEFAULT_LEVELING_FADE_HEIGHT 10.0, y los dos están tal cual en el firmware que corre en mi máquina. Ese valor no lo elegí yo, lo heredé, y después de compilar el firmware con mis propias manos prefiero saber qué está haciendo a que me tome por sorpresa más adelante. El comentario de Configuration.h lo describe con precisión: “Gradually reduce leveling correction until a set height is reached, at which point movement will be level to the machine’s XY plane.”

Dicho de otro modo, mi impresora hace todo el trabajo de la malla en los primeros 10 mm de la impresión y de ahí en adelante lo va difuminando, y por encima de esa altura se mueve en su propio plano horizontal en lugar de seguir la forma de la cama. Eso es intencional y es el comportamiento que quieres: la compensación existe para rescatar las primeras capas, no para inclinar una pieza de 200 mm de alto siguiendo el pandeo del vidrio. Si en algún momento quieres cambiarla, M420 Z<altura> ajusta la altura de desvanecimiento en caliente.


Cuando no funciona
#

El pin parpadea en rojo y se queda abajo. Eso es un estado de alarma, normalmente porque el pin está obstruido, porque le pegaron al sensor, o por una mala conexión. Manda M280 P0 S160 para resetearlo. Si vuelve a alarmar de inmediato, revisa que el pin se mueva libremente.

No hay autotest al encender. Sin autotest no hay 5 V o no hay tierra: es problema de cableado, no de firmware.

Despliega y guarda, pero la impresora se clava en la cama. La señal de control está bien y la de disparo no. Regresa a la prueba de M119 de arriba.

La malla parece cordillera. Valores que varían más de unas cuantas décimas de milímetro casi siempre apuntan a algo mecánico: soporte del sensor flojo, un resorte de la cama sin tensión, o un sensor que no está a escuadra. Eso se arregla ahí, no en software.

La primera capa queda pareja pero demasiado alta o demasiado baja. Eso es puramente el offset de Z. Ajústalo con babystepping durante una impresión hasta que se vea bien y guarda con M500.


Qué ganas con esto, y qué sigue
#

Con el sensor montado, cableado y sus offsets medidos, tu Ender 3 ya no necesita el ritual de las cuatro perillas. Mide su propia cama y Marlin corrige por eso automáticamente, impresión tras impresión. La mía pasó de una primera capa que dependía de qué esquina estuviera cuidando yo, a una que sale pareja de orilla a orilla, que es justo el tipo de resultado poco vistoso pero repetible que de verdad importa en el día a día.

Llegar ahí, eso sí, dio por hecho un firmware que ya sabe del sensor: que BLTOUCH está activado, que el probe está en PC14, que el nivelado bilineal está encendido, que los offsets están guardados. Ese firmware no aparece por arte de magia.

La parte 4 lo construye: VS Code, PlatformIO, Auto Build Marlin, y el conjunto específico de cambios de configuración que convierten una descarga genérica de Marlin en firmware para esta máquina en particular.

Mejorando la Ender 3 - Este artículo es parte de una serie.
Parte 3: Este artículo