FYSETC S6
FYSETC S6

FYSETC S6: Guía completa de esta excelente electrónica para nuestras impresoras 3D

Hace poco más de una semana estuvimos analizando una potente electrónica del conocido fabricante FYSTEC, en concreto la FYSETC Spider. No dudes en visitarlo en el siguiente enlace: Guía completa Fysetc Spider: Una auténtica «bestia» para nuestras impresoras 3D

Hoy os traemos otro detallado análisis sobre una versión más reducida de la electrónica FYSETC Spider, denominada FYSETC S6. Especialmente pensada para impresoras de pequeño y mediano formato, pero con toda la potencia de su predecesora.

Y todo esto en un formato de placa contenido que podremos instalar en prácticamente cualquier máquina, ofreciéndonos unas opciones de ampliación y funcionalidad increíbles.

Antes de continuar me gustaría recordarte que disponemos de una gran comunidad en Telegram. Así que si deseas apoyar el proyecto únete a nosotros o síguenos en nuestras redes sociales, te estaremos eternamente agradecidos.

Breve introducción

Nuevamente el fabricante de componentes FYSETC nos sorprende con otra más que interesante electrónica e irrumpe en el mercado para elevar el listón del desarrollo de controladores para impresión 3D.

Entre otras características, nuestra electrónica FYSETC S6 cuenta con una de las MCUs más potentes del mercado. En concreto un controlador STM32F446 de 32 bits. De esta forma no te quedarás atrás en potencia o en opciones de uso de cualquier firmware actual.

De antemano te adelanto que soporta 6 zócalos para drivers en un formato extremadamente compacto, máxima compatibilidad con los más importantes firmwares de impresión 3D y muchas otras mejoras que revisaremos a continuación.

Y, además de en este artículo, puedes encontrar siempre información de mucho valor en el grupo de Telegram de FYSETC en castellano. ‌

¿Donde puedo adquirir la electrónica FYSETC S6?

Como siempre suelo hacer, dejo por aquí dos enlaces a los marketplace de Amazon y Aliexpress para cualquier interesado en adquirir esta electrónica, o cualquier otro de los componentes que referenciamos en este artículo.

Si los utilizas, el precio del producto será el mismo que si accedes de manera habitual, pero a 3DWork le quedará una pequeña comisión. Algo que nos ayudará a soportar el proyecto y poder ofreceros todo este tipo de artículos.

Electrónica FYSETC S6
Electrónica FYSETC Spider
Display FYSETC MINI 12864 V2.1

Y como alternativa, tambien puedes utilizar nuestro buscador de productos para impresión 3D, donde con una sola búsqueda se te mostrará precios de diferentes marketplaces (Amazon, Aliexpress, Banggood, etc.)

Diagramas y esquemas de la FYSETC S6

Para hacernos una mejor idea de esta placa a continuación os dejamos unos diagramas y esquemas donde poder ver de una forma rápida las inmensas posibilidades y potencial de esta electrónica:

En la parte trasera de la placa podemos encontrar serigrafiado la definición de pines algo que es muy útil para identificarlos.

Características técnicas

En esta breve lista podéis encontrar todas las especificaciones técnicas de la electrónica FYSETC S6:

  • Tamaño de placa compacto 117x87mm
  • Procesador STM32F446 a 180Mhz
  • 6 drivers con soporte UART y SPI (pines específicos para TMC)
  • Alimentación 24V con conversores a 12V/5A, 5V/8A (Raspberry, tiras led, etc.)
  • Protección con fusibles de fácil sustitución (protección de la entrada de corriente principal y cama caliente)
  • Conector especial para sensor de nivelación adaptable a diferentes voltajes (24V/5V/3.3V)
  • 10 salidas PWM controladas por MOSFET (1 cama caliente, 3 Hotend, 3 fans, 3 tiras RGB)
  • 3 conectores para sensores de temperatura pudiendo usar termistores o termoacopladores (AD597 necesario)
  • Hasta 8 ventiladores controlables (usando solamente un extrusor y sin leds RGB), 2 tiras RGB (12V o 24V) y 1 tira NeoPixel 5V
  • Conectores UART para conexión y alimentación de una Raspberry Pi (sin cables externos)
  • 2 conectores para módulos SD
  • Conector SD en la placa y conector USB
  • Conectores EXP para pantallas LCD/TFT o UART, I2C, CAN
  • Bootloader para actualizar firmware por SD o por USB

Conexiones principales de la FYSETC S6

Selector de fuente de alimentación (Jumper)

La electrónica FYSETC S6 dispone de un jumper para seleccionar la alimentación a usar entre USB o adaptador interno de 5V, el cual requiere de una fuente de alimentación externa. Este jumper nos ayuda a evitar desagradables problemas al mezclar alimentaciones diferentes.

Conectores de alimentación

Esta placa dispone de un completo arsenal de conexiones y opciones, así que la parte de alimentación no podría ser menos.

Tenemos 3 salidas exclusivas para extrusores, 1 para la cama caliente y con 2 entradas de corriente una general y otra igualmente para la cama, como puedes ver en la imagen superior.

También contamos con otras salidas de alimentación de 24v para la alimentación de periféricos u otros componentes, ciertamente una placa muy completa.

Endstops (finales de carrera)

En esta ocasión contamos con los típicos conectores para finales de carrera en los 3 ejes. Como viene a ser ya habitual en estas electrónicas, FYSETC ha implementado mejoras en los mismos para soportar diferentes voltajes.

FYSETC S6
Finales de carrera FYSETC S6

Se han incluido unos jumpers (mediante puente de soldadura), para que podamos determinar inicialmente el voltaje requerido y entregarlo a cada conector independientemente (ver imagen inferior).

Así que tenemos dos bloques de conectores que pueden usar dos tipos diferentes de voltajes:

  • Conectores X+/Y+/Z+, donde podremos escoger entre 5V o 3.3V (por defecto). Indicado por ejemplo para Sensores BLTouch / 3DTouch de 5V
  • Conectores X-/Y-/Z-, donde podremos escoger 24V o 3.3V (por defecto). Estos conectores están especialmente indicados para conectar sensores de nivelación inductivos o capacitivos.

Otro aspecto importante sobre los este tipo de conectores para finales de carrera es que disponemos de varios con funciones ADC (punto morado) y PWM (punto rojo). Muy útiles para el uso de servos, leds o similares. En el siguiente esquema podremos ver el tipo de cada uno:

Sensores BLTouch / 3DTouch

La instalación de un sensor de nivelación del tipo BLTouch / 3DTouch es muy sencilla y la podemos realizar usando el siguiente esquema (ver la imagen superior).

Como siempre, os aconsejamos revisar nuestra guía para más información sobre su instalación y configuración. La puedes visitar en el siguiente enlace: Instalar y configurar BLTouch / 3DTouch en Marlin 2.0.x

Ventiladores (fans)

Las electrónicas FYSETC S6 cuentan con conexiones para 3 ventiladores gestionables, ciertamente una gran mejora, tal y como comentábamos en las características de esta placa.

Así que podemos, sin necesidad de ningún convertidor de corriente, configurar las salidas del ventilador para que estas nos ofrezca alimentación de 24V o de 12V, muy práctico si precisamos ventiladores silenciosos para nuestra electrónica o Hotend.

Para ello deberemos poner el jumper correspondiente entre FAN0/1/2 Voltage y obviamente, el voltaje que queramos usar en ese momento.

En el siguiente diagrama podemos verlo más fácilmente. Y en caso que precisemos de más ventiladores controlables, o para sustituir los actuales, siempre podemos usar los siguientes pines en el caso de no usar leds RGB (clic en imágenes para ampliar)

Recuerda siempre que el pin PWM de señal es el que se conecta a GND en los ventiladores.

Drivers de motor

Como no podía ser de otra manera, todas las electrónicas FYSETC S6 disponen de una extensa configuración de jumpers/Pins (JP1 y JP6 en concreto) para poder soportar una gran variedad de drivers.

Para el uso de drivers TMC2208/2225 o TMC2209/2226 en modo UART (inteligente), necesitaremos colocar un jumper en JP1. El resto de configuración se realizará directamente en nuestro firmware (microsteps, vref, modo, etc.)

Para drivers TMC2130/5160/5161 en modo SPI necesitamos colocar 4 jumpers en el conector JP6 (ver imagen inferior).

Para la configuración de drivers en modo STANDALONE (simple) necesitamos usar los pines del conector JP6 (1234-5678), además de los microsteps y alguna funcionalidad en drivers TMC, según se muestra en el siguiente esquema.

Sensorless / StallGuard

Una funcionalidad muy interesante para drivers UART/SPI que lo soporten, es SensorLess. Como ya es probable que sepas, sensorless permite usar el propio motor como final de carrera.

FYSETC S6

Esto te permite ahorrar componentes a la hora de ensamblar tu impresora, reduce los posibles fallos mecánicos de la misma y nos evita utilizar tediosos cableados para los finales de carrera.

En el caso de la Fysetc S6 disponemos de unos pines que colocando el correspondiente jumper nos permiten enviar la señal DIAG del driver al endstop. Recordar que al activar este jumper deberemos tener correctamente configurado nuestro firmware.

El uso de Sensorless es aconsejable únicamente para los ejes X e Y

Conectores para LCD / Display

Como era de esperar, contamos con dos conectores EXP compatibles con la inmensa totalidad de pantallas de este tipo. En el siguiente esquema podremos ver el esquema de pines disponibles y algunos ejemplos disponibles:

Pequeña pero funcional pantalla para el modo emulación Marlin, que con sus leds da mucho juego para personalizar tu impresora. En este caso su conexión no podría ser más simple.

Unas de las pantallas más populares por su estupendo modo dual donde podemos disfrutar de emulación Marlin y de su modo avanzado táctil son las pantallas BTT TFT V3.0

En este caso la conexión si bien es entre EXP1 y EXP2 al correspondiente de la placa, debe girarse en uno de los extremos 180º para ambos cables.

Algunas pantallas BTT añaden un condensador y una resistencia pull-down en el pin RESET que puede hacer que nuestra placa no inicie.

Estamos en contacto con el fabricante para una posible solución que pasaría por eliminar estos componentes o cortar el cable reset de los EXP para evitar este problema.

Las pantallas CR10 Display son utilizadas por muchas impresoras de Creality y derivadas. Normalmente cuentan con 3 conectores EXP (EXP1/2/3) donde uno de ellos (EXP3) es un tipo de conexión simplificado de los otros dos, y normalmente solo se encuentra en placas Creality o similares.

En el caso de nuestra FYSETC deberemos usar los conectores EXP1 y EXP2 conectados directamente a los mismos de la placa, sin ninguna complicación.

Conectores USART / Serial

En todas las electrónicas FYSETC S6 contamos con hasta 6 puertos UART/Serial para la conexión de dispositivos serial como pantallas TFT, módulos WiFi, adaptadores USB para actualización de firmware o similares.

  • USART1 -RX1 y TX1- (PA10 y PA9 en UART)
  • USART2 -RX2 y TX2- (PA3 y PA2 en Z-MAX y Y-MAX)
  • USART3 -RX3 y TX3- (PC11 y PC10 en EXP1 y conector FPC)
  • USART4 -RX4 y TX4- (PA1 y PA0 en X-MAX y Z-MIN)
  • USART5 -RX5 y TX5- (PD2 y SDA2 en EXP1)
  • USART6 -RX6 y TX6- (PC7 y PC6 en EXP2)

Para definir estos USART/Serial en Marlin, recordar que a partir de Marlin 2.0.8 podemos usar hasta 3 puertos USART/Serial:

#define SERIAL_PORT -1  // 3DWORK USART USB
#define SERIAL_PORT_2 1 // 3DWORK USART1
#define SERIAL_PORT_3 3 // 3DWORK USART3 Example

Puedes tener más detalle en la siguiente tabla:

Ejemplo de conexión de un módulo USB para la actualización de firmware.

Configurando Marlin

FYSETC S6 es compatible con los firmwares más importantes que existen actualmente para impresión 3D. Os dejamos por aquí la configuración básica para firmwares Marlin.

Archivo “Platformio.ini”

En este fichero tienes que indicar el Chipset de tu electrónica actual, por lo que deberás buscar en el inicio del fichero el valor “env_default” y cambiarlo por el siguiente:

default_envs = FYSETC_S6

Tanto la Fysetc S6 como la Spider han cambiado desde el 23/06/2021 su Bootloader de 0x10000 a 0x8000.
Este cambio impacta en default_envs de la siguiente forma:
* default_envs = FYSETC_S6, para placas con el antiguo bootloader en 0x10000
* default_envs = FYSETC_S6_8000, para placas con nuevo bootloader en 0x8000

Una de las grandes opciones que tiene esta electrónica es que su bootloader permite actualizarla usando diferentes métodos. Bien mediante SD en la pantalla LCD o externa, ya que la placa no cuenta con SD o mediante USB poniendo la placa en modo BOOT0.

Por defecto la configuración de esta placa viene preparada para esta segunda opción usando DFU, lo que no siempre es cómodo teniendo que acceder a la placa, cambiar el pin y conectar el cable USB.

Para que el proceso no de un fallo si no lo hacemos de esa forma y nos deje el binario para su copia en la SD, procederemos a comentar las siguientes líneas en el fichero indicado:

.../ini/stm32f4.ini

#
# FYSETC S6 (STM32F446RET6 ARM Cortex-M4)
#
[env:FYSETC_S6]
platform          = ${common_stm32.platform}
extends           = common_stm32
platform_packages = tool-stm32duino
board             = marlin_fysetc_s6
build_flags       = ${common_stm32.build_flags}
  -DVECT_TAB_OFFSET=0x10000
  -DHAL_PCD_MODULE_ENABLED
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
debug_tool        = stlink
# U1JO upload_protocol   = dfu
# U1JO upload_command    = dfu-util -a 0 -s 0x08010000:leave -D "$SOURCE"

Archivo “Configuration.h”

Como siempre, aconsejamos añadir un comentario a cualquier linea que modifiquemos. De esta manera será mucho más sencillo encontrar nuestras modificaciones posteriormente.

Comenzaremos por configurar correctamente los puertos SERIAL para esta máquina. Algo imprescindible para el correcto funcionamiento de nuestra conexión TFT, USB o WIFI.

#define SERIAL_PORT_2 -1 // 3DWORK FYSETC

BAUDRATE nos ayuda a definir la velocidad de comunicación por el puerto SERIAL. Lo más habitual es utilizar 115200 o 250000bds.

#define BAUDRATE 115200

Ahora definiremos nuestro MOTHERBOARD de igual modo que hicimos en el archivo “platformio.ini”, así le indicaremos el tipo de chipset que tiene nuestra electrónica. De esta forma Marlin sabrá qué configuración de pines deberá utilizar en todo momento.

#define MOTHERBOARD BOARD_FYSETC_S6_V2_0 // 3DWORK FYSETC

Definiremos en este apartado el número de extrusores y diámetro del filamento que usa nuestra impresora. Normalmente nuestras impresoras utilizan filamento de diámetro 1.75mm.

// This defines the number of extruders
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 1

// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Termistores, en estas constantes indicaremos que termistores monta nuestra máquina. Como siempre, es aconsejable identificarlos previamente, aunque lo más normal es seleccionar el valor “1”.

Es importantísimo indicar el tipo de termistor adecuado, de lo contrario las temperaturas que Marlin recibirá no serán correctas.

Para activar o desactivar la cama caliente deberás comentar (o no) el thermistor de la misma. Así Marlin determina si dispone de cama caliente.

En nuestro ejemplo y para esta placa en concreto, utilizamos hotend y cama caliente con un sensor de temperatura estándar.

#define TEMP_SENSOR_0 1 // TE0
#define TEMP_SENSOR_1 0 // TE1
#define TEMP_SENSOR_2 0 // TE2
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 1 // TB
#define TEMP_SENSOR_PROBE 0 
#define TEMP_SENSOR_CHAMBER 0
#define TEMP_SENSOR_COOLER 0

PID, otra parte importante en la gestión de temperatura es el PID. Básicamente el PID es un algoritmo que ayuda a Marlin en su tarea de controlar de forma adecuada la temperatura sin tener grandes fluctuaciones.

#define PIDTEMP // 3DWORK PID
#define PIDTEMPBED // 3DWORK PID

ENDSTOPS o finales de carrera, es vital verificar cuando realizamos un cambio de electrónica y encendemos por primera vez que la lógica de los finales de carrera es la correcta. Para ello puedes utilizar el comando M119 desde un terminal como Pronterface.

OPEN indicaría que el final de carrera se encuentra en estado normal (sin pulsar), y TRIGGERED cuando están pulsados. Podremos invertir esta lógica cambiando estas líneas:

#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.

Lo normal es que las máquinas realicen el home en MIN (esquina inferior izquierda) en lugar de MAX (esquina superior derecha). Si desearas invertir la configuración deberías modificar lo siguiente:

#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

Si dispones de drivers TMC en modo UART puedes utilizar, si el driver lo soporta, el uso de la tecnología SensorLess. Esta te permitirá prescindir de finales de carrera físicos, liberando tu impresora de componentes extra y cableados.

Drivers, como ya hemos comentado esta placa cuenta con 6 zócalos para drivers soportando diferente tipos de drivers y sus configuraciones

En nuestro ejemplo usamos Drivers TMC2209 en modo UART (inteligente), con doble eje Z independiente y un solo extrusor:

#define X_DRIVER_TYPE  TMC2209 // 3DWORK DRIVERS
#define Y_DRIVER_TYPE  TMC2209 // 3DWORK DRIVERS
#define Z_DRIVER_TYPE  TMC2209 // 3DWORK DRIVERS
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
#define Z2_DRIVER_TYPE TMC2209 // 3DWORK DRIVERS
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC2209 // 3DWORK DRIVERS

STEPS o pasos de motor, en este apartado le indicamos a nuestro firmware Marlin los pasos de motor necesarios para realizar movimientos.

#define DEFAULT_AXIS_STEPS_PER_UNIT { 80.00, 80.00, 400.00, 93 } // 3DWORK Ender3 X, Y, Z, Extrusor

S_CURVE_ACCELERATION, esta funcionalidad ofrece una importante mejora en la calidad de impresión, ya que suavizará la aceleración o deceleración de nuestra impresora cuando el cabezal esté en movimiento.

#define S_CURVE_ACCELERATION // 3DWORK 

Nota importarte! Dependiendo de nuestra versión de Marlin Linear Advance puede no ser compatible. Puedes encontrar más información al respecto en nuestra guía de calibración o en la sección /Calibración/Calibración Inicial de nuestro bot de ayuda en Telegram @ThreeDWorkHelpBot.

PROBE o sensor de nivelación, como siempre os recomiendo la lectura de la guía Configurar BLTouch para asegurarte que las impresiones siempre tienen una primera capa lo más perfecta posible.

Comenzaremos por indicar donde está conectado nuestro sensor de nivelación, en este caso lo conectaremos en el conector final de carrera de Z-

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN // 3DWORK PROBE en Z-MIN

Tipo de sensor BLTouch o Inductivo, existen diferentes tipos de sensores. Dependiendo del usado deberemos descomentar uno u otro.

En el caso de un sensor Inductivo:
#define FIX_MOUNTED_PROBE // 3DWORK PROBE
En el caso de un sensor tipo BLTouch:
#define BLTOUCH // 3DWORK PROBE

Offsets del sensor, es extremadamente importante indicar a Marlin donde se encuentra instalado nuestro sensor de nivelación. Para ello definiremos los PROBE OFFSET.

El Offset es la distancia entre la punta del nozzle y la punta del sensor de nivelación, que dependiendo de su ubicación serán valores positivos o negativos (coordenadas X, Y y Z).

En nuestro caso nuestro sensor está desplazado hacia la izquierda del nozzle en X 30mm y 10mm en Y hacia el fondo de la impresora.

#define NOZZLE_TO_PROBE_OFFSET { -30, 10, 0 } // 3DWORK PROBE

PROBING_MARGIN (en versiones anteriores MIN_PROBE_EDGE), es muy normal que tengamos en nuestras impresoras un cristal como base de impresión, aunque personalmente nos gustan más las láminas PEI magnéticas.

Son algo más susceptibles a marcarse con golpes, pero tienen una excelente adherencia, no te limitan el tamaño de la cama y retirar las piezas es extremadamente sencillo y rápido.

En cualquier caso ya tengamos cristal u otra superficie es aconsejable que el sensor se encuentre alejado de cualquier objeto que pueda molestarle durante el proceso de nivelación, como pueden ser grapas para fijar el cristal o el propio desajuste del inicio y final de cama que haga que el sensor no pueda medir.

Para esto usaremos PROBING_MARGIN, y le indicaremos cuantos milímetros se tiene que alejar de los bordes de la cama. En nuestro caso usando un sensor de nivelación BLTouch y una plataforma PEI lo dejamos por defecto.

#define PROBING_MARGIN 10 // 3DWORK PROBE

Dirección de motores, otro problema común a la hora de poner en marcha una impresora es que el cableado de las bobinas de nuestros motores sea incorrecto. Debido a ello pueden suceder dos cosas:

  1. Que los conectores de las bobinas estén mezclados. Es fácil de identificar ya que el motor no girará correctamente e irá a trompicones. Para solucionarlo debes revisar el pinout de la antigua placa y/o del motor, compararlo con el de nuestra nueva placa y adaptarlo.
  2. Que nuestro motor gire en la dirección incorrecta. En este caso de nuevo tenemos dos opciones. La primera y aconsejable es la de modificar en Marlin el giro del motor y la segunda es la de invertir el cableado de una de las bobinas del motor

En nuestro caso optamos por la primera modificando las siguientes líneas en Marlin cambiando el valor actual por el contrario. En este caso invertimos el eje Z.

#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false // 3DWORK Invertimos el giro del eje Z

Tamaño de impresión, si hemos usado un Marlin genérico es importante verificar que las dimensiones de impresión son las correctas para nuestra máquina, ya que tendremos configurado las dimensiones por defecto.

En este ejemplo usamos una Ender 3 a su máximo tamaño. Como siempre, es aconsejable verificar que puedes llegar físicamente a estas medidas y ajustarlo en caso de ser necesario:

#define X_BED_SIZE 235 // 3DWORK BED
#define Y_BED_SIZE 235 // 3DWORK BED

Y también definiremos el tamaño de nuestro eje Z (máxima altura de desplazamiento):

#define Z_MAX_POS 250 // 3DWORK BED

Sensor de filamentos, te aconsejamos revisar en la sección /Mejoras/Sensor de filamentos de nuestro bot de ayuda en Telegram @ThreeDWorkHelpBot o directamente en nuestra guía de instalación y configuración de un sensor de filamentos.

#define FILAMENT_RUNOUT_SENSOR // 3DWORK SENSOR FILAMENTOS

Al igual que con los finales de carrera es aconsejable revisar con un M119 el estado del sensor de filamentos el cual parecerá como TRIGGERED (si tiene filamento) y OPEN (sin él). En el caso que parezca invertido deberemos de jugar con el valor de (LOW/HIGH) en nuestro Marlin modificando las siguientes líneas:

#define FIL_RUNOUT_STATE     LOW   // 3DWORK SENSOR FILAMENTOS

En el caso que nuestro sensor de filamento funcione por detección de flujo de filamento (como el sensor de BigTreeTech Smart Filament Sensor) deberemos habilitar lo siguiente:

#define FILAMENT_MOTION_SENSOR // 3DWORK SENSOR FILAMENTOS

Autonivelación, en la sección /Nivelacion de nuestro bot @ThreeDWorkHelpBot tenéis más información detallada de como activar autonivelación UBL (la más avanzada y aconsejable para camas de cierto tamaño o con problemas) y MESH que permite tener una malla sin sensor haciendo el proceso manualmente.

En todo caso para este ejemplo habilitaremos la opción de auto leveling BILINEAR:

#define AUTO_BED_LEVELING_BILINEAR // 3DWORK PROBE 

Es importante decirle a Marlin que habilite también la autonivelación (G29) después de un homing (G28), aunque en versiones actuales ya no es necesario (aunque aconsejamos habilitarlo).

#define RESTORE_LEVELING_AFTER_G28 // 3DWORK PROBE

En el caso de BILINEAR especificaremos el número de puntos a realizar por malla en la siguiente parte de Marlin. Por defecto Marlin efectua 9 sondeos (3 x 3 = 9 sondeos).

if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3 // 3DWORK PROBE

Otra función que por seguridad debemos habilitar es la de Homing en el centro de la cama. Esta función nos permite asegurar que el sensor tiene una superficie donde detectar el final de carrera y verificar visualmente que nuestros Offsets están de forma correcta.

#define Z_SAFE_HOMING // 3DWORK PROBE

EEPROM, en la EEPROM Marlin almacena valores de configuración de diferentes funciones para que estas puedan usarse por el sistema y ser modificadas por el usuario sin necesidad de tener que editar continuamente los ficheros fuentes de Marlin, compilar y subir en cada cambio el firmware.

Muy aconsejable activarla, y con nuestra Fysetc S6 no tendremos problema alguno de memoria, como en electrónicas muy antiguas u obsoletas:

#define EEPROM_SETTINGS // 3DWORK EEPROM
#define EEPROM_CHITCHAT // 3DWORK EEPROM

Nozzle Park, en el ejemplo que estamos explicando hemos añadido un sensor de filamentos. Para que este funcione activaremos NOZZLE_PARK_FEATURE, que básicamente nos permite “aparcar” el cabezal de impresión en una zona segura para realizar los cambio de filamentos.

No obstante, aunque no tengamos sensor de filamentos es muy aconsejable tenerlo activo, ya que nos permite mejorar las funciones de pausado.

#define NOZZLE_PARK_FEATURE // 3DWORK SENSOR FILAMENTOS

SD, si queremos que nuestro Marlin pueda leer de nuestra SD, ya sea el de la placa o en una pantalla que sea compatible (ojo que las Touch no lo son), deberás activar el soporte de SD en nuestro firmware Marlin:

#define SDSUPPORT // 3DWORK SD

Menu Homing Avanzado, no es necesario pero si muy aconsejable en el caso de realizar tests habilitar esta función que nos permite poder realizar un homing por separado de cada eje.

#define INDIVIDUAL_AXIS_HOMING_MENU // 3DWORK MEJORAS

Archivo “Configuration_adv.h”

Ahora procederemos a modificar el siguiente archivo, el “Configuration_adv.h“, el cual suele disponer de las configuraciones y opciones más avanzadas de nuestro Marlin. Así que vamos a ello:

Scroll y nombres ficheros largos, interesante activar esta función para poder mostrar el nombre completo de los ficheros a imprimir. Al igual que el anterior y para que funcione correctamente tenemos que activar la siguiente opción:

#define LONG_FILENAME_HOST_SUPPORT // 3DWORK MEJORAS
#define SCROLL_LONG_FILENAMES // 3DWORK MEJORAS

Conexión SD, previamente en el archivo “Configuration.h” habilitamos el soporte para SD y en este “Configuration_adv.h” definiremos de donde Marlin intentará usar esa SD.

Disponemos de tres opciones básicamente. LCD donde usaremos la de la pantalla Marlin. ONBOARD donde usaremos la de la placa. Y CUSTOM_CABLE donde le indicaremos que usamos un lector externo conectado a la placa.

Tal como comentamos previamente no todas las pantallas que dispongan de SD van a funcionar correctamente. En nuestro caso usaremos la de la pantalla dado que la Fysetc S6 no cuenta con conector SD integrado en la placa.

#define SDCARD_CONNECTION LCD // 3DWORK SD

Ventiladores, un gran acierto por parte de Fysetc la inclusión de 3 ventiladores gestionables. Además, tenemos la posibilidad de alimentarlos con diferentes voltajes desde la propia placa sin necesidad de convertidores. Y en particular, en nuestra electrónica FYSETC S6 contamos con 24V y 12V disponibles.

La definición del pin de cada FAN la podemos encontrar en “…/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h“, que es usado por Marlin como fichero pins común para la S6 y la Spider.

FAN0, en este caso no vamos a realizar ningún cambio en su rol ya que es el ventilador de capa y este lo gestiona el propio fileteador (Slicer) para enfriar el filamento.

FAN1, en nuestro ejemplo lo vamos a asignar al Hotend para que de forma dinámica se active cuando esté en funcionamiento, evitando posibles desgastes de nuestro ventilador y ruido innecesario:

#define E0_AUTO_FAN_PIN FAN1_PIN // 3DWORK FAN1 asignado hotend
...
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 // 3DWORK FAN1 activacion a temperatura
#define EXTRUDER_AUTO_FAN_SPEED 255   // 255 == full speed

FAN2, y si lo deseas, podemos activar FAN2 como ventilador de la electrónica dinámico para que este se active cuando los drivers estén en uso, minimizando de nuevo desgaste y ruido por parte del ventilador:

#define USE_CONTROLLER_FAN // 3DWORK FAN2 habilitada ventilacion gestionada de electronica
...
#define CONTROLLER_FAN_PIN FAN2_PIN // 3DWORK FAN2 asignado a electronica
...
#define CONTROLLER_FAN_EDITABLE // 3DWORK FAN2 gestionable gcode M710
...
#define CONTROLLER_FAN_MENU  // 3DWORK FAN2 habilitar menu gestion pantalla

Babystepping, función casi imprescindible. Babystepping nos permite modificar la altura de Z en tiempo real durante una impresión. Esto nos permite ajustar de forma manual esta altura a nuestro gusto.

En nuestro ejemplo habilitaremos que se pueda activar con un doble click en el botón/encoder, que siempre este disponible, y nos muestre mejoras gráficas en el ajuste para entender la dirección del ajuste desde la pantalla.

#define BABYSTEPPING // 3DWORK MEJORAS
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // 3DWORK MEJORAS
#define BABYSTEP_ALWAYS_AVAILABLE // 3DWORK MEJORAS
#define BABYSTEP_ZPROBE_GFX_OVERLAY // 3DWORK MEJORAS

Reintentos en caso de fallo en la nivelación, otra función muy útil es la de poder reintentar el proceso de homing en caso de fallo. En ocasiones nuestro sensor de nivelación puede tener un fallo puntual y mediante esta función nos permitirá volver a intentarlo un número finito de veces.

#define G29_RETRY_AND_RECOVER // 3DWORK MEJORAS
#define G29_MAX_RETRIES 4 // 3DWORK MEJORAS

En caso de usar nivelación UBL esta opción no es compatible.

Soporte ARC, nos ofrece una mejora sustancial en la calidad de nuestras impresiones. Y también cuando imprimimos a través de dispositivos serial como TFT, Octoprint, etc.

Permite simplificar los comandos GCodes minimizando el número de movimientos y haciéndolos más fluidos, evitando un gran número de retracciones.

Para usarlo debemos de configurar nuestro fileteador (Slicer) para que aplique estos cambios o en el caso de Octoprint podemos usar un Plugin. En cuanto a los cambios en Marlin:

#define ARC_SUPPORT // 3DWORK MEJORAS

Es importante recalcar que en el caso de habilitar ARC para su uso es aconsejable, en el caso que también lo tengamos habilitado, la compatibilidad con S_CURVE. Tenéis más información en esta guía de calibración.

Pausado avanzado, tal como comentamos anteriormente en este ejemplo usamos un sensor de filamentos. Para que funcione correctamente tenemos que habilitar ADVANCED_PAUSE_FEATURE, que habilita el comando GCode M600 para el cambio de filamentos.

Esto puedes hacerlo con o sin sensor de nivelación y requiere NOZZLE PARK para su correcto funcionamiento.

#define ADVANCED_PAUSE_FEATURE // 3DWORK SENSOR FILAMENTOS

Configuración drivers UART/SPI, con nuestros drivers en UART/SPI tenemos que configurar correctamente los parámetros avanzados que encontraremos en la sección HAS_TRINAMIC_CONFIG.

Micropasos, aunque podemos configurar desde 16 a 256 micropasos, no os aconsejamos para nada usar otro valor diferente al de 16. Con esos micropasos la definición que podríamos alcanzar mecánicamente es prácticamente imposible de alcanzar con impresoras normales, además de que los drivers TMC ya realizan ellos mismo la interpolación de estos para ofrecer la máxima fiabilidad y precisión.

La fiabilidad es otro aspecto importante a la hora de hablar de micropasos. Los motores de pasos que usamos en nuestras impresoras pierden torque (y pasos) a altas revoluciones. Así que aumentar esta definición de pasos aumentará exponencialmente el porcentaje de fiabilidad, y por lo tanto que nuestras piezas no salgan correctamente.

En el ejemplo siguiente podremos ver cómo tenemos 16 micropasos para nuestro eje X.

#if AXIS_IS_TMC(X)
#define X_CURRENT 650 // (mA) RMS current
#define X_CURRENT_HOME X_CURRENT
#define X_MICROSTEPS 16 // 0..256
#define X_RSENSE 0.11
#define X_CHAIN_POS -1
#endif

Otro valor importante de los valores anteriores es el de CURRENT, donde ajustaremos la corriente de nuestros motores. También puedes ajustarlos desde el LCD desde Configuración/Avanzado/TMC junto con otras opciones que explicaremos a continuación.

STEALTHCHOP, es importante habilitarlo si queremos que nuestros motores sean “silenciosos” ya que si no estará funcionando en modo SpreadCycle, que es el modo potencia.

#define STEALTHCHOP_XY // 3DWORK DRIVERS
#define STEALTHCHOP_Z // 3DWORK DRIVERS
#define STEALTHCHOP_E // 3DWORK DRIVERS

Aunque es raro, algunos extrusores pueden trabajar mejor con el modo StealthChop deshabilitado. Si es nuestro caso comentaremos la siguiente línea.

//#define STEALTHCHOP_E // 3DWORK DRIVERS

CHOPPER TIMMING, es usado por StealthChop para la sincronización de señales a los motores. Este tiene que coincidir con el voltaje usado en nuestra impresora, en el caso de Ender 3 y normalmente en todas las impresoras a 24V.

#define CHOPPER_TIMING CHOPPER_DEFAULT_24V // 3DWORK DRIVERS

Monitor Status, esta función nos permite que Marlin pueda controlar en detalle todos los parámetros de los drivers para poder ajustar, por ejemplo, la temperatura de los mismos. Esto nos ayudará a evitar problemas más graves.

#define MONITOR_DRIVER_STATUS // 3DWORK DRIVERS

Hybrid Threshold, otra interesante función es Hybrid Threshold que nos permite que Marlin cambie entre StealthChop (silencio) o SpreadCycle (potencia) dinámicamente en base a la velocidad de nuestros movimientos.

#define HYBRID_THRESHOLD // 3DWORK DRIVERS
#define X_HYBRID_THRESHOLD 100 // [mm/s]
#define Y_HYBRID_THRESHOLD 100
#define Z_HYBRID_THRESHOLD 15

En nuestro caso usamos los valores indicados para una Ender, los cuales son 100 mm/s para X Y y de 15 mm/s para Z, aunque siempre lo podemos ajustar a nuestras necesidades.

TMC Debug, en este caso es un requerimiento de MONITOR_DRIVER_STATUS que deberemos de habilitar y nos permitirá tener accesible el comando M122. Muy útil para obtener información avanzada del estado y configuración de nuestros drivers.

#define TMC_DEBUG // 3DWORK DRIVERS

Archivo “pins_FYSETC_S6.h”

Otro de los archivos importantes es el de la configuración de los pines. En nuestra electrónica FYSETC concretamente lo tenemos a nuestra disposición en la siguiente ruta:

  • …/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h

En realidad no debemos efectuar ningún tipo de operación por el momento, pero lo dejamos aquí como referencia por si en un futuro alguien precisa de su modificación (o consulta).

Actualizando nuestro firmware

La FYSETC S6, al igual que su hermana la FYSETC Spider, cuenta con varias opciones para poder actualizar su firmware de forma sencilla. Pasamos a enumerarlas a continuación:

Usando una SD Card (tarjeta de memoria)

La opción más sencilla es la de usar una SD para su actualización, que es el método por defecto que usa el bootloader de la placa.

Es importante recordar que esta placa no cuenta con una ranura de SD integrada, así que necesitaremos una pantalla LCD (use EXP1/2 para su conexión) o un módulo de SD conectado en EXP2.

El proceso es muy sencillo y tan solo tenemos que copiar nuestro “firmware.bin” en la raíz de la SD formateada en FAT32, insertar la SD en la ranura del módulo y esperar unos 30 segundos a que finalice el proceso.

Una vez finalizado el fichero “firmware.bin” debería quedar renombrado a “OLD.BIN”, el cual podemos guardar a modo de copia de seguridad (recordar que un firmware compilado no se puede modificar, ese proceso solamente se puede hacer con los ficheros fuentes de vuestro firmware y vuelto a compilar).

Usando el modo DFU/USB (via cable)

Otra forma de actualizar nuestra placa, sobretodo en el caso de no disponer de un módulo o pantalla LCD con SD, es usando el modo DFU. La forma de hacerlo sería la siguiente:

  • Descargar STM32 Cube Programmer (Windows, Mac y Linux)
  • Abrir la aplicación oficial de flasheo
  • Pondremos nuestra placa Fysetc S6 en modo DFU
    • FYSETC S6 v1.2: Con la placa completamente apagada, dejaremos pulsado el botón BOOT0 y con el botón pulsado conectaremos mediante el cable USB la placa a nuestro ordenador. Esta operación hará que entre en modo DFU. Una vez conectado y en modo DFU, soltaremos el botón.
    • FYSETC S6 v2: Con la placa completamente apagada pondremos el jumper del conector BOOT0 a 3.3v y conectaremos mediante el cable USB la placa a nuestro ordenador. Esto activará el modo DFU en nuestra electrónica. Una vez finalizado el proceso de actualización de firmware no te olvides de quitar el jumper de BOOT0.
  • Una vez en modo DFU volveremos a la aplicación y realizaremos los siguientes pasos:
    • Pulsaremos el botón refrescar para que detecte el puerto DFU
    • Pulsaremos el botón CONNECT
    • Seleccionaremos el firmware.bin creado
    • En START ADDRESS pondremos 0x8010000
  • Pulsaremos START PROGRAMMING

Tanto la Fysetc S6 como la Spider han cambiado desde 23/06/2021 su bootloader de 0x10000 a 0x8000. Este cambio impacta en “default_envs” de la siguiente forma:
* default_envs = FYSETC_S6, para placas con el antiguo bootloader en 0x10000
* default_envs = FYSETC_S6_8000, para placas con nuevo bootloader en 0x8000

Y bueno, si hemos seguido las instrucciones al respecto y todo ha funcionado correctamente ya deberíamos tener nuestro nuevo firmware subido a la electrónica FYSETC S6. No me queda más que felicitarte por haber llegado a este punto.

LCD FYSETC MINI 12864 V2.1 (Neopixel)

Esta pantalla es una excelente opción para utilizar junto a nuestra electrónica FYSETC S6, ya que tiene un formato muy compacto, es fácilmente integrable y dispone de una estética genial. Además de la inclusión de SD (perfecta para la actualización del firmware) y leds controlables desde Marlin que siempre dan mucho juego.

Así que dejaremos por aquí la configuración de la misma, para que no tengáis problema alguno en añadir un display FYSETC MINI 12864 V2.1 (Neopixel) a vuestra impresora 3D si lo deseáis.

Archivo “Configuration.h” (FYSETC MINI 12864)

# Definición de pantalla
#define FYSETC_MINI_12864_2_1 // Type A/B. Neopixel RGB Backlight
...
# Definición Neopixel de pantalla
// Support for Adafruit Neopixel LED driver
#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
#define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
//#define NEOPIXEL_PIN 4 // LED driving pin
//#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip
//#define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
//#define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255)
#define NEOPIXEL_STARTUP_TEST // Cycle through colors at startup
// Use a single Neopixel LED for static (background) lighting
// #define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use - Do not 
...
// Use a single Neopixel LED for static (background) lighting
#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use - Do not change this setting
#define NEOPIXEL_BKGD_COLOR { 0, 255, 0, 0 } // R, G, B, W - We have set green background color as standard
#endif

Archivo “Configuration_adv.h” (FYSETC MINI 12864)

 # Habilitar menus de control LED
 #define LED_CONTROL_MENU

Archivo “Conditionals_post.h” (FYSETC MINI 12864)

Estas modificaciones se deben realizar si tu pantalla no aparecen letras de una forma clara/definida (puedes intuirlas viendo en diagonal)

 #elif ENABLED(FYSETC_MINI_12864)
#define _LCD_CONTRAST_MIN 255
#define _LCD_CONTRAST_INIT 255

.../Marlin/src/inc/Conditionals_post.h

Notas finales

Y bueno, como diría el travieso conejo Bugs Bunny, ¡Eso es todo, amigos! Desde 3DWork deseamos que esta extensa guía pueda ayudar a configurar vuestra sin muchos quebraderos de cabeza.

O al menos serviros de acercamiento a este tipo de electrónicas FYSETC que tanto nos gustan a nosotros. No olvidéis verificar inicialmente la impresora repasando punto por punto:

  • Revisar finales de carrera usando un terminal (Pronterface, comando M119)
  • Revisar individualmente todos los Homings(X Y Z), y en caso necesario invertir giro del motor
  • Revisar que nuestros termistores reporten correctamente la temperatura
  • Revisar que nuestros calentadores de cama y de hotend funcionan correctamente

Como siempre, puedes leer otros artículos interesantes en nuestro blog: