Doble Z y autonivelado

Una gran mejora para una impresora 3D es la posibilidad de disponer de doble motor en el eje Z dando más consistencia a este eje ya que normalmente tiene que soportar el peso del cabezal de impresión

Una gran mejora para una impresora 3D es la posibilidad de disponer de doble motor en el eje Z dando más consistencia a este eje ya que normalmente tiene que soportar el peso del cabezal de impresión o la cama en formato CoreXY.

Nos vamos a centrar solamente en la parte de configuración ya que la parte mecánica dependerá mucho del tipo y modelo de impresora.

Tenemos las siguientes opciones...

Usar los dos motores Z en un mismo driver.

Esta opción es la normal y más adecuada en el 90% de los casos, para averiguar si estamos en ese 10% tendremos que ver el consumo A (amperios) de nuestros motores y la capacidad de nuestros drivers, en este aspecto no hace falta que el driver soporte la suma A de ambos motores pero si que al menos soporte ⅔ de esa suma. Para la conexión de ambos motores dependiendo de tu placa disponemos de dos opciones:

La placa dispone de doble conector para motores en Z

Placas SKR 1.4, SKR MINI v2, MINI E3 TURBO... como ejemplo.

Si no disponemos de doble conector en la placa

Podemos optar por un módulo splitter existen serie y paralelo

Usar drivers separados en Z

En el caso que nuestros motores no sean soportados por un solo driver o que nos interese separarlos por disponer de otras funcionalidades para sincronización automática de nivelado en Z deberemos de usar un puerto de driver libre de nuestra placa para instalar el nuevo driver y configurarlo en Marlin.

Instalación del nuevo driver, para este ejemplo utilizaremos una SKR 1.4 y el módulo del driver E1.

Recordar que los jumpers y/o cualquier otra configuración de la placa para habilitar el driver correctamente se tiene que hacer de igual forma que el resto de drivers.

Recuerda que al usar doble Z en drivers independiente cada motor de Z ha de ir conectado a su correspondiente driver destinado a Z.

El primer motor Z, cartesiana el del lado izquierdo, ha de ir conectado normalmente en el zocalo de Z.

El segundo motor Z, cartesiana en el lado derecho, se ha de conectar en el zocalo del motor de ese driver (NO, en el caso que la placa disponga de ello, en el segundo zócalo de Z ya que este va sobre el mismo driver).

Habilitar Doble Z con autonivelación

Habilitaremos en Marlin (configuration.h) un nuevo driver en Z2, en este caso como ejemplo un TMC2209 en modo UART. Recuerda que en configuration_adv deberías de configurar del mismo modo que el eje Z original los valores de microsteps y vref (revisa el apartado de UART del documento para más detalle) #define Z2_DRIVER_TYPE TMC2209

Al definir Z2 Marlin usará como Z2 el siguiente driver que no este en uso. En el ejemplo E1 ya que no tiene definida ninguna función directamente. En el caso de tener una placa con tres extrusores (E0,E1 y E2) y tener definidos dos extrusores en Marlin (E0 y E1) se le asignará el rol de Z2 al siguiente driver libre, en este caso E2.

Habilitaremos también (configuration.h) el doble Z #define Z_DUAL_STEPPER_DRIVERS en el caso de versiones de Marlin 2.0.6.x o superiror en configuration_adv.h #define NUM_Z_STEPPER_DRIVERS 2

En el caso de versiones de Marlin 2.1.x o superiores ya no es necesario realizar estos cambios ya que al activar los diferentes drivers en Z que hicimos en el paso anterior será suficiente.

Para versiones de Marlin <2.0.8 si los motores giran en direcciones contrarias girar el cableado para corregirlo.

Para versiones >= 2.0.8.x ya puedes cambiar el giro del motor desde configuration_adv.h en las siguientes lineas:

// Enable if Z motor direction signals are the opposite of Z1 //#define INVERT_Z2_VS_Z_DIR //#define INVERT_Z3_VS_Z_DIR //#define INVERT_Z4_VS_Z_DIR

Podemos realizar el autoalineado de dos formas:

Usando finales de carrera fisicos

En el caso que sea necesario habilitar doble final de carrera y en que endstop está ubicado #define Z_DUAL_ENDSTOPS #if ENABLED(Z_DUAL_ENDSTOPS) #define Z2_USE_ENDSTOP _XMAX_

Para veriones 2.0.6.x o superiores:

#define Z_MULTI_ENDSTOPS

En este caso recordar que el final de carrera a utilizar se tiene que habilitar también.

// configuration.h
#define USE_XMAX_PLUG

Usando un sensor de nivelación automático (bltouch, inductivo, etc...)

Si realizamos el ajuste de doble Z con un ABL o sensor de nivelación, algo más que aconsejable, habilitaremos el comando G34 de la siguiente forma (recordar que previamente debemos tener configurado un probe y correctamente funcionando (revisar la parte de nivelación en este documento para más información y habilitado el driver):

// configuration_adv.h
#define Z_STEPPER_AUTO_ALIGN

El siguiente paso es para indicar en qué puntos se tomarán las medidas por parte del sensor para realizar la alineación. Podemos definir estos puntos de dos formas diferentes:

Automático, de esta forma Marlin calculará la posición de los puntos dependiendo del número de drivers en Z definidos y las posiciones que indiquemos en Z_STEPPERS_ORIENTATION siguiendo el siguiente esquema:

Para ello habilitaremos Z_STEPPERS_ORIENTATION y le asignaremos el número que coincida con la orientación de nuestros ejes Z:

// configuration_adv.h
  #ifndef Z_STEPPER_ALIGN_XY
    #define Z_STEPPERS_ORIENTATION 0 // Ejemplo para dos motores en Z y estos colocados en X
  #endif
  • El cálculo de coordenadas automático está disponible en versiones recientes de Marlin

  • El cálculo automático puede no siempre ser correcto ya que depende de otras configuraciones en Marlin relacionadas con los offsets del sensor, márgenes de mallado y offsets en el homing

Manual, en el caso que por fallo del método automático o por necesidades personales de nuestra máquina necesitemos definir los puntos de medida para el alineado habilitaremos y definiremos los puntos mediante Z_STEPPER_ALIGN_XY. Para el cálculo de puntos os hacemos las siguientes sugerencias/tips:

Para calcular coordenadas de medición en un doble Z tenemos dos opciones:

  • coordenada segura, son unas coordenadas que calcularemos en base al tamaño de nuestra cama. No es la forma más óptima pero si la más segura aunque es importante revisar que el valor de X de la primera coordenada no sea menor que el offset (entero) de nuestro sensor.

    • Primera coordenada usaremos el valor de 1/4 de X y 1/2 de Y

    • Segunda coordenada usaremos el valor de 3/4 de X y 1/2 de Y

  • coordenada ajustada a offsets del sensor de nivelación, es otra opción que permitirá un cálculo más ajustado (los siguientes ejemplos son para una cama de 220x220)

    • Primera coordenada

      • X

        • si nuestro offset de X del sensor de nivelación es positivo usaremos X5 dado que nuestro sensor no quedaría fuera de la cama podemos ajustar al mínimo con un margen de 5mm

        • si nuestro offset de X es negarivo usaremos ese valor y le sumaremos 5... por ejemplo un offset de X-50 usaremos X55 (50+5)

      • Y

        • si nuestro offset de Y es positivo usaremos la siguiente fórmula (Ymax/2)-Yoffset... para un caso que nuestro sensor tenga un offset en Y de 10... (220/2)-10=100... con lo cual usaremos Y100

        • si nuestro offset de Y es negativo la fórmula será (Ymax/2)+Yoffset... para un caso de Yoffset de -10... (220/2)+10=120.. con lo cual usaremos Y120

      • Segunda coordenada

        • X

          • Si nuestro offset de X es positivo usaremos la siguiente fórmula Xmax-Xoffset-5.. para el caso anterior de Xoffset -50... 220-50-5=165... usaremos X165

          • Si nuestro offset es negativo simplemente restaremos 5 al valor Xmax dado que nuestro sensor no tiene peligro de quedar fuera de la cama... 220-5=215... usaremos X215

        • Y usaremos el mismo cálculo que en el primer punto

Ejemplo para impresora 220x220, con offsets del sensor X50Y10 y en "coordenada ajustada a offsets del sensor de nivelación":

// configuration_adv.h
#define Z_STEPPER_ALIGN_STEPPER_XY { { 5, 100 }, { 165, 100 } }

Ejemplo para impresora 220x220 y en "coordenada segura":

// configuration_adv.h
#define Z_STEPPER_ALIGN_XY { { 50, 110 }, { 175, 110 } }

Por defecto Marlin incluye tres puntos de medida, depende del numero de motores estos puntos deben coincidir en número, 2 motores Z 2 puntos de control, 3 motores Z 3 puntos de control...

Número de repeticiones de test para un ajuste fino del offset. #define Z_STEPPER_ALIGN_ITERATIONS 10

Habilitar el leveling después de un G34, tal como hacemos con un G28 con un nivelado de cama G29 #define RESTORE_LEVELING_AFTER_G34

Comprobaciones previas:

  • verificar la correcta dirección de los motores en Z

  • verificar que los finales de carrera o probe funcionen correctamente M119

  • realizar un G34 desde un terminal para verificar que las posiciones de check y el proceso se hace correctamente

Última actualización