Sensor nivelación

Un sensor de nivelación es uno de los mejores upgrades que podemos hacer a nuestra impresora 3D que simplificará el proceso de nivelación y mejorará la calidad de nuestras primeras capas las cuales suelen ser de las más críticas.

Aunque la instalación y configuración de un sensor de nivelación, en este ejemplo un BLTouch o inductivo, no es extremadamente complicada si que va a requerir de ciertos cambios a nivel de cableado, montaje, configuración de firmware y calibración.

Un BlTouch es un sensor de nivelación que tiene un sensor de efecto Hall, determina la proximidad basándose en campos magnéticos, además incluye una bobina que permite un control del pin de sondeo y en su instalación en la máquina hemos de asegurarnos que el pin (recogido) se encuentre entre 2.3 y 4.3 mm de la punta del nozzle.

En algunos modelos o fabricantes podemos encontrar que sustituyen el sensor hall por uno óptico.

Para configurar nuestro sensor BLTouch conectado a nuestra electrónica de la impresora seguiremos los siguientes pasos:

  • Abriremos nuestro printer.cfg, lo ideal es hacerlo desde la UI que usemos normalmente ya sea Mainsail o Fluidd

  • Añadiremos una sección nueva llamada [bltouch] siempre por encima de la sección de SAVE_CONFIG donde se guardan todos los valores de ajuste de los diferentes asistentes como PID, mallado, etc... A continuación puedes ver un ejemplo:

[bltouch]
sensor_pin: ^bltouch_sensor_pin
control_pin: bltouch_control_pin
speed: 7
pin_move_time: 0.675

pin_up_reports_not_triggered: True
pin_up_touch_mode_reports_triggered: True
x_offset: -28
y_offset: -13

samples: 3
sample_retract_dist: 10
samples_result: median
samples_tolerance: 0.02
samples_tolerance_retries: 5

En la sección [bltouch] podemos encontrar (más información detallada en la documentación de Klipper):

  • sensor_pin: donde indicaremos el pin de la parte endstop de nuestro sensor

  • control_pin: en este caso indicaremos el pin del servo

  • speed: la velocidad del eje Z al realizar el sondeo

  • pin_move_time: el tiempo de espera para realizar un despliegue o recogida del pin de sondeo

  • samples: el número de veces que queremos que se sondeen cada punto, en inductivos es aconsejable dependiendo del tipo de sensor realizar más de un sondeo

  • sample_retract_dist: en el caso que usemos multi-probing (multiples sondeos por punto) indicara la distancia de retracción de Z para estos sondeos y deberemos ajustar esta para que nuestro sensor cambie de estado antes de realizar el siguiente sondeo

  • samples_result: tipo de media de lectura de valores en multi-probing

  • samples_tolerance_retries : indicaremos cuantos reintentos queremos realizar en un sondeo en el caso que su desviación sea superior al valor en samples_tolerances

  • x y offsets: son los offsets del sensor con respecto a nuestro nozzle

  • Deberemos añadir nuestra sección [bed_mesh] y ajustarla para nuestra máquina, tenéis información aquí.

  • También es más que aconsejable añadir la sección [safe_z_home] para ubicar el sensor en una posición segura para realizar el proceso de homing... tenéis más información aquí.

  • La última parte a modificar será [stepper_z] que ya debería de existir, en este caso tendremos que asegurarnos que el endstop_pin es endstop_pin: probe:z_virtual_endstop

[stepper_z]
...
endstop_pin: probe:z_virtual_endstop
...
  • Usaremos la opción SAVE para guardar los cambios en nuestra configuración

Comprobaciones previas Bltouch

Una vez que tenemos toda la configuración añadida deberemos de verificar que todo funciona correctamente antes de realizar ningún home.

  • Al encender la impresora el BLTouch debería de hacer el proceso de self-test. Este proceso despliega y recoge el pin varias veces y el sensor queda en color rojo. En el caso que el led se quede parpadeando o el pin no llegue a desplegar/recoger deberías de revisar en detalle el cableado y configuración.

Antes de nada, su sensor se queda parpadeando en rojo al iniciar la máquina? que puede causar este error...

Si nuestro BLTouch parpadea rápidamente en rojo (mismo tiempo encendido y apagado...50%) significa que nuestro sensor está en fallo, indicando un fallo durante el proceso de self-test... como por ejemplo un problema de cableado, configuración, obstrucción o fallo servo del pin, etc...

Por otro lado, un patrón de parpadeo más lento (más tiempo de encendido que apagado...80%) es un signo que puedes tener un problema de cableado incorrecto o dañado en 5v o GND.

  • BLTouch parpadeando rápido con patrón 50% on/off, indica un fallo durante el self-test... os sugerimos algunas cosas a revisar:

    • El pin se queda obstruido o no se mueve con normalidad, puede ser por diferentes razones como un incorrecto ajuste de altura del pin central, dañada la parte servo o por factores externos como suciedad

    • El sensor se encontraba muy cerca de la cama y no permitió el correcto despliegue del pin golpeando esta antes de poder activar su señal de check

    • Velocidad de homing en Z muy lenta o rápida

    • Problemas con la configuración de tu firmware

    • Tu sensor está dañado

  • BLTouch parpadeando lentamente con patrón 80% on/off, indica un fallo en la alimentación del sensor:

    • Lo más normal suele ser tener invertidos los cables de alimentación 5v y GND

    • Cableado dañado o problemas de contacto en este

  • BLTouch con el led rojo encendido sin ningún patron de parpadeo, indica que nuestro sensor está funcionando normalmente.

Tenéis más información de estos errores en el manual del BLTouch.

En el caso de usar BLTouch clones tenemos que jugar con los valores pin_up de igual forma que puede que no funcionen muy bien con la macro QUERY_PROBE.

Si al realizar el QUERY_PROBE nos encontramos con el error "BLTouch failed to verify sensor state" será necesario ajustar pin_up_touch_mode_reports_triggered a False.

Si al realizar los tests de prueba del pin para su despliegue o recogida no funciona bien es posible que necesitemos pin_up_reports_not_triggered a False, normalmente el pin no funciona y el estado cambio de open a triggered cuando no debiera.

Los fiales de carrera o endstops usan un pin de entrada input normalmente. Este tipo de pines pueden ser del tipo pull-up o pull-down.

Aunque normalmente la mayoría de nuestras impresoras usan pull-up dependiendo de nuestra electrónica o endstops para estos pines deberemos de indicar si es pull-up ^ o pull-down ~.

Es importante el orden de valores [^~] [!] pin_name

En ocasiones no definir esto de forma correcta puede inplicar que todo este bien pero el estado del endstop no cambie correctamente al estar este activado o no.

  • Ejecutaremos el comando BLTOUCH_DEBUG COMMAND=pin_down desde el terminal. Este comando despliega el pin del sensor y el led rojo debería apagarse. En el caso que el led se quede parpadeando o el pin no llegue a desplegar/recoger deberías de revisar en detalle el cableado y configuración.

  • Ejecutaremos el comando BLTOUCH_DEBUG COMMAND=pin_up desde el terminal. Este comando recogerá el pin del sensor y el led debería de quedar en rojo. En el caso que el led se quede parpadeando o el pin no llegue a desplegar/recoger deberías de revisar en detalle el cableado y configuración.

  • Una vez verificada la parte servo de nuestro sensor comprobaremos la parte endstop lanzando el siguiente comando que desplegará el pin BLTOUCH_DEBUG COMMAND=pin_down

  • Seguidamente ejecutaremos el comando BLTOUCH_DEBUG COMMAND=touch_mode

  • Para comprobar el estado del endstop lanzaremos QUERY_PROBE que debería retornarnos probe:open

  • Manualmente subiremos el pin de nuestro sensor y volveremos a lanzar QUERY_PROBE que debería retornarnos probe:TRIGGERED

  • Si todo ha funcionado correctamente nuestro sensor parece bien instalado!!! lanzaremos el comando BLTOUCH_DEBUG COMMAND=pin_up

  • Ahora vamos a comprobar un homing lanzando el comando G28, idealmente te aconsejaría mover el eje Z a la mitad de su recorrido antes

  • Tan pronto como se inicie el proceso de homing para el eje Z se debería desplegar el pin y comenzar el movimiento hacia nuestra cama, para prevenir cualquier fallo os aconsejamos que de forma manual hagáis que el pin se active lo cual debería de parar el movimiento de homing simulando que se hizo correctamente.

  • Si todo ha ido según lo esperado lanzaremos, esta vez sin intervención manual, un homing con G28 de nuevo

Parece que todo esta correcto así que os sugerimos continuar hacia el ajuste del Z-Offset y nivelación de cama.

Conectando nuestro BlTouch directamente a nuestra Raspberry Pi

En algunas electrónicas antiguas con poca disponibilidad de pines expuestos o compatibles podemos encontrarnos con que añadir un sensor BlTouch es complicado o imposible. En este caso, y si nuestro host es una Raspberry Pi, podremos aprovechar su GPIO para instalar nuestro tan útil sensor de nivelación.

  • El primer paso es asegurarnos que nuestra Raspberry puede ser usada por Klipper como MCU siguiendo este procedimiento. Al final si todo ha ido correctamente dispondremos en nuestro printer.cfg con una sección para nuestra rpi como MCU:

printer.cfg
[mcu rpi]
serial: /tmp/klipper_host_mcu
  • El siguiente paso será adaptar el cableado al siguiente esquema (es necesario disponer de conectores Dupont o similares para adaptar estas conexiones) os aconsejamos tener a mano el esquema GPIO:

    • blanco -> GPIO0

    • negro -> GND justo al lado del GPIO0

    • amarillo -> GPIO27

    • marrón -> GND

    • rojo -> 3.3v (ojo, algunos sensores requieren 5v)

  • Una vez todo conectado, volveremos a nuestro printer.cfg para crear/ajustar nuestra sección [bltouch]:

[bltouch]
sensor_pin: ^rpi:gpio0
#   Pin connected to the BLTouch sensor pin. Most BLTouch devices
#   require a pullup on the sensor pin (prefix the pin name with "^").
#   This parameter must be provided.
control_pin: rpi:gpio27
#   Pin connected to the BLTouch control pin. This parameter must be
#   provided.
z_offset: 0.2
#pin_up_touch_mode_reports_triggered: False
#probe_with_touch_mode: True 
  • el resto de pasos deberían de ser iguales

IMPORTANTE!!!

normalmente cuando activamos un sensor de nivelación este marca nuestra coordenada 0 de Z por encima de la altura física, esta diferencia la encontraremos con el proceso de ajuste del z-offset explicado más abajo.

Para evitar errores de movimientos fuera de rango en el proceso de z-offset u otras nivelaciones hemos de ajustar el position_min de nuestro stepper_z a un valor adecuado y con cierto margen para que nos permita esos movimientos.

[stepper_z]
...
position_min: -5
...

Safe Z Homing

Una configuración común para todos los sensores de nivelación suele ser el safe_z_home. Esta configuración nos ayuda a definir unas coordenadas seguras para que nuestro sensor pueda hacer el homing correctamente. Normalmente lo haremos en el centro de nuestra área de impresión.

Dentro de nuestro printer.cfg crearemos, si no la tenemos ya, la sección [safe_z_home] a continuación os vamos a mostrar un ejemplo:

[safe_z_home]
home_xy_position: 125, 125
z_hop: 10
z_hop_speed: 25
speed: 20

En la sección [safe_z_home] podemos encontrar:

  • home_xy_position: el cual indica la coordenada donde nuestro eje Z realizará el proceso de homing. Por seguridad esta coordenada se aconsaja que sea el centro de la nuestra cama. Recuerda que las coordenadas en Klipper siempre usan la refencia del nozzle por lo que si quieres dejar tu sensor en el centro de tu cama deberás de calcular esas coordenadas teniendo en cuenta los offsets de tu sensor. En el caso que nuestro sensor tenga estos offsets X-20Y20 y una cama de 235x235mm la coordenada seria... X= (235mm/2)+20 (tamaño total de X dividido entre 2 para encontrar el centro y sumamos el offset de nuestro sensor en X al ser este un valor negativo)=X97 Y= (235mm/2)-20 (tamaño total de Y dividido entre 2 para encontrar el centro y, en este caso, restamos el offset de nuestro sensor en Y al ser un valor positivo)=Y147

  • speed: la velocidad a la que se moverán los ejes XY a la coordenada indicada

  • z_hop: la distancia que se alzará el eje Z antes de realizar el proceso de homing

Podéis encontrar la documentación oficial de Klipper sobre el Safe Z Home:

Test de precisión

Una vez tengamos correctamente configurado nuestro sensor de nivelación es aconsejable realizar un test de precisión.

Realizamos el proceso de home para que nuestro cabezal de impresión quede en el medio de nuestra cama y desde el terminal lanzamos la macro PROBE_ACCURACY

Recv: // probe accuracy: at X:0.000 Y:0.000 Z:10.000
Recv: // and read 10 times with speed of 5 mm/s
Recv: // probe at -0.003,0.005 is z=2.506948
Recv: // probe at -0.003,0.005 is z=2.519448
Recv: // probe at -0.003,0.005 is z=2.519448
Recv: // probe at -0.003,0.005 is z=2.506948
Recv: // probe at -0.003,0.005 is z=2.519448
Recv: // probe at -0.003,0.005 is z=2.519448
Recv: // probe at -0.003,0.005 is z=2.506948
Recv: // probe at -0.003,0.005 is z=2.506948
Recv: // probe at -0.003,0.005 is z=2.519448
Recv: // probe at -0.003,0.005 is z=2.506948
Recv: // probe accuracy results: maximum 2.519448, minimum 2.506948, range 0.012500, average 2.513198, median 2.513198, standard deviation 0.006250

El resultado ideal sería que el valor máximo y mínimo fueran idénticos. En la realidad pueden variar de un paso 0.005mm o rotation_distance/(full_steps_per_rotation*microsteps). En el ejemplo anterior el paso de Z es de 0.0125mm.

En el caso que nuestra mediana sea superior a 0.025mm deberiamos de revisar y ajustar nuestra configuración o sensor. Usaremos la macro PROBE_ACCURACY para testear los diferentes parámetros y ver como afectan a la precisión.

Una vez encontrados los valores óptimos se aconseja realizar el proceso de Z-Offset y el mallado de la cama que podeis encontrar en esta guía.

Ajuste del Z-Offset (usando papel o galga)

Pasos previos!!!

  • Es necesario haber realizado un PID de nuestro hotend y cama previo a la realización de estos pasos.

  • Realizar un pre-calentado de cama y hotend en la temperatura que normalmente imprimais durante unos 5-15m

  • Tener realizado la prueba del punto anterior de nivelación de la cama ya sea manual o asistida con sensor

  • Disponer de un folio o galga de 0.1

  • Realizaremos un homing:

    • en el caso que tengamos una máquina con 2 o 3 motores independientes en Z realizaremos primero un Z_TILT_ADJUST (nivelación del gantry) y a continuación un G28 (homing de todos los ejes)

    • en el caso que tengamos una máquina con 4 motores independientes en Z realizaremos primero un QUAD_GANTRY_LEVEL (nivelación del gantry) y a continuación un G28 (homing de todos los ejes)

    • si tu máquina no concuerda con ninguno de los casos anteriores realiza directamente un G28 (homing de todos los ejes)

  • Moveremos nuestro hotend al centro de la cama si no tenemos activo el safe_homing

  • Limpiaremos cualquier malla de nivelación de nuestra cama con un BED_MESH_CLEAR

  • Dependiendo del final de carrera que usemos en nuestra máquina:

    • si tenemos un final de carrera mecánico usaremos Z_ENDSTOP_CALIBRATE... por ejemplo máquinas como las Voron V0, Trident, V2.x o BLV

    • si usamos nuestro sensor de nivelación como final de carrera usaremos PROBE_CALIBRATE

  • Mediante comandos iremos bajando lentamente el nozzle hacia la cama usando TESTZ Z=-1 hasta que estemos cerca para en ese momento realizar movimientos más pequeños usando TESTZ Z=-.01 o incluso menos hasta que nuestro nozzle roce con el papel. Podemos alternar el TESTZ con valores positivos/negativos y mayores/menores hasta que tengamos nivelado a nuestro gusto en ese momento lanzaremos un ACCEPT y un SAVE_CONFIG para guardar la configuración.

En el caso que usemos una configuración modular en la que nuestro zoffset no se encuentre directamente en nuestro printer.cfg puede dar errores al hacer el SAVE_CONFIG.

En estos casos puedes añadir, solamente la primera vez seria necesario, la sección bltouch y el valor de z_offset después de SAVE_CONFIG:

#*# <---------------------- SAVE_CONFIG ---------------------->

#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.

En el caso de un sensor bltouch

#*#

#*# [bltouch]

#*# z_offset = 0.685

#*#

En el caso de un probe normal

#*#

#*# [probe]

#*# z_offset = 0.320

#*#

Os recordamos que Klipper usa valores positivos para su ZOffset para aquellos que vengáis de Marlin.

Klipper normalmente asume que este proceso se realizó en frío, en nuestro caso al hacerlo en caliente normalmente se aconseja realizar un TEST Z=-0.1 o -0.5 antes de guardar los cambios.

De todas formas normalmente es acabar realizando este test con un test de calibración de primeras capas y el ajuste fino de la altura en Z o babystepping.

  • Ahora que ya tenemos nuestro Z-Offset ajustado lo ideal seria hacer una malla de nuestra cama si disponemos de sensor

Si disponemos de una pantalla nativa de nuestra impresora configurada o tenemos KlipperScreen podremos tener un asistente para el proceso.

Ajuste fino del Z-Offset

Es muy probable que después del proceso anterior no acaben de quedar nuestras primeras capas en ese caso lo ideal es realizar un ajuste fino de nuestro Z-Offset durante una impresión de test.

Usando nues UI (Mainsail/Fluidd)

Dentro de nuestro interfaz Mainsail/Fluidd, normalmente en la sección toolhead, usaremos los controles de babystepping para ajustar en tiempo real la altura de primera capa a nuestro gusto.

Usando una pantalla

Dentro del menu Tune podremos encontrar los controles para ajustarlo.

Guardando el nuevo valor de Z-Offset

Ahora que ya tenemos el ajuste fino del Z-Offset deberemos guardarlo en nuestro printer.cfg:

  • En el caso que usemos un endstop físico para ajustar el valor position_endstop lanzaremos el comando Z_OFFSET_ENDSTOP seguido de SAVE_CONFIG... ojo que estor reiniciará tu impresora!!!

  • En el caso que usemos un sensor como final de carrera en Z y para ajustar el valor z_offset lanzaremos el comando Z_OFFSET_APPLY_PROBE seguido de SAVE_CONFIG... ojo que estor reiniciará tu impresora!!!

Compensación en caso de eje torcido

En ocasiones nos podemos encontrar que después de ajustar y nivelar nuestra cama de forma manual, tener unas lecturas precisas del sensor o incluso realizar multiprobing para mejorar las lecturas... el resultado no es el correcto.

Klipper y su compensación de eje torcido no es compatible con todos los tipos de sensores de nivelación.

Para activar la compensación de ejes tocidos, a partir de ahora axis_twist_compensation realizaremos los siguientes pasos:

  • Activaremos [axis_twist_compensation] en nuestro printer.cfg para habilitar el módulo de compensación e idealmente ajustar sus opciones de ser necesario.

  • Desde la consola lanzaremos la macro de sistema AXIS_TWIST_COMPENSATION_CALIBRATE que lanzará un asistente para medir el Z Offset en diferentes puntos de nuestra cama, inicialmente utiliza 3 puntos pero podemos realizar más añadiendo el parámetro SAMPLE_COUNT= y el número de puntos al lanzar la macro anterior

  • Realizaremos el proceso de ajuste del Z Offset normal explicado en puntos anteriores

  • Realizaremos los ajustes de nivelado manual asistido por sensor o screws_tilt_adjust, z-tilt en el caso que los tengamos habilitados para asegurarnos que tenemos todo ajustado correctamente

  • Haremos un home de todos los ejes y haremos un mallado de nuestra cama

  • Realizaremos un test de impresión de primeras capas y haremos los ajustes finos de Z Offset durante este.

Si necesitas más información sobre las configuraciones del módulo axis_twist_compensation puedes encontrarlas en la documentación oficial de Klipper.

Para los comandos relacionados con axis_twist_compensation puedes encontrarlos también en la documentación oficial de Klipper.

Última actualización