PINDAv2/Inductivos

Tener instalado un sensor de Nivelación nos permite asegurar unas primeras capas perfectas sin tener que estar ajustando manualmente nuestra mecánica.

En este caso usaremos un PINDAv2 que es un sensor que incluye un thermistor que nos permite compensar uno de los puntos débiles de este tipo de dispositivos, la precisión en las lecturas con temperatura.

Otro hándicap es el rango de detección ya que normalmente no son capaces de detectar a través de bases de cristal muy gruesas.

Por el contrario una de sus grandes ventajas es que dado que no disponen de partes móviles como sensores estilo Bltouch son mucho más robustos y menos dados a tener fallos por uso intensivo.

Os recordamos que tienes mas guias de ayuda en nuestro bot de Telegram @ThreeDWorkHelpBot

Esquemas de conexión

Este tipo de sensores dada su simplicidad se conectan de forma normal en el conector Z- en sustitución del final de carrera. De todas formas y para alguna de las placas que disponemos puede ser aconsejable conectarlas en una ubicación diferente:

Esta placa cuenta con un arsenal de conexiones aunque podemos conectar en sus múltiples pines es aconsejable realizarlo en Z+ dado que dispone de la posibilidad de alimentación con diferentes voltajes de forma sencilla y además de disponer de un conversor en la entrada de señal para su pin que traduce las señales de cualquier voltaje al 3.3v requerido internamente.

En el caso que uséis Klipper como firmware para vuestra impresora podéis acceder a esta guía específica.

Cambios en Marlin

  • Si nuestro sensor de nivelación de cama se encuentre en el conector del final de carreras Z-MIN/Z-STOP dependiendo de la placa habilitaremos lo siguiente: #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN // 3DWORK PINDAv2 En el caso que nuestra placa disponga de un conector especial para el endstop del sensor, necesitemos instalarlo en otro conector y dependiendo de la versión de Marlin usada (normalmente 2.0.7.x ya soporta la mayoria de placas actuales) #define USE_PROBE_FOR_Z_HOMING // 3DWORK PINDAv2 Si nuestro fichero pin de nuestra placa no contempla la definicion del PROBE_PIN deberemos definirla aqui (XX sera el pin usado): #define Z_MIN_PROBE_PIN XXX // 3DWORK PINDAv2

  • Indicamos el tipo de sensor de nivelación #define FIX_MOUNTED_PROBE // U1JO PINDAv2

  • 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

M851 X-1.70 Y-1.30
  • Ajustamos el tipo de nivelación automática, inicialmente durante la instalación del sensor de nivelación se aconseja usar BILINEAR pero el aconsejable para dejar en nuestra impresora es UBL que se puede encontrar en esta misma guía el proceso de configuración #define AUTO_BED_LEVELING_BILINEAR

  • 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

Márgenes en el área de sondeo:

A la hora de realizar el sondeo de nuestra cama Marlin calcula los puntos en base al tamaño de nuestra cama y a los offsets del sensor. Por eso es crítico/importante que tanto los offsets de la cama sean correctos (nuestro X0Y0 coincidan con el inicio de la cama y XmaxYmax con el final de esta) como los del sensor.

En cualquier caso en ocasiones nos interesa disponer de más o menos márgenes para la zona de sondeado... por ejemplo si nuestro sensor dispone de un punto de sondeado grueso que pueda quedar fuera de márgenes o si disponemos de clips para sujetar nuestra superficie de impresión. En estos casos contamos con dos valores que nos pueden interesar conocer y en que afectan exactamente:

  • PROBING_MARGIN : este valor aplica un margen sobre los valores calculados del área de nuestra cama + los offsets del sensor. En la práctica, que si ponemos a 0 sondeará justo en los limites de nuestra cama pudiendo ser un riesgo.

  • MESH_INSET: al igual que el anterior aplica un margen pero en este caso sería un margen extra al área calculado sobre PROBING_MARGING. Por ejemplo si configuramos un PROBING_MARGING de 10 (mm) solamente e imaginando que no tenemos offsets en nuestro sensor (algo poco probable pero lo usamos para que se entienda el concepto de forma más sencilla) el primer punto de sondeo será sobre X10Y10. Si además de PROBE_MARGIN usamos MESH_INSET con un valor de 5 (mm) el primer punto de sondeo será X15Y15.

  • 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.

  • Dependiendo del tipo de sensor puede ser necesario invertir el funcionamiento de final de carrera #define Z_MIN_PROBE_ENDSTOP_INVERTING true

  • 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

Marlin/configuration.h
  /**
   * Enable the G26 Mesh Validation Pattern tool.
   */
  #define G26_MESH_VALIDATION
  #if ENABLED(G26_MESH_VALIDATION)
    #define MESH_TEST_NOZZLE_SIZE    0.4  // (mm) Diameter of primary nozzle.
    #define MESH_TEST_LAYER_HEIGHT   0.2  // (mm) Default layer height for G26.
    #define MESH_TEST_HOTEND_TEMP  205    // (°C) Default nozzle temperature for G26.
    #define MESH_TEST_BED_TEMP      60    // (°C) Default bed temperature for G26.
    #define G26_XY_FEEDRATE         20    // (mm/s) Feedrate for G26 XY moves.
    #define G26_XY_FEEDRATE_TRAVEL 100    // (mm/s) Feedrate for G26 XY travel moves.
    #define G26_RETRACT_MULTIPLIER   1.0  // G26 Q (retraction) used by default between mesh test elements.
  #endif

#endif
  • 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 una de las líneas solamente, en este mismo documento está descrito como realizar el tipo UBL aconsejable para camas de gran tamaño o con problemas: //#define AUTO_BED_LEVELING_3POINT //#define AUTO_BED_LEVELING_LINEAR //#define AUTO_BED_LEVELING_BILINEAR // Aconsejable camas menores 235x235 //#define AUTO_BED_LEVELING_UBL // Aconsejable resto de tamaños o con problemas nivelacion //#define MESH_BED_LEVELING

  • 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 #define ENABLE_LEVELING_FADE_HEIGHT

  • Habilitar el homing por eje, muy útil para ver que cada eje funciona correctamente en el proceso de homing #define INDIVIDUAL_AXIS_HOMING_MENU

  • En el caso que nuestro sensor disponga de sonda de temperatura para compensación lo habilitaremos de la siguiente forma #define TEMP_SENSOR_PROBE 1 Tenemos que tener en cuenta que deberemos conectar el pin del thermistor de nuestra sonda a un pin PWM para poder obtener dichas lecturas en el caso que nuestro fichero pins no disponga de el deberemos de crearlo y asignarlo a un pin libre.

Activar asistentes de nivelación de cama manual asistido por el sensor

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:

./Marlin/configuration.h
#define LEVEL_BED_CORNERS
...
#define LEVEL_CORNERS_INSET_LFRB { 45, 45, 45, 45 }
...
#define LEVEL_CORNERS_USE_PROBE
  • Para versiones de Marlin posteriores a la 2.0.9.x

./Marlin/configuration.h
#define LCD_BED_TRAMMING
...
#define BED_TRAMMING_INSET_LFRB { 45, 45, 45, 45 }
...
#define BED_TRAMMING_USE_PROBE

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: define NOZZLE_TO_PROBE_OFFSET { 35, 5, -0.799 } 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: define LEVEL_CORNERS_INSET_LFRB { 40, 40, 40, 40 }

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.

./Marlin/configuration_adv.h
#define ASSISTED_TRAMMING
...
#define TRAMMING_POINT_XY { {  20, 20 }, { 180,  20 }, { 180, 180 }, { 20, 180 } }
...
#define REPORT_TRAMMING_MM
...
#define ASSISTED_TRAMMING_WIZARD

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.

Asistente de Tramming o nivelado de cama manual asistido por sensor:

Desde Marlin 2.0.6 disponemos del asistente para nivelado manual de cama asistido por nuestro sensor de nivelación. Este asistente toma medidas de nuestra cama y nos devuelve la corrección a aplicar sobre las ruedas de nivelación para un ajuste óptimo.

Al activarlo dispondremos de una nueva opción en nuestra pantalla para lanzar el asistente pero... y si no disponemos de una pantalla o esta no es compatible?

Podremos mediante Pronterface, u otro cliente terminal como Octoprint, lanzar el comando G35 que realizará el proceso y nos mostrará por consola los ajustes a realizar:

Es importante que al lanzar el comando indiquemos el parámetro S que añadiendo el valor de la métrica de nuestro tornillo (3 para M3, 4 para M4 y 5 para M5) seguido del sentido de la rosca (0 sentido horario CW, 1 sentido anti-horario CCW).

https://marlinfw.org/docs/gcode/G035.html para más información

Otros cambios en configuration_adv.h

  • 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

  • Al usar un sensor PINDAv2 activaremos la calibración por temperatura para compensar las desviaciones que la temperatura puede provocar en este tipo de sensores #define PROBE_TEMP_COMPENSATION

Resumen de cambios

Para nuestro ejemplo usaremos una placa Fysetc Spider conectando el sensor en el conector Z+ tal como sugiere el fabricante quedando nuestra configuración de la siguiente forma:

// cambios en Marlin/configuration.h
#define USE_PROBE_FOR_Z_HOMING // 3DWORK PINDAv2 - usar sensor para homing
...
#define Z_MIN_PROBE_PIN PA3 // 3DWORK PINDAv2 - definir en que pin esta el probe
...
#define FIX_MOUNTED_PROBE // 3DWORK PINDAv2 - usamos sensor fijo
...
#define NOZZLE_TO_PROBE_OFFSET { 0, -50, -2.90 } //3DWORK PINDAv2 - offsets
...
#define AUTO_BED_LEVELING_BILINEAR //3DWORK PINDAv2 - sistema nivelacion
...
#define PROBING_MARGIN 20 //3DWORK PINDAv2 - margen de seguridad bordes cama
...
#define MULTIPLE_PROBING 3 //3DWORK PINDAv2 - tests por punto
...
#define Z_MIN_PROBE_ENDSTOP_INVERTING true //3DWORK PINDAv2 - ajuste de logica deteccion sensor
...
#define Z_SAFE_HOMING //3DWORK PINDAv2 - realizar homing en el centro de la cama
...
#define RESTORE_LEVELING_AFTER_G28 //3DWORK PINDAv2 - habilitar nivelacion automatica despues del homing
...
#define LCD_BED_LEVELING //3DWORK PINDAv2 - habilitar menu avanzado de nivelacion
...
#define LEVEL_CORNERS_USE_PROBE // 3DWORK PINDAv2 - habilitar asistente de nivelacion 4 esquinas con sensor
...
#define ENABLE_LEVELING_FADE_HEIGHT //3DWORK PINDAv2 - aplicar limites en correccion de nivelacion
...
#define INDIVIDUAL_AXIS_HOMING_MENU //3DWORK PINDAv2 - añadir home por eje en el menu
...
#define TEMP_SENSOR_PROBE 1 //3DWORK PINDAv2 - habilitar el tipo de thermistor del probe, hay que asegurarse que existe el pin en el fichero pins de la placa

// cambios en Marlin/configuration_adv.h
# define G29_RETRY_AND_RECOVER //3DWORK PINDAv2 - permite reintentar el G29 de nivelacion ante un fallo
...
#define PROBE_TEMP_COMPENSATION //3DWORK PINDAv2 - habilita el proceso de calibracion del probe por temperatura

// cambios en Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER.h
// añadiremos lo siguiente debajo del bloque Heaters para indicar que usaremos el thermistor del TH2 de nuestra spider

//
// Temperature Sensors
//
#define TEMP_PROBE_PIN                   TEMP_2_PIN // U1JO PINDAv2 

Activar Babystepping

Esta funcionalidad es muy útil para un ajuste fino durante la impresión de la altura del eje Z En configuration_adv: #define BABYSTEPPING #define DOUBLECLICK_FOR_Z_BABYSTEPPING #define BABYSTEP_DISPLAY_TOTAL

Comprobaciones previas y resolución de problemas

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 de la parte ENDSTOP, la parte endstop funciona como cualquier endstop 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 comprobamos con M119 que el enstop cambia de TRIGERED (algo metálico cerca de la punta del sensor) a OPEN (sin nada metálico en la punta del sensor) correctamente.

  • 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

Ajuste Z-Offset

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.

Ajuste del Z-Offset - WIZARD

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

Ajuste del Z-Offset - Pronterface

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:

M851 Z0    ; Set z-offset to 0
M500       ; Save to EEPROM
  • 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:

M851 Z-1.48 ; Apply z-offset values
M211 S1     ; Enable software endstops
M500        ; Save to EEPROM
  • Es aconsejable, para evitar perder este valor en futuros cambios, ajustar el z-offset en tus fuentes de Marlin en :

Marlin/configuration.h
#define NOZZLE_TO_PROBE_OFFSET

Calibración del sensor de temperatura

Este proceso puede llegar a durar mucho tiempo, cerca de 1hora, con este proceso nos ayudará a mejorar la precisión de las lecturas, realizaremos el siguiente proceso desde nuestro cliente terminal favorito:

  1. G76 - inicia la calibración, tarda alrededor de 1h

  2. M871 - muestra los valores de las lecturas

  3. M500 - almacena en la EEPROM las lecturas de compensación de temperatura

IMPORTANTE!!! cada vez que la EEPROM sea borrada o reseteada se tiene que volver a realizar este proceso si no almacenamos este valor en nuestros fuentes de Marlin!!!

Script de inicio (Comandos GCODE)

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:

G28          ; Efectuar HOME en todos los ejes
G29          ; Comando de nivelar cabezal

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.

Visualizar nuestra malla de nivelación

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.

Porqué es importante visualizar esta malla de nivelació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

Como obtener nuestra malla de nivelación?

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).

Visualizar nuestra malla

En este caso podemos visualizar nuestra malla de formas diferentes:

  • Analizando el M503 o G29 T, os aconsejamos este último por simplicidad.

Última actualización