28-10-2018, 04:16 PM
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:
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.
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):
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:
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.
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:
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.
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):
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:
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.