Bltouch/3DTouch/CRTouch/MicroProbe
Tener instalado un sensor de Nivelación nos permite asegurar unas primeras capas perfectas sin tener que estar ajustando manualmente nuestra mecánica.
Última actualización
¿Te fue útil?
Tener instalado un sensor de Nivelación nos permite asegurar unas primeras capas perfectas sin tener que estar ajustando manualmente nuestra mecánica.
Última actualización
¿Te fue útil?
En este caso usaremos un sensor por contacto con servo o comúnmente conocido como Bltouch, que es un sensor con mucha precisión y polivalente ya que puede trabajar en cualquier superficie.
Su funcionamiento es muy sencillo, básicamente consta de un solenoide que gracias al imán que lleva en la punta de sondeo permite recoger o desplegarlo. En las diferentes generaciones de sensores o marcas podemos encontrar que la detección de sondeo se realiza mediante un sensor hall (campos magnéticos) o uno óptico... cada uno tiene sus ventajas e inconvenientes en cualquier caso ambos dan una excelente precisión.
Para más información visita https://3dwork.io/configurar-bltouch-en-marlin/
Podéis encontrar como ejemplo el sensor original de AntcLabs y un clónico 3DTouch:
Es importante asegurarte que el pineado es correcto, depende de la versión o modelo del sensor el orden de los pines o los colores del cable pueden variar!!!
No nos hacemos responsables de ningún problema de conexionado, es vuestra responsabilidad aseguraos que el orden del cableado es correcto en cada caso.
Los siguientes ejemplos se muestran como ejemplos
Es importante colocar el jumper rojo en la posición de 5v para alimentar correctamente nuestro sensor.
Creality tiene un amplio catálogo de máquinas y electrónicas que montan en ellas:
En el caso de electrónicas antiguas montadas sobre Ender 3/Pro, Ender 5 o CR-X no disponen de conectores y se usa un adaptador que extrae algunos pines del conector EXP
Electrónicas más actuales (4.2.x) ya disponen de un conector destinados al uso del sensor, normalmente Ender 3 V2 y Ender 5 Pro aunque algunas de las anteriores pueden llevar también estas electrónicas.
También algunos modelos que cuentan con una placa intermedia de conexiones en el hotend como las CR-10 V2 y V3 disponen de un conector pre-cableado
También os añadimos esquemas de pines para los modelos de BLTouch y clones más extendidos:
Dependiendo de como conectemos nuestro sensor de nivelación a nuestra placa podemos optar por dos tipos de configuración en Marlin:
En el caso que el sensor de nivelación de cama se encuentre en el conector del final de carreras Z-MIN/Z-STOP dependiendo de la placa:
En el caso que nuestra placa disponga de un conector especial PROBE para sensores de nivelación y dependiendo de la versión de Marlin usada (normalmente 2.0.7.x ya soporta la mayoría de placas actuales)
Si nuestro fichero pin de nuestra placa no contempla la definición del PROBE_PIN deberemos definirla aqui (XXX sera el pin usado):
Indicamos el tipo de sensor de nivelación
#define BLTOUCH
Una parte muy importante del proceso de instalación de un sensor de este tipo es ajustar los valores de offset del sensor.
Los offsets del sensor, en X e Y, es la distancia entre la punta de nuestro nozzle y la punta del pin de nuestro sensor... en las siguientes capturas podréis verlo de una forma visual.
Dependiendo de la ubicación del sensor estos valores han de indicarse como un valor positivo o negativo... en la siguiente imagen, sacada del fichero de configuración de Marlin, puede aclararnos como identificar si es uno u otro.
Entendiendo del diagrama anterior que FRONT es el frontal de nuestra impresora y N nuestro sensor tomaremos los numeros 1 2 3 4 como posibles ubicaciones de nuestro sensor y dependiendo de ello usaremos de Example en cada caso para obtener si el valor es positivo y negativo para X dependiendo del valor de right/left y en el caso de Y lo mismo pero con back/front.
Por ejemplo si nuestro sensor se encuentra en 3 usaremos la distancia offset con valor positivo (right+) para X y negativo (front-) para Y.
Otro aspecto importante a la hora de instalar el sensor es la colocacion de altura en el eja Z, en el siguiente esquema tenéis un ejemplo:
Con el pin recogido del sensor ha de quedar entre 2.3-4.3mm del nozzle en su vertical, para que al desplegar el pin durante el sondeo (6.6mm) nos aseguremos que este se activa correctamente antes de chocar el nozzle con la cama.
Por último y en referencia al offset de Z o Z-Offset es la distancia entre que el sensor se activa durante el proceso de sondeo y la punta del nozzle como podéis ver en la siguiente imágen... en todo caso no hay que preocuparse en esta fase del proceso ya que esta medida/ajuste la realizaremos más adelante en la sección de ajuste de Z-Offset.
Ajustamos los offsets (localización del sensor de nivelación con respecto a la punta del nozzle) del sensor de nivelación
#define NOZZLE_TO_PROBE_OFFSET…
Es muy importante una vez subidos los cambios veríficar que los offsets esten correctamente cargados en la EEPROM. Esto lo podemos verificar usando el comando M503 desde Pronterface/Octoprint o desde la propia pantalla (segun version y opciones habilitadas en Marlin) en Configuración/Avanzado/Probe Offsets.
En el caso que no estén cargados correctamente esros valores podemos refrescar los datos desde Pronterface/Octoprint usando M502 M500 o desde la pantalla de la impresora Configuración Reset Load Save Eeprom.
Si deseamos cambiarlos sin tener que compilar Marlin podemos desde Pronterface/Octoprint usar el comando M851 y despues un M500 (guardarlos en EEPROM) y un M503 para verificar que se guardaron correctamente. Por ejemplo para un desfase X de -1.7 e Y -1.3 de nuestro PROBE usariamos el siguiente comando.
En el caso de tener cama de cristal con grapas/clips ajustamos el margen de seguridad para que el sensor no toque con las grapas/clips
#define MIN_PROBE_EDGE 20 // En este caso decimos 20mm de seguridad
Para versiones 2.0.6 de Marlin o superiores:
#define PROBING_MARGIN 20 // En este caso decimos 20mm de seguridad
Para una mayor resolución en las medidas del sensor podemos habilitar que realice diferentes medidas en un mismo punto
#define MULTIPLE_PROBING 3 // Realizar tres medidas en cada punto
Para poder encontrar el Z-offset que necesitaremos más adelante y para el cual tenemos varios métodos es interesante poder bajar nuestro eje Z por debajo de su límite. Para ello podemos comentar la siguiente línea de Marlin:
// #define MIN_SOFTWARE_ENDSTOP_Z // Permite mover el nozzle por debajo de 0 en Z
Aconsejamos realizar este cambio solamente si eres un usuario avanzado ya que puede ser peligroso no deshabilitar los limites de la máquina.
Es preferible usar el proceso de Z-Offset desde el Wizard o desde Pronterface.
Para sensores tipo BlTouch es necesario invertir el funcionamiento de final de carrera
#define Z_MIN_PROBE_ENDSTOP_INVERTING false
Por seguridad y teniendo en cuenta la localización del sensor es aconsejable que el homing en Z se realice en el medio de la cama
#define Z_SAFE_HOMING
Es importante habilitar esta linea dado que un G28 desactiva el autonivelado, de esta forma no lo hará
#define RESTORE_LEVELING_AFTER_G28
Es muy útil y necesario habilitar las opciones de nivelación en el LCD
#define LCD_BED_LEVELING
LCD_BED_LEVELING no es compatible con pantallas que no usan modo Marlin, en el caso que de error de compilación se deberá de deshabilitar.
Seleccionar el método de nivelado a usar, descomentar solamente una de las líneas solamente:
En esta guía y dado que el objetivo es la configuración del sensor y el tipo de nivelado va a depender de las necesidades de cada uno usaremos BILINEAR como ejemplo para simplificar el proceso.
Aunque recordamos de nuevo que usar UBL es siempre aconsejable por sus ventajas.
Tal como hemos comentado, y para simplificar esta guía vamos a utilizar el mallado BILINEAR como ejemplo... podemos ajustar el tamaño de nuestra malla ajustando GRID_MAX_POINTS donde podremos indicar los puntos de sondeo por eje... el número de puntos totales será el resultado de multiplicar ambos valores:
Otro valor interesante es el de ajustar hasta que punto de la impresión se realizarán las correcciones, por defecto Marlin aplica estas correcciones en los primeros 10mm pero dependiendo de las necesidades se puede ajustar asegurando que habilitamos
Habilitar el homing por eje, muy útil para ver que cada eje funciona correctamente en el proceso de homing
Otro cambio muy interesante e útil es la activación del nivelado mediante sensor/probe en el asistente de nivelación de cama de 4 esquinas que nos ayudará a dejar nuestra cama de una forma sencilla y fiable lo más recta posible.
Actualmente diponemos de dos tipos de asistentes que pueden ser más adecuados o no dependiendo de nuestra impresora y sensor.
Nivelado de cama usando la activación del sensor, en este caso nuestro sensor toma la lectura de uno de las esquinas y la usa como referencia para ajustar el resto de esquinas... en este caso movera a cada una de las esquinas y moveremos manualmente las ruedas hasta que active el sensor y de por buena la nivelación de ese punto.
Para versiones de Marlin anteriores a la 2.0.9.x:
Para versiones de Marlin posteriores a la 2.0.9.x
Es necesario ajustar las coordenadas donde se realizará el test de las 4 esquinas para que al compilar no genere un error. Primero revisaremos el valor que tenemos en los offsets de nuestro sensor/probe, tomamos el siguiente como ejemplo:
A continuación cogiendo como referencia el valor absoluto mayor en los offsets del sensor/probe para los ejes X e Y de la anterior linea le sumaremos 5, en nuestro caso 35+5=40 y colocaremos ese valor en la siguiente linea:
Esto es una sugerencia de cálculo rápido y válido para el cálculo para las 4 esquinas con sensor aunque dependiendo de la máquina puede variar, es importante entender que ese punto que elijamos para las 4 esquinas el sensor de nivelación quede dentro de la cama ya que las coordenadas hacen referencia a la punta del nozzle
Nivelado de cama usando las lecturas del sensor, en este caso nuestro sensor toma la lectura de uno de las esquinas y la usa como referencia para ajustar el resto de esquinas... a diferencia del anterior en este caso el asistente pasa por las diferentes esquinas y podemos realizar lecturas de ese punto y vamos ajustando a mano hasta ajustar al valor más ajustado que podamos.
Al igual que con LEVEL_CORNERS_INSET_LFRB deberemos ajustar las coordenadas de TRAMMING_POINT_XY correctamente para nuestra impresora. Las coordenadas son las físicas de nuestros tornillos de ajuste pero teniendo en cuenta nuestro offset del sensor así que tendremos que ajustar en el caso que al aplicar esos offsets quede fuera la coordenada de nuestra área de impresión. Tenéis, como referencia, una calculadora aquí que podéis encontrar más abajo.
Es aconsejable aumentar el tiempo de respuesta para evitar problemas de comunicaciones en sensores clones especialmente, para sensores originales revisa la documentación del fabricante:
#define BLTOUCH_DELAY 500
Otra funcion interesante a activar para prevenir problemas de comunicación en el caso de cables no apantallados o muy largos es forzar el modo SW que permite el enviar pulsos más largos mejorando ruido en las señales
#define BLTOUCH_FORCE_SW_MODE
Es aconsejable activar reintentos en el proceso de generacion de malla G29 para prevenir problemas durante el proceso (esta función puede no ser compatible con todos los sistemas de nivelación como por ejemplo UBL)
# define G29_RETRY_AND_RECOVER
Esta funcionalidad es muy útil para un ajuste fino durante la impresión de la altura del eje Z En configuration_adv:
Es más que aconsejable que antes de intentar cualquier movimiento con nuestra máquina realicemos unas comprobaciones previas para asegurarnos que todo funciona correctamente y no llevarnos algún susto o dañar nuestra máquina.
Comprobación del sensor:
Revisar la parte SERVO, la parte servo funciona con el grupo de tres cables (rojo/amarillo/negro). Para comprobar si funciona correctamente lo aconsejable es desde la pantalla ir a Configuración donde encontraremos un menu para gestionar el bltouch. Tambien se puede hacer esta parte con gcode desde un terminal:
En este caso, si nos falla la parte SERVO, tenemos que comprobar que podamos desplegar y recoger el pin manualmente. Si manualmente funciona pero no funciona lanzando los comandos deberemos revisar el cableado o en el caso de placas antiguas la definición del SERVO en Marlin. También se puede dar el caso de que nuestro pin del sensor no mantenga el imán en buenas condiciones y sea necesario imantarlo de nuevo. Tienes un video del proceso mas abajo.
Comprobación de la parte ENDSTOP, la parte endstop funciona como cualquier endstop y esta gestionado por el par de cables negro y blanco que normalmente colocamos en el puerto PROBE o Z-STOP/Z-MIN de la placa. Dependiendo de las versiones de Marlin debera colocarse en uno o en otro si esta soportada la placa o no completamente. Para comprobar que funcione correctamente y tal como hicimos en el paso anterior mediante el menu o comandos desplegamos y recogemos el pin y comprobamos con M119 que el enstop cambia de TRIGERED (pin recogido) a OPEN (pin desplegado) correctamente.
En el caso que la parte servo funcione correctamente y el estado del ENDSTOP no sea el correcto, normalmente el pin vuelve a recogerse automáticamente al detectar el sistema que no detecto ese cambio de estado, deberemos fijarnos principalmente en dos cosas:
orden correcto del cableado de la parte endstop en nuestra electrónica, te recuerdo que tiene polaridad y el pin GND y SGN tienen que ir donde toca
incorrecta configuración de nuestro firmware si hemos indicado que use ZMIN o PROBE como pin de señal endstop y colo camos el cableado donde no taca. En este caso podemos ajustar el firmware o el cableado según sea oportuno.
Activar Modo Debug nivelado
El modo debug para el nivelado se tiene que activar solo en caso de problemas con el proceso de nivelación si no es el caso puedes obviar este punto.
Cambios en Marlin (configuration.h):
#define DEBUG_LEVELING_FEATURE // Permite obtener información detallada en caso de problemas
Comandos gcode para habilitar/deshabilitar el modo Debug:
M111 S38 ; LEVELING, ERRORS, INFO
M111 S0 ; Disable debug
Activar Test de precisión Permite habilitar un menú dentro del LCD para realizar tests de repetitibilidad y mostrar el rango de precisión del sensor: #define Z_MIN_PROBE_REPEATABILITY_TEST
Verificar ajuste del pin para errores aleatorios en lecturas Se pueden dar dos casos que el pin este demasiado junto al servo que imanta el mismo y evite que caiga o que el imán del pin no tenga la suficiente tracción por el estado de su imán para que el servo lo pueda imantar y retraer. En estos casos mediante el tornillo central podremos ajustar ambos problemas en la medida de lo posible. Por otro lado en el caso que el pin este totalmente sin iman puedes extraerlo y dejarlo 24h junto con otro imán para que recupere sus propiedades... en caso que ninguna de estas soluciones funcione puedes solicitar un repuesto del pin o del propio sensor. Puedes ver el siguiente video donde puedes ver como es el proceso
El z-offset es la distancia entre que se activa el endstop del sensor y la punta del nozzle + margen de seguridad (tal como hacemos con el test del papel al nivelar manualmente).
Para encontrar y ajustar nuestro z-offset tenemos diferentes procedimientos que podemos seguir, a continuación os explicamos los más comunes.
En todo caso os sugerimos por simplicidad y siempre que vuestro firmware lo soporte o podamos activarlo usar el Wizard de Z-Offset de Marlin.
Desde la version 2.0.7.2 Marlin incluye un nuevo asistente para encontrar el valor Z Offset de una forma sencilla. Para activarlo iremos a configuration_adv y habilitaremos:
#define PROBE_OFFSET_WIZARD
Con esto dispondremos de un nuevo menu en Configuración/Avanzado/Probe Offsets
Realizaremos un Auto Home
Para verificar que todos los valores anteriores de offset son correctos nos fijaremos que el home se realiza en el centro de la cama con el sensor de nivelado en el centro de la misma.
Ajustaremos la temperatura del nozzle y cama a las temperaturas normales de impresion y volvemos a realizar un autohome
Vamos al menu de movimiento para el eje Z y seleccionamos movimientos de 0.1mm y bajamos hasta el punto donde mediante un folio notemos que roza suavemente con la punta del nozzle
En el punto donde encontremos que el folio y la punta del nozzle estan correctos anotaremos el valor que aparece en pantalla para el eje Z el cual debería de ser negativo para sensores bltouch, este valor lo ajustaremos en el menú Z Offset del LCD dentro de Configuracion y dentro de este mismo menu guardaremos en EEPROM y es ideal apuntar este valor en nuestro fichero configuration.h en el #define NOZZLE_TO_PROBE_OFFSET
Realizaremos un test de nivelado (G29) desde la pantalla en Movimiento/Nivelado de Cama/Nivelar Cama
En ocasiones puede que nuestra pantalla de la impresora no funcione o no disponga de funciones para mostrar el asistente/wizard o que no sea cómodo realizar el proceso anterior.
Para estos casos podemos desde un cliente terminal como Pronterface:
Calentaremos cama y fusor a las temperaturas de impresión habitual, idealmente dejar que se estabilicen esas temperaturas durante unos minutos.
Ajustaremos el z-offset a 0 mediante el comando M851
y seguidamente guardaremos en EEPROM con M500
:
Realizaremos un homing usando el comando G28
Mediante los controles de movimiento en Pronterface ajustaremos el eje Z hasta que se encuentre en la coordenada Z0, recuerda ajustar la escala de movimientos al menos a 1mm.
Marlin cuenta con protecciones llamadas software endstops, que previenen que podamos mover los motores en coordenadas fuera de rango, las cuales deberemos deshabilitar para poder movernos a coordenadas negativas. Enviando el comando M211 S0
deshabilitaremos los software endstops.
Volveremos a los controles de movimiento en Pronterface, importante ajustar la escala en 0.1, y con un folio o una galga (0.1) bajar el eje Z hasta que la boquilla roce.
Una vez tengamos la coordenada deseada de Z revisaremos nuestra pantalla o Pronterface para obtener ese número. Por ejemplo en nuestro caso hemos obtenido un valor de -1.48mm con lo que usaremos los siguientes comandos para aplicar ese valor como z-offset, habilitaremos los software endstops y por último guardaremos EEPROM:
Es aconsejable, para evitar perder este valor en futuros cambios, ajustar el z-offset en tus fuentes de Marlin en :
Deberás añadir la función de autonivelación al principio de cada impresión. Eso se hace muy fácilmente configurándose en tu Slicer favorito (Repetier, Simplify3D, Cura, etc.). Simplemente es añadir el comando G29 para nivelar vuestro cabezal antes de cada impresión.
Os dejo un ejemplo de mi script de inicio en cada impresión usando BILINEAR como sistema de nivelación:
En todo caso os aconsejamos revisar la Guia de Calibración Inicial ya que contiene un script de inicio completo con todas las opciones completas.
Como ya os hemos explicado la instalación de un sensor de nivelación nos va a permitir realizar mediciones del estado de nuestra plataforma de impresión para identificar desviaciones y así durante la impresión, normalmente de primeras capas, compensar estas desviaciones para tener esas primeras capas perfectas.
Estas mediciones se llaman "malla de nivelación" (mesh en inglés) y básicamente contiene las medidas del sensor en diferentes puntos de nuestra plataforma de impresión.
nos va a permitir identificar si nuestra cama esta correctamente nivelada, mediante los tornillos de ajuste manual que suelen llevar
identificar problemas en nuestra superficie para compensarlos con un mallado de nivelación más efectivo con más puntos de test o nivelado adaptativo/inteligente
Tenemos diferentes opciones para obtener nuestra malla:
M503, si hemos realizado una nivelación (G29) y guardado en la EEPROM esta mediante este gcode M503 lanzado desde un cliente serial como un ordenador (Pronterface) o host (Octoprint) conectado a nuestra impresora:
G29 T, este comando nos va a devolver también nuestra malla de nivelación pero en este caso de una forma más legible. Normalmente el punto [0,0] es el primer punto de nuestra malla que sería en la parte frontal izquierda de nuestra cama, por otro lado cada fila representa el eje Y (del frontal hacia la parte trasera) y cada columna representa el eje X (de izquierda a derecha).
En este caso podemos visualizar nuestra malla de formas diferentes:
Analizando el M503 o G29 T, os aconsejamos este último por simplicidad.
Podemos habilitar el comando G26 que nos permite lanzar un test de nivelación directamente sin necesidad de generar ninguno desde nuestro slicer, algo muy útil para un test rápido. Dentro de las opciones del G26 podrás ajustar los parámetros básicos de impresión #define G26_MESH_VALIDATION.
En el siguiente link de la documentación de Marlin sobre G26 podéis encontrar como añadir parámetros al lanzar el gcode G26 para ajustar el test o podéis hacerlo desde las fuentes para poner la configuración por defecto:
Nuestro eje X se encuentra torzido, una situación que no es extraña en muchas ocasiones es que nuestro eje X esté torcido y dado que normalmente los sensores de nivelación se colocan alejados del eje y con respecto al nozzle (que este si que suele estar bastante más cercano al eje, el ángulo puede llegar a provocar problemas serios a la hora de realizar nuestro mallado. En el anterior dibujo podéis ver como puede impactar a la fiabilidad de las lecturas del sensor el tener este tipo de problemas en el que observamos que en determinadas áreas de nuestra área de impresión no podemos obtener unas correcciones buenas acabando en unas malas primeras capas. En Marlin contamos con X_AXIS_TWIST_COMPENSATION (M423) con el cual podremos compensar estas desviaciones para que no afecten a nuestro sondeo de cama con el sensor. Una vez activada en nuestro Marlin esta función podremos lanzar el asistente para el ajuste el cual os aconsejamos usar una galga metálica en lugar de un trozo de papel ya que va a ser más fiable el proceso.
Usando un visualizador online, como el del compañero ChillRain que podéis acceder desde aquí, donde básicamente copiaremos el resultado del G29T: Y podremos obtener una imagen 3D de los datos:
Octoprint, si utilizamos un host como Octoprint tenemos plugins como Bed Visualizar que ejecutará los gcode necesarios y nos creará la visualización 3D: