In today’s article we are going to talk about Fysetc Spider electronics, which have been designed for use it with the popular Voron 2.4 3D printers and similar.
In fact, the team that develops the Voron 3D printers cooperated closely during the design and development of the same to adapt them to their machines.
With a relatively compact size for an 8-driver board, the Fysetc Spider electronics have great features that we will explain below.
As examples we could cite the 12V and 5A power adapter, which will allow us to power silent fans without the need for external components, or the 5V 8A adapter for LED strips, direct power from Raspberry Pi, etc.
Brief introduction
Before continuing with the article I would like to remind you as always that we have a large community in our Telegram channel
There we usually share all our doubts and experiences. If you want to be part of it, do not hesitate to join us.
You can also find a lot of help or resources directly in the Telegram group of FYSETC, as well as other help guides in our Telegram Bot @ThreeDWorkHelpBot
Where to buy Fysetc Spider?
I leave you some links to the electronic ones mentioned in today’s article. It is my duty to tell you that they are links to online stores (affiliates).
If you use them, the price of the product will be the same as if you log in regularly, but 3DWork will have a small commission left that will help maintain this website (and I will be eternally grateful).
Fysetc Spider |
If you wish and as an alternative, you can also use our component search engine Markets.sx, where you can compare prices on different sites (Amazon, Aliexpress, Banggood, etc.) with a single search very easily.
Fysetc Spider diagrams
In the following board, wiring and pinout diagrams, you will be able to find the immense possibilities and power of this electronic board.
Main features
Below we proceed to list some of the most important characteristics of this spectacular electronics, which will not leave you indifferent 🙂
- Extremely compact size 155.3×76.5mm
- Processor STM32F446 at 180Mhz … a real beast !!!
- 8 drivers with UART and SPI support (for TMC with pins for easy configuration)
- 24V power supply with 12V / 5A, 5V / 8A converters (Raspberry Pi, led strips, etc.)
- Protection with easy replacement fuses (power input and heated bed)
- Special connector for leveling sensor at different voltages (24v / 5v / 3.3v)
- 10 PWM outputs controlled by Mosfet (1 Heatbed, 3 HotEnd, 3 Fan, 3 RGB LEDs)
- 3 connectors for Thermistor / Thermocouple temperature sensors (AD597)
- 3 Fans (using an extruder and without RGB LEDs), 2 RGB strips (12 / 24v) and 1 NeoPixel 5v
- UART connector for Raspberry Pi power (no need for external cables)
- 2 connectors for SD modules
- SD connector on the board
- Connector USB C and optional connector for USB Type-B
- EXP connectors for LDC / TFT or USART displays, I2C, CAN
- PT100 sensors can be used directly (without additional electronics)
Fysetc Spider connections
Power supply selection
The Fystec Spider electronics, like the SKR electronics from BigTreeTech, have a specific jumper to select the power to be used between USB or internal 5V adapter (requires the connected power supply).
This jumper helps avoid nasty problems that can occur when mixing different feeds. In the following image you can see the detail of the power selection jumper.
In the case of connecting the Fysetc Spider electronics to our computer via USB, you must place the jumper in position U5V.
If, on the contrary, you connect it directly to the printer’s source, simply leave it as in the photograph.
Power connectors
As we have commented previously, this electronic board has an arsenal of connections and options so the power supply could not be less.
We have the following component power connections, which are well indicated in the silkscreen (as well as their polarity):
- HotEnd, which, as we already mentioned, can control up to 3 completely independent HotEnds (E0/E1/E2 OUT)
- BED OUT (heated bed). If we review the scheme in previous points we can directly connect our bed (although always for protection it is recommendable to use an external MOSFET) or a 220v bed using an SSR relay.
- BED IN (Heated bed), normally connected to our power supply but we could, in special cases with high consumption beds, connect there another dedicated source for the bed exclusively.
- PWR IN, it doesn’t have much of a mystery… the power provided by our power supply so that all electronics work properly.
Thermistors
The orientation of the thermistors is usually not important as these do not usually have polarity. In this case, for this board we have one connector for the heated bed (TB) and three for hotend heaters (TE0, TE1 and T2).
These pins have 4k7 pull-up resistors that allow the use of PT1000 probes directly. It is recommendable to use JST-XH 2.54mm connectors as they prevent disconnections from occurring and false contacts are minimized.
Drivers
As we have already mentioned, this board has an overwhelming number of 8 sockets for drivers, which offers us a range of incredible expansion possibilities. And of course, it should be noted that for the Z axis we have two motor outputs to use double Z axis in our machine using a single driver.
For Bigtreetech drivers we must make sure that they are in UART by means of the jumper soldered at the bottom of the driver itself (PDN soldering detail in the upper image)
For drivers that use SPI like TMC2130/TMC5160-1 or similar . In the case that we use Sensorless (homing without physical endings), or not, it is not necessary to cut the DIAG pin since the board has jumpers to enable this function.
Dual Z and X (Marlin)
In the case of using a double driver for the X and Z axis, it is important to place the second driver in the following sockets:
Sensorless
If we want to use this functionality of the TMC drivers the which uses the motors as “Endstops” we will have it very simple. This is because the board has specific jumpers to enable this function.
Anyway we advise you to check our Sensorless guide to learn more about this great functionality. Finally, indicate that the use of Sensorless is recommendable only for X and Y axis since its resolution and how it works can cause problems in the Z axis.
Endstops
In the Fysetc Spider we have 6 connectors for 3-pin endstops.
Again Fysetc has implemented very interesting improvements in the limit switches where we very often connect leveling sensors.
These sensors may require different voltages so jumpers have been included (using a solder bridge) so that we can choose the voltage that each connection will deliver, something really interesting.
We can find the following connector blocks that can use two types of voltages:
- X+/Y+ Connectors : We can choose 5v or 3.3v (default), indicated for example for BLTouch sensors of 5v
- X-/Y-/Z- Connectors: We can choose 24v or 3.3v (default), especially suitable for connecting inductive leveling sensors/capacitive
- Z+ Connector: Prepared for the connection of a leveling sensor with servo (PA3 PWM pin). We can choose by means of a jumper next to Z- the plate voltage 24v or 5v in the case that we use a sensor style BLTouch.
Fans
The Fysetc Spider electronic have 3 connections for manage different fans. In addition to this great improvement, we can, without the need for any current converter, configure their outputs to 12V or 24V, very useful for those cases where we use silent fans for our electronics or hotend.
For this we must put the corresponding jumper between FAN0/1/2 Voltage and the voltage that we want to use. In the following diagram you can easily observe it:
Leveling sensors
In the Fysetc Spider we have different options to install a very helpful component for a perfect fit of our first layers, a leveling sensor.
We are going to explain how to connect the two types most used today in 3D printing:
BTtouch/3DTouch
At 3DWork we believe that the best leveling sensor, for precision and functionality in practically any printer is the BLTouch/3DTouch.
On the other hand, they are more delicate but even if it has a higher cost, we always advise them for general quality and precision, especially if you acquire the original from Antclabs.
BLTouch (original antclabs) | ||
3DTouch |
As always, we recommend you to review the Marlin installation guide although in the image above we have left you the suggested connection scheme.
It is important to place the red jumper in the 5V position to correctly power our sensor.
Exists other endstop sensors, with a configuration similar to that of other sensors (for example, infrared). They are usually more robust and do not act by contact, but by detecting magnetic fields.
On the other hand, they tend to have less precision, are affected by environmental conditions (temperature, humidity, etc.) and are also not compatible with glass surfaces, so if your glass is very thick you will need a sensor with a sufficient detection range.
In the same way, it is important to place the red jumper in the 5V position to correctly feed our sensor, in other types it may vary.
In this type of electronics (Fysetc Spider) it is important to use the PA3 pin to connect the Endstop signal, since it has an input signal converter to adapt it to the 3.3v signals of the board and it will avoid that we need external optocouplers.
LCD Connectors
We have two EXP connectors compatible with the vast majority of displays of this type. In the following diagram we can see the available pin diagram:
Example of connections for some models:
A small but functional screen for Marlin emulation mode that with its LEDs gives a lot of possibilities to customize your printer.
One of the most popular screens for its great dual mode where we can enjoy the Marlin emulation mode and its advanced touch mode, you can find more information in our BigTreeTech/SKR display guide.
The screens used by many Creality printers and derivatives. These normally have 3 EXP connectors (EXP1/2/3) where one of them (EXP3) is a simplified type of connection of the other two that is normally only found on Creality boards or similar.
In the case of our Fysetc we must use the EXP1 and EXP2 connectors connecting directly to the corresponding one on the board:
Neopixel/RGB
The Fysetc Spider has several options for the use of lighting in our printer that is always useful, whether it is to illuminate the printing area, show printer events or to give it a personalized touch.
Neopixel/WS280x
Neopixel led strips are an excellent choice since with only 3 cables we can have up to 50 LEDs with intelligent lighting. The board has a 5v source that can deliver a maximum of 8A (if we exceed 6A we must add a cooler to the current converter).
If we use our Raspberry Pi 3A are needed for it, we add 1A for the use of the system with what we have 4A left for the lighting system. Although 4A would give us for about 66 LEDs, it is recommendable not to exceed 3A, about 50 LEDs, to leave at least 1A of margin.
RGB LED Ring 5V WS2812B | ||
WS2812b 60leds 60pixels |
The changes to be made in Marlin would be the following (see image below). However, we recommend that you review our Neopixel guide:
// configuration.h
#define NEOPIXEL_LED // 3DWORK NEOPIXEL
#define NEOPIXEL_PIN PD3 // 3DWORK NEOPIXEL PIN CONTROL
#define NEOPIXEL_PIXELS 20 // 3DWORK NEOPIXEL NUMERO LEDS
// configuration_adv.h
#define LED_CONTROL_MENU // 3DWORK NEOPIXEL MENU CONTROL LEDS
RGB
We can also connect our RGB strips, although in this case in addition to needing more wiring, we will be limited in the format of the effects since these strips are not manageable by individual LEDs unlike the Neopixel.
As usual, Fysetc allows us to choose the working voltage, in this case between 24/12v so we will locate a jumper by selecting the one that best suits us following the specifications of our RGB strip.
Changes in Marlin:
// configuration.h
#define RGB_LED // 3DWORK RGB
// configuration_adv.h
#define LED_CONTROL_MENU // 3DWORK RGB MENU CONTROL LEDS
// Definition of pins included in Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
// ONLY INCLUDED FOR REFERENCE NO TOUCH ANYTHING
#ifndef RGB_LED_R_PIN
#define RGB_LED_R_PIN PB6
#endif
#ifndef RGB_LED_G_PIN
#define RGB_LED_G_PIN PB5
#endif
#ifndef RGB_LED_B_PIN
#define RGB_LED_B_PIN PB7
#endif
#ifndef RGB_LED_W_PIN
#define RGB_LED_W_PIN -1
#endif
Raspberry Pi connection
Our Fysetc Spider has a dedicated connector for connecting a Raspberry Pi normally to control our printer with Octoprint or Klipper.
This connector allows us to power and connect our Raspberry Pi by UART and it is interesting that the power supply through the connector can provide up to 8A.
To enable the UART port on our Raspberry Pi we will have to reconfigure it using raspi-config from an SSH command line for example.
sudo raspi-config
=> Interfacing Option
=> Serial
=> NO=> YES
sudo nano /boot/config.txt
=> add this line :dtoverlay=pi3-disable-bt
=> then
sudo rebootsudo
nano /boot/cmdline.txt
=> remove the word phase "console=serial0,115200" or "console=ttyAMA0,115200"
sudo reboot
In any case, we can connect our Raspberry via normal USB through the USB-C port on the board and we also have a JST connector to be able to connect internally to the USB of the Pi.
Supported firmwares
The Fysetc Spider is a very versatile board as we have already commented at the hardware level and it will not be less at the software level.
The Spider is compatible with Marlin and Klipper although it also has a special edition with more memory to be used with RRF (Duet).
Marlin
We recommend you to follow our guide to build your own Marlin that we have in the /Marlin section of our Telegram help bot @ThreeDWorkHelpBot
It will be interesting to add a comment to any line that we modify since later it will be much easier for us to find our modifications. For this we can add:
In the case that the line has no comment
... // 3DWORK
In case you already have a comment
... // 3DWORK ...
Platformio.ini
In this file we must indicate the chipset that our board has, so we must look at the beginning of the file for the value “env_default” and change it to the following:
default_envs = FYSETC_S6
One of the great features that this board has that others don’t usually have is that its bootloader allows it to be updated using different methods. One of them is the standard via SD on the LCD or external screen since the board does not have SD or via USB by putting the board in BOOT0 mode.
By default, the configuration of this board is prepared for the second one using DFU, which is not always comfortable having to access the board, change the pin and connect the USB cable.
So that the process does not fail if we do not do it that way and leave us the binary for its copy in the SD we will comment on the following lines in the indicated file:
.../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
# 3DWORK upload_protocol = dfu
# 3DWORK upload_command = dfu-util -a 0 -s 0x08010000:leave -D "$SOURCE"
Configuration.h
We will start by correctly configuring the SERIAL for this machine, the key for the correct operation of our TFT, USB or WIFI connection.
#define SERIAL_PORT -1 // 3DWORK SERIAL1 FYSETC SPIDER
#define SERIAL_PORT_2 1 // 3DWORK SERIAL2 FYSETC SPIDER
BAUDRATE: It helps us to define the communication speed through the SERIAL port, the normal thing is to use 115200 or 250000.
#define BAUDRATE 115200
Now we will define our MOTHERBOARD which, as we did the platformio.ini, indicates the type of chipset that our board has and that allows Marlin to use one pin configuration or another.
#define MOTHERBOARD BOARD_FYSETC_SPIDER // 3DWORK FYSETC
We will define the number of extruders and diameter of the filament that our printer uses, which basically indicates its diameter. Normally printers use 1.75 filament although another more or less standard measure is 3.
// 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
Thermistors: In this section we will indicate which thermistors we have, we recommend you to identify which is yours or, failing that, use one of value 1 which is usually the most normal.
It is very important to indicate the correct type of thermistor so that the measurements that Marlin receives are correct to avoid extrusion problems and/or reading failures.
In the event that we want to deactivate or activate the hot bed, we will comment or activate the thermistor of the bed, in this way Marlin knows whether or not it has a hot bed.
In our example and for this board we will use a hotend and a heated bed with a standard temperature sensor.
#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: Another very important part is the PID of which you can obtain more detailed information in the section /Calibracion/Calibracion Inicial from our help bot on Telegram @ThreeDWorkHelpBot o in our calibration guide.
Basically the PID helps Marlin to control the temperature properly without having big fluctuations.
#define PIDTEMP // 3DWORK PID
#define PIDTEMPBED // 3DWORK PID
ENDSTOPS: It is important to verify when we change the electronics and turn on for the first time that the logic of the limit switches is correct using the M119 command from a terminal such as Pronterface … this is OPEN in normal state and TRIGGERED when they are pressed. We can reverse this logic by changing:
#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.
On the other hand and although the normal thing is that the machines make the home in MIN (lower left corner) instead of MAX (upper right corner), using HOME_DIR for this change -1 (MIN) 1 (MAX), we must remember that in in the case of changing the logic enable the corresponding limit switches:
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG
Also remind you that if you have TMC drivers in UART mode you can use, if the driver supports it, the use of SensorLess, which will allow you to dispense with the physical limit switches, freeing up components and cables. You can find information on how to configure your Fysetc Spider here and how to activate SensorLess in our guide for Marlin.
Drivers As we have already mentioned, this board has 6 sockets for drivers supporting different types of drivers and their configurations. You can find how to install them in the first part of the guide.
In our example we will use a TMC2209 in UART (intelligent) mode, with independent double Z and a single extruder:
#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 or motor steps The values will indicate to Marlin the motor steps to perform movements. In this example we will use the ones that an Ender printer carries by default, in any case we refer you to the section again /Calibración/Calibración Inicial from our help bot on Telegram @ThreeDWorkHelpBot or here for the process calibrate these steps for our extruder and movement axis.
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80.00, 80.00, 400.00, 93 } // 3DWORK pasos para Ender3 ejes X, Y, Z,Extrusor
S_CURVE_ACCELERATION: This functionality offers a great improvement in print quality by smoothing acceleration or deceleration when the print head is in motion.
#define S_CURVE_ACCELERATION // 3DWORK IMPROVEMENTS
Sensor probe As we previously commented, we have a detailed guide to install a BLTouch sensor where we indicate the most important points to take into account in the event that we want to install a leveling sensor, something highly recommendable to ensure that our prints always have the most perfect first layer possible.
We will start by indicating where our leveling sensor is connected, in this case we will connect it in the Z- Endstop connector
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN // 3DWORK we indicate to Marlin that sensor is connected in Z-STOP
Sensor type BLTouch or Inductive: There are different types of sensors. Depending on the used we will have to uncomment one or the other.
In the case of an Inductive sensor:
#define FIX_MOUNTED_PROBE // 3DWORK PROBE
In the case of a BLTouch type sensor:
#define BLTOUCH // 3DWORK PROBE
In the case of using a sensor type BLTouch, who use a servo for the probing process, it is recommendable to change the pin of the servo to suit the connection scheme.
For this we will modify the pins file …/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
//.../Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
// Servos
//
//#define SERVO0_PIN PA3 // 3DWORK PINDAv2
#define SERVO0_PIN PA2 // 3DWORK BLTOUCH
Sensor offsets. It is very important to tell Marlin where exactly our leveling sensor is installed. We will do this defining the Probe offset.
The Offset is the distance between the tip of the nozzle and the tip of the leveling sensor that, depending on where it is, must be positive or negative values.
You can use the following graph as an example of what value to put in each case (make click to enlarge the image).
In our case, the sensor is offset to the left of the nozzle by 30mm in X and 10mm in Y, since that distance is towards the bottom of the printer.
#define NOZZLE_TO_PROBE_OFFSET { -30, 10, 0 } // 3DWORK PROBE
PROBING_MARGIN (in previous versions named MIN_PROBE_EDGE). Whether we have glass or another surface, it is recommendable that the sensor is away from any object that may bother it during the leveling process, be it staples to fix the glass or the mismatch of the beginning and end of the bed that makes the sensor unable to measure.
For this we will use the PROBING_MARGIN parameter, where we will indicate how many millimeters to move away from the edges of the bed.
In our case using a BLTouch and a PEI platform we leave it by default.
#define PROBING_MARGIN 10 // 3DWORK PROBE
Direction of motors. Another very common problem when starting a printer is that the wiring of the coils of our motors do not match and there can be two cases:
- That the connectors of our coils are mixed, it is very easy to identify since the motor will not rotate correctly and will go stumbling. To solve this, it is recommendable to check the pinout of the old plate and / or the motor and compare it with that of our new plate to make sure they match.
- That the motor rotates in the wrong direction. In this case again we have two options. The first and recommendable one is to modify the motor rotation in Marlin and the second is to reverse the wiring of one of the motor coils.
In our case we opt for the first one by modifying the following lines in Marlin changing the current value on the contrary … in this case we invert the Z axis.
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false // 3DWORK We reverse the rotation of the Z axis
Print size. If we have used a generic Marlin it is important to verify that the printing dimensions are correct for our machine..
For the bed size in the example we use an Ender 3 at its maximum size. It is recommendable to verify that you can physically reach these measurements and adjust it if necessary:
#define X_BED_SIZE 235 // 3DWORK BED
#define Y_BED_SIZE 235 // 3DWORK BED
#define Z_MAX_POS 250 // 3DWORK BED
Filament sensor. We advise you to review in the section /Mejoras/Sensor de filamentos from our help bot on Telegram @ThreeDWorkHelpBot or in our guide you can find more detailed information about how to install and configure a filament sensor.
#define FILAMENT_RUNOUT_SENSOR // 3DWORK Filament sensor
As with the endstops, it is recommendable to check with a M119 command the status of the filament sensor which has to appear. TRIGGERED with filament and OPEN without filament. In the case that it seems inverted we will have to play with the value of LOW/HIGH:
#define FIL_RUNOUT_STATE LOW // 3DWORK SENSOR FILAMENTOS
Autoleveling. As we mentioned previously in the section /Nivelación of our bot @ThreeDWorkHelpBot you have more detailed information on how to activate UBL Autoleveling (the most advanced and recommended for beds of a certain size or with problems) and MESH that allows to have a mesh without sensor doing the process manually.
In any case, for this example we will enable BILINEAR.
#define AUTO_BED_LEVELING_BILINEAR // 3DWORK PROBE
It is important to tell Marlin to enable self-leveling (G29) after a homing (G28). Although in current versions it is no longer necessary but we advise enabling it.
#define RESTORE_LEVELING_AFTER_G28 // 3DWORK PROBE
In the case of BILINEAR we will specify the number of points to perform per mesh in the next part of Marlin (by default it has 3 points per axis, 3×3=9 check points).
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
Another function that we must enable for safety is to perform a homing in the center of the bed. This will helps us with two things… First one to ensure that the sensor has a surface to detect the end of the stroke and the second visually verify that our Offsets are in the correct way since the leveling sensor has to be perfectly positioned in the center of our bed.
#define Z_SAFE_HOMING // 3DWORK PROBE
EEPROM. In the EEPROM, Marlin saves the configuration values of different functions so that they can be used by the system and changed by the user without having to modify Marlin source files, compile and upload the firmware at each change. It is highly recommendable to activate it and with our Fysetc S6 we will not have memory problems.
#define EEPROM_SETTINGS // 3DWORK EEPROM
#define EEPROM_CHITCHAT // 3DWORK EEPROM
The EEPROM of our Spider is 4Kb but there is a problem in the pins files in the versions <= 2.0.9 (Marlin’s stable at the time of making this guide) which can generate warnings during compilation related to EEPROM functions and even during use or Marlin updates.
In order to temporarily solve it, it is recommendable to comment on the following line in the pins file of the Fysetc S6 that is used as a base for our Spider:
..Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
#elif ENABLED(I2C_EEPROM)
// #define MARLIN_EEPROM_SIZE 0x0800 // 3DWORK SPIDER EEPROM ERROR FIX 2KB
#endif
Nozzle Park. In the example we are explaining we have added a filament sensor. For this to work we must activate NOZZLE_PARK_FEATURE which basically allows us to “park” the print head in a safe area to carry out this filament change.
Although, if we do not have a filament sensor, it is highly advisable to have it active as it allows us to improve the pause functions.
#define NOZZLE_PARK_FEATURE // 3DWORK Nozzle park
SD Card. If we want our Marlin to be able to read from our SD either the one on the board or on a screen that is compatible (note that the Touch are not), we must activate the SD Card support.
#define SDSUPPORT // 3DWORK SD
Advanced Homing menu. It is not necessary but it is highly advisable in the case of tests to enable this function that allows us to perform a separate homing of each axis.
#define INDIVIDUAL_AXIS_HOMING_MENU // 3DWORK MEJORAS
Configuration_adv.h
Scroll and long file names. It is interesting to activate this functions to be able to show the full name of the files to be printed. In our case we activated the following options.
#define LONG_FILENAME_HOST_SUPPORT // 3DWORK Improvements
#define SCROLL_LONG_FILENAMES // 3DWORK Improvements
SD Connection. Previously in “configuration.h” we enabled SD support and here, in the “configuration_adv.h” file, we will define where Marlin will try to use that SD connection from.
We have three options here: LCD where we will use that of the Marlin screen. ONBOARD where we will use that of the board and CUSTOM_CABLE where we will indicate that we use an external reader connected to the board.
As we mentioned previously, not all screens that have SD will work correctly. In our case we will use the one on the screen since the Fysetc S6 does not have an SD connector integrated into the board.
#define SDCARD_CONNECTION LCD // 3DWORK SD
Fans. A great success by Fysetc is the inclusion of 3 manageable fans in addition to being able to feed them with different voltages from the board itself without the need for converters, in the case of the Spider we have 24/12 / 5V available.
The definition of the pin of each FAN can be found in /Marlin/src/pins/stm32f4/pins_FYSETC_S6.h, which is used by Marlin as a common pin file for the Spider and the S6 as explained here.
FAN0. In this case we are not going to make any changes in its role since it is the layer fan and this is managed by the slicer itself to cool the filament.
FAN1. In our example we are going to assign it to the hotend so that it is dynamically only activated when the hotend is in operation, avoiding fan wear and unnecessary noise:
#define E0_AUTO_FAN_PIN FAN1_PIN // 3DWORK FAN1 assigned to hotend
...
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 // 3DWORK FAN1 temperature activation
#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
FAN2. To take advantage of this arsenal of manageable fans (we can have more by reusing pins from other functions such as RGB for example) to assign FAN2 as a dynamic electronics fan so that it is activated when the drivers are in use, minimizing wear and noise on the part from the fan:
#define USE_CONTROLLER_FAN // 3DWORK FAN2 enabled electronic managed ventilation
...
#define CONTROLLER_FAN_PIN FAN2_PIN // 3DWORK FAN2 assigned to electronics
...
#define CONTROLLER_FAN_EDITABLE // 3DWORK FAN2 manageable gcode M710
...
#define CONTROLLER_FAN_MENU // 3DWORK FAN2 habilitar screen management menu
Babystepping. An almost essential function to have. Babystepping allows us to modify the height of Z during a print to adjust it manually to our liking.
In our example we will enable that it can be activated with a double click on the encoder button, which is always available and shows us graphic improvements in the adjustment to understand the direction of the adjustment from the screen.
#define BABYSTEPPING // 3DWORK Improvements
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // 3DWORK Improvements
#define BABYSTEP_ALWAYS_AVAILABLE // 3DWORK Improvements
#define BABYSTEP_ZPROBE_GFX_OVERLAY // 3DWORK Improvements
Retries in case of failure in leveling. Another very useful function is to be able to retry the homing process in case of failure. Sometimes our leveling sensor may have a specific failure and through this function it will allow us to try again a finite number of times.
#define G29_RETRY_AND_RECOVER // 3DWORK Improvements
#define G29_MAX_RETRIES 4 // 3DWORK MEJORAS
ARC Support. A substantial improvement in the quality of our prints and also when we print through serial devices such as TFT, Octoprint, etc … It allows us to simplify the gcodes commands, minimizing the number of movements and making them more fluid, also avoiding a large number of retractions.
To use it we must configure our slicer to apply these changes or in the case of Octoprint we can use a plugin. Changes in Marlin are these:
#define ARC_SUPPORT // 3DWORK Improvements
It is important to emphasize that if you enable ARC Support is recommendable to add compatibility with S_CURVE. You have more information in the calibration guide.
Advanced pause. As we discussed earlier in this example we use a filament sensor. For make it work correctly we need to activate ADVANCED_PAUSE_FEATURE, which enables the gcode command M600 for changing filaments.
This can be done with or without a level sensor and requires NOZZLE PARK for its correct operation.
We will not enter the detailed configuration since you have it within /Mejoras/Sensor Filamentos inside our bot or directly in the guide.
#define ADVANCED_PAUSE_FEATURE // 3DWORK Filament sensor
UART / SPI configuration drivers. With our UART/SPI drivers we have to correctly configure the advanced parameters that we will find in the section HAS_TRINAMIC_CONFIG
Micropasos. Although we can configure from 16 to 256 microsteps, we do not advise you to use a value other than 16.
With these microsteps, the definition that we could achieve mechanically is practically impossible to achieve with normal printers, in addition to the fact that the TMC drivers already perform the interpolation themselves to always offer maximum reliability and precision.
Speaking of reliability is another important aspect when it comes to microstepping, the stepper motors that our printers carry lose torque (and steps) at high revolutions.
So increasing this definition of steps will exponentially increase the reliability percentage and therefore our parts will not come out correctly. In the following example we can see how we have 16 microsteps for our X axis:
#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
Another important value of the previous parameters is CURRENT, where we will adjust the current of our motors. You can also adjust them from the LCD from Settings->Advanced->TMC along with other options that we will explain below.
STEALTHCHOP. It is important to enable it if we want our motors to be “silent” since if they will not be working in SpreadCycle mode, which is the power mode.
#define STEALTHCHOP_XY // 3DWORK Drivers
#define STEALTHCHOP_Z // 3DWORK Drivers
#define STEALTHCHOP_E // 3DWORK Drivers
Although rare, some extruders may work better with StealthChop mode disabled. If this is our case, we will comment on the following line.
//#define STEALTHCHOP_E // 3DWORK Drivers
CHOPPER TIMMING. Used by StealthChop for synchronization of signals to motors. This has to match the voltage used in our printer, in the case of Ender 3 and normally in all 24V printers.
#define CHOPPER_TIMING CHOPPER_DEFAULT_24V // 3DWORK Drivers
Monitor Status. This function allows Marlin to control in detail all the parameters of the drives to be able to adjust, for example, their temperature to avoid more serious problems.
#define MONITOR_DRIVER_STATUS // 3DWORK Drivers
Hybrid Threshold. Another interesting function is Hybrid Threshold that allows Marlin to switch between StealthChop (silence) or SpreadCycle (power) dynamically based on the speed of movements.
#define HYBRID_THRESHOLD // 3DWORK Drivers
#define X_HYBRID_THRESHOLD 100 // [mm/s]
#define Y_HYBRID_THRESHOLD 100
#define Z_HYBRID_THRESHOLD 15
TMC Debug. In this case, it is a MONITOR_DRIVER_STATUS requirement that we must enable and it will allow us to have the M122 command accessible, very useful to obtain advanced information on the status and configuration of our drivers.
#define TMC_DEBUG // 3DWORK Drivers
Fysetc Spider pins file
Below you have the pins files that contain the references for this board.
.../Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER.h
.../Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
Update firmware in Fysetc Spider
The Fysetc Spider has several options to update its firmware.
Via SD card
The simplest option is to use an SD for the update, which is the default method used by the board’s bootloader.
In this case it is very simple and we just have to copy our “firmware.bin” in the root of the SD formatted in FAT32, insert the SD in the module slot and wait about 30 seconds for the completion of the process.
Once the “firmware.bin” file is finished, it must be renamed to “old.bin” , which we can save as a backup.
Remember that a compiled firmware cannot be modified. This process can only be done with the source files of your firmware and recompiled.
Via DFU / USB mode
Another way to update our board, especially in the case of not having a module or LCD screen with SD, is using the DFU mode. To do this we will proceed to download the STM32 Cube Programmer (Windows, Mac y Linux) and we will open the application.
- Once in DFU mode we will return to the application and perform the following steps:
- We will press the REFRESH button to detect the DFU port
- We will press the CONNECT button
- We will select the “firmware.bin” created
- In START ADDRESS we will put 0x8010000
- We will press START PROGRAMMING
If everything has worked correctly we will have our new firmware on our Fysetc S6.
LCD Fysetc MINI 12864 2.1 (Neopixel)
This screen is very suitable to use together with this electronics since it has a very compact format that can be easily integrated and has a very good aesthetic, as well as some LEDs that can be controlled from Marlin that always give a lot of play.
Remember that according to the manufacturer’s scheme, this screen requires connecting the EXP1 of our board with the EXP2 of the screen and the EXP2 of our board with the EXP1 of the screen. Connecting it incorrectly can damage your screen and even your motherboard.
Configuration.h Fysetc MINI 12864
# Screen definition
#define FYSETC_MINI_12864_2_1 // Type A/B. Neopixel RGB Backlight
...
# Screen Neopixel Definition
// 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
Configuration_adv.h Fysetc MINI 12864
# Enable LED control menus
#define LED_CONTROL_MENU
Conditionals_post.h Fysetc MINI 12864
These modifications must be made if your screen does not appear letters in a clear / defined way (they are seen diagonally)
#elif ENABLED(FYSETC_MINI_12864)
#define _LCD_CONTRAST_MIN 255
#define _LCD_CONTRAST_INIT 255
.../Marlin/src/inc/Conditionals_post.h
Klipper
Klipper firmware installation on our Fysetc Spider board
One of the Klipper installation steps is creating and updating the board firmware. For our Spider these are the options to use when we carry out the “menuconfig” step:
- Enable “extra low-level configuration setup”
- Select “12Mhz crystal” as clock reference
Boot address (option 1)
Currently there is no option to define the “boot address” in Klipper, so we have the following preconfigured firmwares klipper.bin and klipper-UART0.bin.
The difference between both firmwares can be found in the next link, in the boot address 0x8000000. Please follow the steps to upload firmware by DFU but indicating that the Start address is 0x08000000 and selecting “klipper.bin” (no “firmware.bin”)
Boot address (option 2)
If Klipper supports “boot address” for STM32F446 processors in the future, we can define 0x08010000 as “boot address” and generate our own Klipper firmware.
In that case we will need to burn the bootloader first. We can find the bootloader of our Fysetc in the bootloader directory of the github repository following the instructions indicated in the following link.
Once these steps have been carried out, we can carry out the normal process to upload the firmware by SD.
Final notes
Well, this is it, now we only have to compile the firmware, adjust any error that the compiled report reports to us and put it on our board. Once the firmware is uploaded, it would be advisable to initially verify the printer as follows:
- Check end stops (Endstops), whenever possible using a terminal (Pronterface for example) with the M119 command
- Check individually the Homing of each of the movement axis in the following order X Y Z E, and if necessary reverse the rotation of the motor
- Check that our thermistors report the temperature correctly
- Check that our bed and hotend warmers are working properly
- Carry out the Initial Calibration guide that you can find in our bot in the section /Calibration
For the rest, we hope that this extensive article will help you to configure the Fysetc Spider electronics.
If you find any misprints, or want to make a comment about it, do not hesitate to write us a note or comment at the end of the article. Feel free to visit other interesting articles on our website:
- New Marlin Builder v2.0 update (+220 firmwares available v2.0.9.1)
- BIGTREETECH E3 RRF V1.1: New electronic boards for the Creality Ender 3 printers
- To buy a 3D printer: Essential guide to buy your first 3D printer in 2021
- BIQU H2 Extruder (Review): One of the lightest and most compact extrusion system on the market
- Expiration date in filaments. Utopia or something that we should demand from all manufacturers?
- QIDI TECH X-Plus: Industrial-grade, high-performance 3D printing for your desktop
Your link pages will not switch to EN, other wise nice tutorial.
Spider README nothing interesting here.
Hi Pro,
thanks for your feedback as help us to detect an issue on our CMS systems and the guide only appears partially.
The guide was made to extend the information from README and Fysetc Wiki, in fact during our tests during few weeks we help to improve at some points the Fysetc documentation and the direct contact and collaboration with Fysetc engineers was really nice experience.