Sensorless

Esta funcionalidad nos permitirá realizar la función de endstop o final de carrera sin necesidad de estos

Algunos drivers TMC pueden detectar el choque contra un obstáculo que evita que se pueda mover normalmente. Esta funcionalidad es usada desde Marlin para realizar la función de endstop o final de carrera.

Os recordamos que tienes más guías de ayuda en nuestro bot de Telegram @ThreeDWorkHelpBot

Es muy importante recordar/recomendar que esta función se habilite solamente en los ejes X e Y porque el nivel de precisión dista del requerido en un eje Z donde se aconsejan otros métodos como sensores de nivelación automática.

Hardware necesario a tener en cuenta

En esta guía no vamos a entrar en la configuración hardware para poder habilitar físicamente la impresora y su electrónica, sino la parte de configuración de Marlin.

En cualquier caso, recordar que es imprescindible que los drivers estén instalados y configurados en modo UART, o SPI dependiendo del driver que utilicemos, y dependiendo de la placa es necesario habilitar el jumper dedicado para DIAG/Sensorless.

Recordad que si vuestra placa no dispone de jumpers para habilitar/deshabilitar sensorless:

  • en drivers que se use sensorless (X e Y) el pin DIAG debe de estar conectado a la placa

  • en drivers que no se use sensorless el ping DIAG debe doblarse/cortarse/desoldarse para que no este conectado a la placa

En cualquier caso revisar el manual del fabricante de vuestra placa para más detalle.

Configuración de nuestro firmware

Una vez ya tengamos la parte hardware correctamente configurada/instalada tendremos que habilitar la función Sensorless en Marlin. Empezaremos por verificar que los la lógica de los finales de carrera de X e Y están correctos en configuration.h

./Marlin/configuration.h
#define X_MIN_ENDSTOP_INVERTING false
#define Y_MIN_ENDSTOP_INVERTING false

El ejemplo anterior es para una máquina que realice el proceso de homing en MIN, normalmente en la esquina inferior izquierda, en el caso que tu máquina realice el homing en MAX deberías realizar el cambio en X e Y MAX_ENDSTOP_INVERTING

Continuaremos los cambios en configuration_adv.h habilitaremos lo siguiente:

./Marlin/configuration_adv.h
#define SENSORLESS_HOMING // StallGuard capable drivers only

Una parte clave para que el funcionamiento de Sensorless sea óptimo es tener en cuenta los siguientes puntos que trataremos a continuación con detalle:

  • Velocidad de Homing

  • Corriente del driver

  • Sensibilidad

Es importante recordar que la funcionalidad de Sensorless solo funciona correctamente con los drivers en modo stealChop habilitado

Habilitar el homing por eje, nos será extremadamente útil para el proceso de ajuste de la sensibilidad, que podremos encontrar en configuration.h

./Marlin/configuration.h
// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
#define INDIVIDUAL_AXIS_HOMING_MENU
#define INDIVIDUAL_AXIS_HOMING_SUBMENU

Velocidad de Homing

Marlin dispone de una configuración de velocidades específicas para el Homing que se pueden encontrar dentro de configuration.h:

Los siguientes valores de velocidades de homing SON ORIENTATIVOS deberás averiguar cuáles funcionan mejor con tu máquina.

Para versiones <= Marlin 2.0.7.x

./Marlin/configuration.h
// Homing speeds (mm/min)
#define HOMING_FEEDRATE_XY (50*60)
#define HOMING_FEEDRATE_Z  (4*60)

Para versiones >= Marlin 2.0.8.x

./Marlin/configuration.h
// Homing speeds (mm/min)
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60) }

Valores bajos/medios hacen que el proceso de Homing sea más lento pero mejoran la detección y precisión si usamos sensorless.

Por otro lado versiones recientes de Marlin incluyen una función adapta/ajusta los valores de aceleración y jerk/junction durante el proceso de homing

./Marlin/configuration_adv.h
#define IMPROVE_HOMING_RELIABILITY // 3DWORK SENSORLESS

Corriente del driver

Como comantamos anteriormente esta función de los drivers TMC permiten detectar el choque contra un objeto y esto lo hacen comprobando el consumo de corriente del driver. Durante un movimiento normal del motor el consumo, a una velocidad estable, suele ser siempre el mismo... ahora bien cuando encuentra algún obstáculo el motor aumenta el consumo para continuar su camino y es en ese punto donde los drivers TMC interpretan como un choque y por tanto como un final de carrera/endstop en nuestras impresoras.

Como norma lo ideal es usar el minimo de corriente sin que nuestro motor pierda pasos en este caso Marlin dispone de una configuración especialmente útil para Sensorless que podemos encontrar en configuration_adv.h

./Marlin/configuration_adv.h
#define X_CURRENT_HOME X_CURRENT // 3DWORK SENSORLESS
#define Y_CURRENT_HOME Y_CURRENT // 3DWORK SENSORLESS

Esta opción nos permite ajustar la corriente en ese punto crítico para Sensorless, normalmente bajando un poco la corriente normal por poner un ejemplo podríamos reducir en 20 unidades ese valor para mejorar las lecturas

Es imprescindible que antes tengas ajustado correctamente el vref de tus motores, revisa como hacerlo en nuestra guía de calibración.

El valor de -20 es orientativo deberás encontrar el valor óptimo para tu máquina.

En todo caso la velocidad de homing y la sensibilidad suelen tener más peso normalmente.

./Marlin/configuration_adv.h
#define X_CURRENT_HOME (X_CURRENT - 20) // 3DWORK SENSORLESS
#define Y_CURRENT_HOME (Y_CURRENT - 20) // 3DWORK SENSORLESS

En el caso de usar TMC2130 en modo SPI es aconsejable en caso de problemas habilitar:

#define SPI_ENDSTOPS

Para impresoras CoreXY o similares (el movimiento de los ejes X e Y se realice mediante el uso de dos motores) es aconsejable deshabilitar la siguiente función de Marlin para que los movimientos del homing no realicen movimientos diagonales que hagan funcionan ambos motores a la vez

// #define QUICK_HOME // 3DWORK sensorless CoreXY

Sensibilidad

Dependiendo de la mecánica, motores, etc de nuestra impresora los valores para detectar esos obstáculos no es siempre la misma, es por eso que en Marlin permiten configurar unos umbrales llamados comúnmente sensibilidad

El valor de sensibilidad del siguiente ejemplo es meramente orientativo y deberás encontrar el valor correcto para tu máquina.

Es importante que antes tengas ajustado correctamente el vref de tus motores, revisa como hacerlo en nuestra guía de calibración.

./Marlin/configuration_adv.h
#define X_STALL_SENSITIVITY 100 // 3DWORK SENSORLESS
#define Y_STALL_SENSITIVITY 100 // 3DWORK SENSORLESS

Estos valores van desde el valor más bajo donde no detectará ningún cambio en la corriente hasta el valor máximo en el cual cualquier variación en el consumo de corriente disparará la señal de final de carrera.

Este valor máximo varía dependiendo del tipo de TMC que tengamos:

  • TMC2209/TMC2226 donde el valor más bajo es 0 y el más alto es 255

  • Otros TMC, TMC2130/TMC2160/TMC2660/TMC5130/TMC5160, donde el valor más bajo es +63 y el más alto -64

Relacionado con el ajuste de sensibilidad, hay otros dos valores de Marlin que deberemos ajustar siempre que habilitemos Sensorless:

  • SENSORLESS_BACKOFF_MM el cual siempre hará una retracción de 2 mm en el lado opuesto del Homing para asegurar que el movimiento de homing no es en una posición de bloqueo

./Marlin/configuration_adv.h
#define SENSORLESS_BACKOFF_MM  { 2, 2, 0 } // 3DWORK SENSORLESS
  • HOMING_BUMP_MM con este y al igual que la anterior le decimos que una vez hecha la primera aproximación no retroceda para la segunda aproximación

./Marlin/configuration_adv.h
#define HOMING_BUMP_MM      { 0, 0, 2 }       // 3DWORK SENSORLESS

Ajuste de la sensibilidad

Una vez ya tenemos nuestro firmware compilado y aplicado a nuestra impresora, el siguiente paso es verificar y ajustar la sensibilidad de nuestros ejes.

IMPORTANTE!!!

Os caconsejamos encarecidamente que antes de realizar vuestro primer homing:

  • nuestros drivers están en UART/SPI funcionando correctamente, usando M122 para verificar comunicación

  • verificar que nuestros drivers cuentan con pin DIAG correctamente conectado siguiendo las instrucciones del fabricante

  • si nuestra placa tiene jumpers para habilitar sensorless, que estos estén instalados correctamente

  • que nuestros antiguos finales de carrera físicos NO estén conectados a la placa

  • comprobar que los valores de sensibilidades están cargados en la EEPROM, esto se puede hacer...

    • desde los menús clásicos de Marlin en Configuracion/Avanzado/TMC

    • mediante un terminal, Pronterface o cualquier otro, usando de nuevo M122 y fijándonos en los valores para X e Y de la fila Stallguard thrs

    • si disponéis de una pantalla TFT táctil, serial, dentro de sus menús de configuración si ofrecen esas opciones

En el caso que no tengamos los valores correctos cargados en vuestra EEPROM, que son los que va a usar la máquina, deberemos realizar la recarga de valores en ella:

  • desde los menús clásicos de Marlin en Configuracion mediante Reset/Load/Save EEPROM

  • desde terminal usando M502, M500

  • desde una pantalla TFT táctil si disponemos de las opciones en ella

Comenzaremos por lanzar un home en el eje X ya sea desde el menú de nuestra pantalla o desde un terminal, como Pronterface, lanzando el comando G28 X.

Deberemos estar muy atentos por si el ajuste de la sensibilidad no es la adecuada y tenemos que apagar la corriente de la impresora!!!

Nos podremos encontrar con dos situaciones:

  • Que se pare al mover unos mm realizando el proceso de homing, en ese caso reduciremos la sensibilidad y volveremos a realizar el proceso.

  • Que no pare o que lo haga dando un golpe fuerte, en este caso aumentaremos la sensibilidad y volveremos a realizar el proceso.

El ajuste de la sensibilidad podremos realizarlo desde la propia pantalla desde Configuracion/Avanzado/TMC o mediante el comando M914 X10 (ejemplo para el eje X ajustando la sensibilidad a 10

Es aconsejable que los ajustes los hagamos de 10-5 unidades en cada ajuste para encontrar el punto correcto para nuestra máquina.

Una vez encontremos los valores correctos para nuestra máquina, guardaremos los valores en nuestra EEPROM desde el menú Configuración o usando el comando M500. También os aconsejamos anotar esos valores en los ficheros de configuración fuentes de Marlin para que en futuras compilaciones no se pierdan.

Resolución de problemas:

IMPORTANTE!!!

Os caconsejamos encarecidamente que antes de realizar vuestro primer homing:

  • nuestros drivers están en UART/SPI funcionando correctamente, usando M122 para verificar comunicación

  • verificar que nuestros drivers cuentan con pin DIAG correctamente conectado siguiendo las instrucciones del fabricante

  • si nuestra placa tiene jumpers para habilitar sensorless, que estos estén instalados correctamente

  • que nuestros antiguos finales de carrera físicos NO estén conectados a la placa

  • comprobar que los valores de sensibilidades están cargados en la EEPROM, esto se puede hacer...

    • desde los menús clásicos de Marlin en Configuracion/Avanzado/TMC

    • mediante un terminal, Pronterface o cualquier otro, usando de nuevo M122 y fijándonos en los valores para X e Y de la fila Stallguard thrs

    • si disponéis de una pantalla TFT táctil, serial, dentro de sus menús de configuración si ofrecen esas opciones

En el caso que no tengamos los valores correctos cargados en vuestra EEPROM, que son los que va a usar la máquina, deberemos realizar la recarga de valores en ella:

  • desde los menús clásicos de Marlin en Configuracion mediante Reset/Load/Save EEPROM

  • desde terminal usando M502, M500

  • desde una pantalla TFT táctil si disponemos de las opciones en ella

Última actualización