This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 1 voto(s) - 4 Media
  • 1
  • 2
  • 3
  • 4
  • 5
APORTE Sensor de final de filamento.
#1
Una pregunta reciente en la que se consultaba la forma de utilizar un sensor de final de filamento en una Creality CR-10, así como la posibilidad de habilitar la utilidad Power Loss Recovery, me ha hecho prestar atención a este dispositivo por el que no me había interesado hasta ahora. En este post explicaré como hacer la primera de esas cuestiones, tanto para esta impresora como en cualquiera en que sea posible, dejando para otro post la segunda.

Antes de nada, indicar que para la CR-10 es necesario cargar el bootloader antes de poder grabar un nuevo firmware en ella, cosa que es indispensable para poder implementar todo esto. Explicaré en el post del Power Loss Recovery como hay que hacer este proceso. En principio, todo lo indicado tanto allí como aquí, es válido para todas las impresoras Creality con esta misma placa (Ender 3, por ejemplo).

Un sensor de final de filamento no es más que un interruptor (del tipo que sea), que se acopla en un soporte adecuado para que actúe dependiendo de que esté presente o no el filamento.

Este es un ejemplo que he hecho de forma rápida, con un sencillo interruptor mecánico, pero que es perfectamente funcional:

[Imagen: Img1.jpg]

Marlin tiene una función específica para implementar un sensor de este tipo y lo único que se necesita es un pin de la MCU para controlar la posición del interruptor (exactamente igual que un final de carrera).

Hay que definirlo en el archivo pins_XXX.h correspondiente a la placa (donde XXX es su nombre en Marlin), asignándole ese número de pin al parámetro FIL_RUNOUT_PIN (si hay más extrusores, FIL_RUNOUT2_PIN, FIL_RUNOUT3_PIN, etc.).

Por último, hay que habilitar la función en el archivo Configuration.h, en las siguientes líneas:

#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define NUM_RUNOUT_SENSORS   1     // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
  #define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
  #define FIL_RUNOUT_PULLUP          // Use internal pullup for filament runout pins.
  #define FILAMENT_RUNOUT_SCRIPT "M600"
#endif


Los parámetros a configurar son bastante evidentes: número de sensores (por si hay más de un extrusor), la lógica del interruptor (como en los finales de carrera), habilitar las resistencias internas de pull-up (por si se utiliza una línea directa a la MCU) y el script que se ejecutará cuando se active el final del filamento.

Por defecto, ese script es un comando M600 para el cambio de filamento. Se pueden poner aquí los comandos que se quieran ejecutar cuando el sensor indique dicha situación.

Si se deja por defecto, hay que activar las funciones ADVANCED_PAUSE_FEATURE, en el archivo Configuration_adv.h, para que se habilite el comando M600 y NOZZLE_PARK_FEATURE, en el archivo Configuratión.h, pues es necesaria para el funcionamiento de la anterior.

Una vez configurado el software, la dificultad que se puede presentar es la de encontrar un pin para utilizarlo con el hardware.

Voy a poner el ejemplo de la Creality CR-10 para contestar de paso a la pregunta que indicaba al principio. Todo lo que sigue se basa en la información que he podido reunir sobre esta impresora, pero no tengo la posibilidad de comprobarlo. La información es escasa y a veces contradictoria. Como siempre, cada cual debe utilizarlo por su propia cuenta y riesgo.

La CR-10 puede montar varios modelos de placa. La v1.1.2 trae un conector denominado Ext-A2 que simplifica enormemente la cosa, ya que este conector trae tres pines rotulados V (+5V), G (GND) y S (Señal). Solo hay que conectarlos según explico más adelante. En la v1.1.3 ese conector desapareció y en su lugar trae un condensador electrolítico. Es de suponer que se han usado esas líneas para otro propósito.

[Imagen: Img4.jpg]

Si no se tiene ese conector, la cosa se complica algo, ya que no hay ningún pin libre para utilizarlo, por lo que hay que "robárselo" a otro servicio del que podamos prescindir.

La opción más sencilla y puede que única, es utilizar el conector de la pantalla, pinchando las líneas de alimentación (+5V y GND) y la del zumbador como pin de control (BEEPER_PIN). Esta es la opción que, si no me equivoco, utiliza TH3D para implementar su sensor compatible con estas placas. Como es lógico, esto hace que se pierda la posibilidad de usar el zumbador para realizar sonidos.

Naturalmente, lo mejor es utilizar un adaptador para interceptar dicho conector, pero siendo cuidadosos, se puede realizar de una forma más DIY directamente en el cable plano.

También se podría utilizar esta vía para conectar un sensor del tipo BLTouch-3DTouch, siempre que la línea de +5V del conector de pantalla pueda con los dos dispositivos (pantalla y servo) conectados a la vez, cosa que desconozco.

Si no me equivoco, los pines son estos (aunque mejor es comprobarlo con un polímetro):

[Imagen: Img2.jpg]

1: +5V
2: GND
8: BEEPER_PIN

Para hacerlo, solo hay que separar y cortar con mucho cuidado las líneas necesarias (la 1 es la de color rosado), tal y como se ve en esta imagen:

[Imagen: Img5.jpg]

Las líneas 1 y 2 solo hay que conectar a ellas pero sin cortarlas, pues continúan a la pantalla. La 8 hay que cortarla y conectar en el lado de la placa, dejando sin conectar el lado de la pantalla.

Las conexiones del interruptor de final de filamento serían: línea 8 a la patilla común ( C ), línea 1 a la normalmente abierta ( NO ) y línea 2 a la normalmente cerrada ( NC ).

Para el BLTouch-3DTouch, habría que conectar el 1 al cable rojo, el 2 al marrón y el 8 al naranja.

Si no fuese suficiente la corriente suministrada (si se usa para el BLTouch-3DTouch) o no se quiere cortar tantas líneas del cable plano, se podría utilizar un módulo conversor de 12V a 5V conectado directamente a la fuente de alimentación y cortar sólo la línea de señal en el cable plano.

Por último, para la CR-10 hay que cambiar en el archivo pins_MELZI_CREALITY.H el valor -1 del parámetro FIL_RUNOUT_PIN por 27. Quedaría así:

#define FIL_RUNOUT_PIN     27   // Uses Beeper/LED Pin Pulled to GND

Si se tiene la placa con el conector Ext-A2, solo hay que conectar en él las líneas correspondientes y poner el pin 29 (si no me engañan los esquemas que tengo).

Para las Anet el proceso sería el mismo, con la salvedad de que cambian las líneas a utilizar del cable plano: la 1 es GND, la 2 es +5V y la 3 es la de señal. El pin de control de la MCU es también el 27.

Para RAMPS , la mejor opción es utilizar uno de los conectores de servos. Sólo hay que configurar el pin de control con el número correspondiente al servo utilizado. Por defecto, Marlin tiene configurado el servo 3 (pin 4).

Ya sólo quedaría colocar el adaptador en el filamento, justo antes de entrar este en el impulsor.
  Responder
#2
Que bueno!

muchas gracias por el tutorial.

Yo estoy a la espera de que me llegue el final de carrera también. Lo conectaré en una MKS Gen L v1.0

De momento tengo puesta ya la pieza

[Imagen: 45549837432_37995dce1b_b.jpg]

  Responder
#3
¿Alguien le ha puesto el sensor de filamento a una GT2560 Rev A+? Encuentro información núla al respecto :/
  Responder
#4
Hola, en esa placa es bastante sencillo de implementar, pues tienes varios conectores de final de carrera que seguramente tendrás libres.
Solo tienes que conectar el interruptor del sensor de filamento en uno de ellos y colocar junto a las otras líneas de configuración, la línea:

#define FIL_RUNOUT_PIN  <valor>

siendo <valor> el número de pin del conector usado.
En esa placa, X_MIN=22, X_MAX=24, Y_MIN=26, Y_MAX=28, Z_MIN=30, Z_MAX=32 (si no se tiene BL-Touch activado).
  Responder
#5
No acabo de ver donde hay que poner por ejemplo #define FIL_RUNOUT_PIN 24 en el caso de que lo conecte a X_MAX. No tengo ninguna pestaña Pins.h en Marlin.
¿Tengo que abrir el archivo de la imagen con el bloc de notas y cambiarlo?
[Imagen: pins.jpg]
  Responder
#6
No es necesario que edites el archivo de pins de la placa, pues en ese modelo no está definido ese pin.
Como te indicaba, solo tienes que poner esa línea junto a las demás que configuran esa utilidad, por ejemplo así:

...

#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define FIL_RUNOUT_PIN    24    // Pin de X_MAX
  #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    LOW        // 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.

...
  Responder
#7
(16-02-2021, 06:13 PM)Simemart escribió: No es necesario que edites el archivo de pins de la placa, pues en ese modelo no está definido ese pin.
Como te indicaba, solo tienes que poner esa línea junto a las demás que configuran esa utilidad, por ejemplo así:

...

#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define FIL_RUNOUT_PIN    24    // Pin de X_MAX
  #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    LOW        // 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.

...
Eres un dios @Simemart, no lo entendí o no lo leí bien disculpa. He puesto la línia tal y como dices sin ningun problema al compilar ni nada  Shy
Enviaré el Marlin a la placa y lo probaré estos dias haber que tal.

P.D. Muchas gracias por contestar tan ràpido siempre y resolver tantas dudas. Clap
  Responder
#8
No hay porqué disculparse, el tema de la programación suele ser bastante complicado para la mayoría de usuarios.
Aunque el código de Marlin esté repartido por varios ficheros, solo es por cuestiones puramente prácticas: así es más fácil depurar los errores y hacer correcciones o actualizaciones, pero al compilador le da exactamente igual donde se definan los parámetros, siempre que lo estén en el lugar donde se vayan a utilizar.
Espero que te funcione todo bien.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Reparar sensor de temperatura Insonorizate 8 4,081 16-09-2020, 04:25 PM
Último mensaje: joselrs42
  DUDA ¿Alguien tiene experiencia con este sensor? Edgard 0 453 05-07-2020, 01:42 PM
Último mensaje: Edgard
  CONSULTA sensor temperatura javi2 0 460 10-05-2020, 07:25 AM
Último mensaje: javi2
  CONSULTA sensor filamento javi2 1 607 23-04-2020, 03:48 PM
Último mensaje: Simemart
  DUDA Ruido final de carrera en Y dmarin 11 1,684 25-01-2020, 07:50 PM
Último mensaje: Peter13