Añadiendo sensor de filamento en electrónicas SKR (MINI E3, v1.3, v1.4 y v1.4 Turbo)

Actualmente, la gran mayoría de fabricantes de impresoras 3D nos ofrecen como algo habitual la función de detección de filamento (o de falta de él, para ser más precisos).

Esto significa que cuando nuestra bobina de filamento se agota, Marlin automáticamente detiene el trabajo actual y nos ofrece la posibilidad de insertar otra bobina sin perder nuestra impresión actual.

Y aunque la mayoría de las impresoras ya vienen con este sensor de serie, es probable que si adquiriste la tuya hace unos años no dispongas de esta interesante funcionalidad. De todas formas esto no debe preocuparte, instalar un sensor se reduce a modificar unas pocas líneas del código Marlin y añadir un final de carrera mecánico (u óptico).

En el artículo de hoy abordaremos este tema, y verás que no es para nada complicado añadirlo a tu impresora. Y recuerda, puedes encontrarnos a diario en nuestro canal de Telegram o en nuestras redes sociales (FacebookTwitterInstagram), donde podrás unirte a nuestra comunidad de trastornados por la impresión 3D.

 

Introducción

Un sensor de filamento es un simple final de carrera (endstop) cuya función es simplemente la de detectar la posible ausencia de filamento durante nuestras impresiones. Estos normalmente suelen ser ópticos o mecánicos.

Yo en mi impresora utilizo uno mecánico bastante común y económico. En realidad no tiene mayor importancia, ambos te van a funcionar sin problema alguno, así que la elección del mismo queda en tus manos.

Existen también sensores de corte que diversos fabricantes venden encapsulados y listos para enchufar. Ciertamente es lo más cómodo, pero en ocasiones los precios excesivamente elevados.

Por último destacar que yo estoy utilizando una electrónica SKR v1.4 Turbo, junto con un display TFT35 V3.0 Híbrido. Si bien, las modificaciones de Marlin serán para esta placa, añadiré las variaciones para las otras electrónicas de SKR disponibles actualmente en el mercado.

De todas formas, la funcionalidad Runout Sensor (detección de filamento) es común a Marlin, así que independientemente de la electrónica o display que utilices, los cambios a efectuar aquí salvo los pines donde conectaremos el final de carrera, son comunes.

 

Componentes necesarios

No tiene mucho sentido comprar un sensor por 15 euros cuando puedes fabricarte uno simplemente con un final de carrera que cuesta apenas 1-2 euros.

No obstante te dejo por aquí unos enlaces donde puedes adquirir el que utilizo en mi impresora, así como algunos comerciales que existen en el mercado listos para conectar.

Como ya sabrás de antemano, estos enlaces son de afiliados, lo que significa que 3DWork recibirá una pequeña comisión de la venta, y estarás soportando mi página web.

Final de carrera mecánico
Final de carrera óptico
Bigtreetech Sensor (kit)
Sensor de filamento (kit)

 

Conexión del sensor a la electrónica

La conexión del sensor a nuestra placa dependerá de qué tipo de electrónica poseamos. Más abajo os dejo los pines por defecto que debemos utilizar, así como una imagen con los esquemas que os servirá de ayuda para localizar los conectores y los diferentes pinouts en placa.

No obstante, como referencia, la configuración de los pines está en el archivo de tu electrónica, en la carpeta \Marlin\src\pins. Después, deberás entrar a la carpeta que corresponda con el microprocesador de tu placa y seleccionar el archivo.

Sobra decir que si lo deseas, puedes cambiar los pines de asignación y usar otro conector libre para esta función. De esta forma si tienes una entrada dañada puedes mover a otra con suma facilidad, ya que Marlin es bastante “amigable” en este aspecto.

Es muy importante verificar el pinout antes de conectar el sensor a tu electrónica, de lo contrario si te equivocaras podrías dañarlo. En mi caso, mi final de carrera ya venía con un cable de 3 hilos correctamente configurado y con posibilidad de insertarlo solamente en la posición correcta.

Pero existen finales de carrera con 2 hilos simplemente, que deberás conectar en los pines correspondientes a C o COM (señal) y GND (masa) en tu electrónica. Lo ideal es que conectes C al pin de señal y NC a masa ya que es menos propenso a posibles “ruidos”. De esta forma si se dañara el cable por algún motivo daría la misma señal que si hubieras presionado el final de carrera, protegiendo que no se sobrepasasen los límites de la impresora en ningún caso (ni en rotura).

Además, algunos finales de carrera requieren de eliminar el PULLUP de la configuración de Marlin para operar correctamente. Si es tu caso, debes editar esta linea y eliminar los comentarios:

#define FIL_RUNOUT_PULLUP               // Use internal pullup for filament runout pins.

 

Ubicación de archivos y esquemas

Electrónica Archivo Pines
SKR v1.4 Turbo lpc1768\pins_BTT_SKR_V1_4.h FIL_RUNOUT_PIN P1_26 (E0DET)
FIL_RUNOUT_PIN2 P1_25 (E1DET)
SKR v1.4 lpc1768\pins_BTT_SKR_V1_4.h FIL_RUNOUT_PIN P1_26 (E0DET)
FIL_RUNOUT_PIN2 P1_25 (E1DET)
SKR v1.3 lpc1768\pins_BTT_SKR_V1_3.h FIL_RUNOUT_PIN P1_28
SKR Mini E3 v1.0 stm32f1\pins_BTT_SKR_MINI_E3_V1_0.h FIL_RUNOUT_PIN PC15 (E0-STOP)
SKR Mini E3 v1.2 stm32f1\pins_BTT_SKR_MINI_E3_V1_2.h FIL_RUNOUT_PIN PC15 (E0-STOP)
SKR Mini E3 v2.0 stm32f1\pins_BTT_SKR_MINI_E3_V2_0.h FIL_RUNOUT_PIN PC15 (E0-STOP)

La ubicación de los conectores en las diferentes placas electrónicas las puedes encontrar en los siguientes esquemas oficiales de SKR. Puedes hacer clic en la imagen para agrandarla.

 

Configurando Marlin para nuestro sensor

La configuración no podría ser más sencilla, simplemente es modificar unas pocas líneas de código y ya tendremos el menú disponible en nuestro display y la autodetección activa en todo momento.

Sé que modificar Marlin puede parecer complicado, pero nada más lejos de la verdad. En el caso de que nunca hayas modificado el firmware, te recomendaría que echases un vistazo a un interesantísimo artículo que escribí tiempo atrás.

En el encontrarás toda la información necesaria para poder modificarlo a tu antojo, compilarlo y subirlo a tu electrónica. Puedes visitarlo en el enlace Guía completa: Configurar Marlin 2.0.x desde cero y no morir en el intento

Y como artículo complementario, para poder utilizar Visual Studio Code y compilar firmwares de 32bits, este otro artículo de obligada lectura Configura y actualiza tu impresora 3D utilizando Visual Studio Code y Platform.io

 

Archivo Configuration.h

Lo primero que vamos a hacer es activar la función principal de detección de filamentos. Editaremos el archivo Configuration.h y buscaremos la función FILAMENT_RUNOUT_SENSOR.

Por defecto en Marlin viene desactivada, así que la activaremos eliminando las dos barritas que tiene delante “//”. Debería quedar algo así:

#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500.
#define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
#define FIL_RUNOUT_STATE HIGH // Pin state indicating that filament is NOT present.
#define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
//#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.

Activando esta opción, ya tendremos el menú disponible. Ahora debemos comprobar que efectivamente el sensor está actuando como es debido. Para ello ejecutaremos el comando gcode M119, el cual nos indicará el estado del sensor en todo momento.

En mi caso y como dispongo de un display BTT TFT35 híbrido puedo ejecutar comandos gcode directamente desde la pantalla, algo realmente práctico y que te ahorra tiempo para estos menesteres.

Al ejecutarlo y tener ya correctamente configurado el sensor, me aparece la siguiente información en pantalla:

Como puedes comprobar en la imagen superior, existen dos estados para los finales de carrera. OPEN (sin pulsar) y TRIGGERED (pulsado). Cuando este el filamento insertado el sensor debe estar en estado TRIGGERED ya que aprieta la palanca obviamente.

Si no fuera así y nos indicará el estado OPEN, deberás cambiar la lógica del mismo. Para invertir la lógica, editaremos una línea en el código de Marlin, que dependiendo de la versión de Marlin será diferente, así que pongo las dos variantes:

Marlin v2.0.6.x o superiores
En estas versiones de firmware deberás cambiar el estado modificando la palabra que sigue a la constante FIL_RUNOUT_STATE, que será HIGH o LOW. Por defecto Marlin viene configurado como LOW, así que si precisas de invertir la lógica, cambiala por HIGH.

#define FIL_RUNOUT_STATE HIGH

Marlin inferior a v2.0.6.x
En las versiones inferiores es similar, busca la constante FIL_RUNOUT_INVERTING y cambia el valor FALSE por el valor TRUE, así de simple.

#define FIL_RUNOUT_INVERTING false

 

Y por último en el archivo Configuration.h activaremos la opción de NOZZLE_PARK_FEATURE. Procedemos a descomentar la constante para que quede así:

#define NOZZLE_PARK_FEATURE false

 

Archivo Configuration_adv.h

Ahora es el turno del archivo Configuration_adv.h, que también precisa de un último cambio muy sencillo.

Este será activar el pausado avanzado de impresión, el cual engloba diferentes funciones como la velocidad de carga de filamento, la de extracción, purgado y otras muchas cosas más.

Para tal propósito vamos a descomentar la siguiente línea:

#define ADVANCED_PAUSE_FEATURE

 

Notas finales

Como has podido comprobar, el proceso de configuración de un sensor de filamento no presenta dificultad alguna. Y si has seguido las instrucciones ya deberías tener el sensor de filamento activo y funcional.

Cabe destacar que aunque yo dispongo de pantalla híbrida TFT, el sensor de detección solamente funciona en modo Marlin, ya que aún no está completamente soportado en modo Touch Screen.

Si bien sí que detecta el corte de filamento y nos indica presionar OK para volver a continuar, cuando lo intentas no responde y se queda completamente colgado. Esperaremos a ver si BigTreeTech puede solventar este inconveniente en futuras revisiones del display (o aparece alguna alternativa de configuración que yo actualmente desconozco).

Sin más me despido como siempre. Espero que os sirva este breve artículo de utilidad y espero veros pronto por nuestro canal de Telegram.

 

 

No dudes en leer otros artículos interesantes de 3DWork.io: