Parts

FYSETC Spider Controller

Reference

Bootloader Setup

Installation of the bootloader/firmware is a little confusing and I initially thought I had a bad board. I haven't been able to install bootloader or firmware without shorting the BOOT0 pins to force DFU mode. Here's the general process:

  1. Install jumper on BT0 pins and power on
  2. Launch STM32CubeProgrammer, select USB, and Connect
  3. Click the Erasing and Programming tab, and then:
    1. Pick the Bootloader_FYSETC_SPIDER.hex bootloader from the FYSETC Spider GitHub Repo
    2. Select Verify programming and Full Chip Erase
    3. Click Start Programm..
  4. Next install the firmware (previously compiled)
    1. Uncheck the Full chip erase checkbox
    2. Choose the firmware. After compiling, it can generally be found in the <<install path>>firmware/Marlin/.pio/build/FYSETC_S6_8000
    3. IMPORTANT: Change the Start addr.. to 0x08008000. For some reason the bootloader now looks for the firmware at the 8000 location vs the default 0x08000000
    4. Click Start Programm... to write the firmware
  5. Remove the BT0 pin and restart

Firmware (Marlin) Configuration

configuration.h

#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_FYSETC_SPIDER
#endif

#define SERIAL_PORT -1

#define TEMP_SENSOR_BED 11

[include mainsail.cfg]

  1. This file contains common pin mappings for the Fysetc Spider board.
  2. To use this config, the firmware should be compiled for the STM32F446.
  3. When calling "menuconfig", enable "extra low-level configuration setup"
  4. and select the "12MHz crystal" as clock reference
  5. For flashing, write the compiled klipper.bin to memory location 0x08000000
  1. See docs/Config_Reference.md for a description of parameters.
    1. Voron Design VORON2 250/300/350mm Spider TMC2209 UART config
    1. *** THINGS TO CHANGE/CHECK: ***
    2. MCU paths [mcu] section
    3. Thermistor types [extruder] and [heater_bed] sections - See 'sensor types' list at end of file
    4. Z Endstop Switch location [safe_z_home] section
    5. Homing end position [gcode_macro G32] section
    6. Z Endstop Switch offset for Z0 [stepper_z] section
    7. Probe points [quad_gantry_level] section
    8. Min & Max gantry corner postions [quad_gantry_level] section
    9. PID tune [extruder] and [heater_bed] sections
    10. Fine tune E steps [extruder] section

[mcu]

    1. Uncomment below if you're using the Raspberry uart0 to communicate with Spider
  1. restart_method: command
    1. You need to select 'Communication interface' to USB in 'make menuconfig'
    2. when you compile Klipper for Spider
    3. Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify
    4. --------------------------------------------------------------------

serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_1E0048001050563046363120-if00

    1. If you want to use the Raspberry uart0 to communicate with Spider,
    2. you need to select 'Communication interface' to 'Serial (on USART1 PA10/PA9)'
    3. in 'make menuconfig' when you compile klipper and set the serial as below
    4. --------------------------------------------------------------------
  1. serial: /dev/ttyAMA0
    1. --------------------------------------------------------------------

[printer] kinematics: corexy max_velocity: 300 max_accel: 5000 #Max 4000 max_z_velocity: 30 #Max 15 for 12V TMC Drivers, can increase for 24V max_z_accel: 350 square_corner_velocity: 8.0

  1. X/Y Stepper Settings

[stepper_x]

    1. Connected to X-MOT (B Motor)

step_pin: PE11 dir_pin: PE10 enable_pin: !PE9 rotation_distance: 40 microsteps: 16 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: ^PB14 position_min: 0

    1. --------------------------------------------------------------------
    1. Uncomment below for 225050mm build
  1. position_endstop: 250
  2. position_max: 250
    1. Uncomment for 300mm build

position_endstop: 300 position_max: 300

    1. Uncomment for 350mm build
  1. position_endstop: 350
  2. position_max: 350
    1. --------------------------------------------------------------------

homing_speed: 50 #Max 100 homing_retract_dist: 5 homing_positive_dir: true

    1. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 stepper_x] uart_pin: PE7 interpolate: True run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

[stepper_y]

    1. Connected to Y-MOT (A Motor)

step_pin: PD8 dir_pin: PB12 enable_pin: !PD9 rotation_distance: 40 microsteps: 16 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: ^PB13 position_min: 0

    1. --------------------------------------------------------------------
    1. Uncomment for 250mm build
  1. position_endstop: 250
  2. position_max: 250
    1. Uncomment for 300mm build

position_endstop: 300 position_max: 300

    1. Uncomment for 350mm build
  1. position_endstop: 350
  2. position_max: 350
    1. --------------------------------------------------------------------

homing_speed: 50 #Max 100 homing_retract_dist: 5 homing_positive_dir: true

    1. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 stepper_y] uart_pin: PE15 interpolate: True run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

  1. Z Stepper Settings
    1. In Z-MOT Position
    2. Z0 Stepper - Front Left

[stepper_z] step_pin: PD14 dir_pin: PD13 enable_pin: !PD15 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16

    1. In Z- Position

endstop_pin: ^PA0

    1. Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0)
    2. (+) value = endstop above Z0, (-) value = endstop below
    3. Increasing position_endstop brings nozzle closer to the bed
    4. After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config
  1. position_endstop: -0.5
    1. --------------------------------------------------------------------
    1. Uncomment below for 250mm build

position_max: 170

    1. Uncomment below for 300mm build
  1. position_max: 290
    1. Uncomment below for 350mm build
  1. position_max: 340
    1. --------------------------------------------------------------------

position_min: -5 homing_speed: 10 second_homing_speed: 3 homing_retract_dist: 3

    1. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 stepper_z] uart_pin: PD10 uart_address: 0 interpolate: True run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

    1. In E1-MOT Position
    2. Z1 Stepper - Rear Left

[stepper_z1] step_pin: PE6 dir_pin: !PC13 enable_pin: !PE5 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16

    1. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 stepper_z1] uart_pin: PC14 interpolate: True run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

    1. In E2-MOT Position
    2. Z2 Stepper - Rear Right

[stepper_z2] step_pin: PE2 dir_pin: PE4 enable_pin: !PE3 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16

    1. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 stepper_z2] uart_pin: PC15 interpolate: true run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

    1. In E3-MOT Position
    2. Z3 Stepper - Front Right

[stepper_z3] step_pin: PD12 dir_pin: !PC4 enable_pin: !PE8 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16

[tmc2209 stepper_z3] uart_pin: PA15 interpolate: true run_current: 0.7 hold_current: 0.4 sense_resistor: 0.110 stealthchop_threshold: 0

  1. Extruder
    1. In E0-MOT Position

[extruder] step_pin: PD5 dir_pin: !PD6 enable_pin: !PD4


    1. Update value below when you perform extruder calibration
    2. If you ask for 100mm of filament, but in reality it is 98mm:
    3. rotation_distance = <previous_rotation_distance> * <actual_extrude_distance> / 100
    4. 22.6789511 is a good starting point

rotation_distance: 22.5078095278 #Bondtech 5mm Drive Gears

    1. Update Gear Ratio depending on your Extruder Type
    2. Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio)
    3. Use 80:20 for M4, M3.1

gear_ratio: 50:17 #BMG Gear Ratio microsteps: 16 full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree nozzle_diameter: 0.400 filament_diameter: 1.75

    1. In E0 OUT Position

heater_pin: PB15

    1. Validate the following thermistor type to make sure it is correct

sensor_type: ATC Semitec 104GT-2 sensor_pin: PC0 # TE0 Position min_temp: 10 max_temp: 270 max_power: 1.0 min_extrude_temp: 170 max_extrude_cross_section: 50.0

  1. control = pid
  2. pid_kp = 26.213
  3. pid_ki = 1.304
  4. pid_kd = 131.721
    1. Try to keep pressure_advance below 1.0

pressure_advance: 0.05

    1. Default is 0.040, leave stock

pressure_advance_smooth_time: 0.040

    1. In E0-MOT Position
    2. Make sure to update below for your relevant driver (2208 or 2209)

[tmc2209 extruder] uart_pin: PD7 interpolate: false run_current: 0.5 hold_current: 0.2 sense_resistor: 0.110 stealthchop_threshold: 0

  1. Bed Heater

[heater_bed]

    1. SSR Pin - In BED OUT position

heater_pin: PB4 sensor_type: NTC 100K beta 3950 sensor_pin: PC3 # TB Position

    1. Adjust Max Power so your heater doesn't warp your bed

max_power: 0.6 min_temp: 0 max_temp: 120

  1. control: pid
  2. pid_kp: 58.437
  3. pid_ki: 2.347
  4. pid_kd: 363.769
  1. Probe

[probe]

    1. Inductive Probe - If you use this section , please comment the [bltouch] section
    2. This probe is not used for Z height, only Quad Gantry Leveling
    3. In Z+ position
    4. If your probe is NC instead of NO, add change pin to ^PA3

pin: ^PA3 x_offset: 0 y_offset: 25.0

  1. z_offset: 0

speed: 20.0 samples: 2 samples_result: median sample_retract_dist: 3.0 samples_tolerance: 0.01 samples_tolerance_retries: 4

  1. Bltouch
  1. [bltouch]
    1. Bltouch - If you use this section , please comment the [probe] section
    2. More infomation at : https://www.klipper3d.org/BLTouch.html
    3. This bltouch is not used for Z height, only Quad Gantry Leveling
    4. In Z+ Position
  2. sensor_pin: PA0
    1. In Y+ Position
  3. control_pin: PA2
  4. x_offset: 0
  5. y_offset: 25.0
  6. z_offset: 0
  7. speed: 10.0
  8. samples: 3
  9. samples_result: median
  10. sample_retract_dist: 3.0
  11. samples_tolerance: 0.006
  12. samples_tolerance_retries: 3
  1. Fan Control

[heater_fan hotend_fan]

    1. Hotend Fan - FAN0 Connector

pin: PB0 max_power: 1.0 kick_start_time: 0.5 heater: extruder heater_temp: 50.0

    1. If you are experiencing back flow, you can reduce fan_speed
  1. fan_speed: 1.0

[fan]

    1. Print Cooling Fan - FAN1 Connector

pin: PB1 max_power: 0.4 kick_start_time: 0.5

    1. Depending on your fan, you may need to increase this value
    2. if your fan will not start. Can change cycle_time (increase)
    3. if your fan is not able to slow down effectively

off_below: 0.10

[heater_fan controller_fan]

    1. Controller fan - FAN2 Connector

pin: PB2 kick_start_time: 0.5 heater: heater_bed heater_temp: 45.0 fan_speed: .3

  1. [heater_fan exhaust_fan]
    1. Exhaust fan - In E2 OUT Positon
  2. pin: PB3
  3. max_power: 1.0
  4. shutdown_speed: 0.0
  5. kick_start_time: 5.0
  6. heater: heater_bed
  7. heater_temp: 60
  8. fan_speed: 1.0
  1. LED Control
  1. Chamber Lighting - In 5V-RGB Position
  2. [neopixel caselight ]
  3. pin: PD3
  4. chain_count: 15
  5. color_order: RGB
  6. initial_RED: 1.0
  7. initial_GREEN: 1.0
  8. initial_BLUE: 1.0

[neopixel caselight] pin: PD3 chain_count: 35 color_order: RGB initial_RED: 1 initial_GREEN: 1 initial_BLUE: .5


  1. [output_pin caselight ]
  2. Chamber Lighting - In 5V-RGB Position
  3. pin: PD3
  4. pwm: true
  5. shutdown_value: 0
  6. value: 1.0
  7. cycle_time: 0.01
  1. Homing and Gantry Adjustment Routines

[idle_timeout] timeout: 1800

[safe_z_home]

    1. XY Location of the Z Endstop Switch
    2. Update -10,-10 to the XY coordinates of your endstop pin
    3. (such as 157,305) after going through Z Endstop Pin
    4. Location Definition step.

home_xy_position:205,300 speed:100 z_hop:10

[quad_gantry_level]

    1. Use QUAD_GANTRY_LEVEL to level a gantry.
    2. Min & Max gantry corners - measure from nozzle at MIN (0,0) and
    3. MAX (250, 250), (300,300), or (350,350) depending on your printer size
    4. to respective belt positions
  1. --------------------------------------------------------------------
    1. Gantry Corners for 250mm Build
    2. Uncomment for 250mm build
  2. gantry_corners:
  3. -60,-10
  4. 310, 320
  5. points:
  6. 50,25
  7. 50,175
  8. 200,175
  9. 200,25
    1. Gantry Corners for 300mm Build
    2. Uncomment for 300mm build

gantry_corners: -60,-10 360,370 points: 50,25 50,225 250,225 250,25

    1. Gantry Corners for 350mm Build
    2. Uncomment for 350mm build
  1. gantry_corners:
  2. -60,-10
  3. 410,420
    1. Probe points
  4. points:
  5. 50,25
  6. 50,275
  7. 300,275
  8. 300,25
  1. --------------------------------------------------------------------

speed: 150 horizontal_move_z: 10 retries: 5 retry_tolerance: 0.009 max_adjust: 10

  1. Displays
  1. --------------------------------------------------------------------

[display]

  1. mini12864 LCD Display

lcd_type: uc1701 cs_pin: PC11 a0_pin: PD2 rst_pin: PC10 encoder_pins: ^PC6,^PC7 click_pin: ^!PA8 contrast: 63

  1. spi_bus: spi1

spi_software_mosi_pin: PA7 spi_software_miso_pin: PA6 spi_software_sclk_pin: PA5

[neopixel fysetc_mini12864]

  1. To control Neopixel RGB in mini12864 display

pin: PC12 chain_count: 3 initial_RED: 0.1 initial_GREEN: 0.5 initial_BLUE: 0.0 color_order: RGB

  1. Set RGB values on boot up for each Neopixel.
  2. Index 1 = display, Index 2 and 3 = Knob

[delayed_gcode setdisplayneopixel] initial_duration: 1 gcode:

       SET_LED LED=fysetc_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0
       SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0
       SET_LED LED=fysetc_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 
  1. --------------------------------------------------------------------
  1. Macros

[verify_heater extruder]

  1. max_error: 120
  2. The maximum "cumulative temperature error" before raising an
  3. error. Smaller values result in stricter checking and larger
  4. values allow for more time before an error is reported.
  5. Specifically, the temperature is inspected once a second and if it
  6. is close to the target temperature then an internal "error
  7. counter" is reset; otherwise, if the temperature is below the
  8. target range then the counter is increased by the amount the
  9. reported temperature differs from that range. Should the counter
  10. exceed this "max_error" then an error is raised. The default is
  11. 120.
  12. check_gain_time: 40
  13. This controls heater verification during initial heating. Smaller
  14. values result in stricter checking and larger values allow for
  15. more time before an error is reported. Specifically, during
  16. initial heating, as long as the heater increases in temperature
  17. within this time frame (specified in seconds) then the internal
  18. "error counter" is reset. The default is 20 seconds for extruders
  19. and 60 seconds for heater_bed.
  20. hysteresis: 5
  21. The maximum temperature difference (in Celsius) to a target
  22. temperature that is considered in range of the target. This
  23. controls the max_error range check. It is rare to customize this
  24. value. The default is 5.
  25. heating_gain: 2
  26. The minimum temperature (in Celsius) that the heater must increase
  27. by during the check_gain_time check. It is rare to customize this
  28. value. The default is 2.


  1. Macros

[gcode_macro G32] gcode:

   BED_MESH_CLEAR
   G28
   QUAD_GANTRY_LEVEL
   G28
   ##	Uncomment for for your size printer:
   #--------------------------------------------------------------------
   ##	Uncomment for 250mm build
   #G0 X125 Y125 Z30 F3600
   
   ##	Uncomment for 300 build
   CENTER
   
   ##	Uncomment for 350mm build
   #G0 X175 Y175 Z30 F3600
   #--------------------------------------------------------------------



[gcode_macro _PRINT_START]

  1. Use PRINT_START for the slicer starting script - please customise for your slicer of choice

gcode:

   {% set BED_TEMP = params.BED|default(70)|float %}
   {% set EXTRUDER_TEMP = params.EXTRUDER|default(220)|float %}
   CASELIGHT_ON
   M104 S{EXTRUDER_TEMP}
   M140 S{BED_TEMP}
   G32                            ; home all axes   
   M109 S{EXTRUDER_TEMP}
   M190 S{BED_TEMP}
   
   _PRIME_LINE

[gcode_macro _PRINT_END]

  1. Use PRINT_END for the slicer ending script - please customise for your slicer of choice

gcode:

   M400                           ; wait for buffer to clear
   G92 E0                         ; zero the extruder
   G1 E-1.0 F3600                 ; retract filament
   G91                            ; relative positioning
   G0 Z1.00 X20.0 Y20.0 F20000    ; move nozzle to remove stringing
   TURN_OFF_HEATERS
   M107                           ; turn off fan
   G1 Z2 F3000                    ; move nozzle up 2mm
   G90                            ; absolute positioning
   G0  X150 Y300 F3600            ; park nozzle at rear
   CASELIGHT_OFF
   #BED_MESH_CLEAR

[gcode_macro CENTER]

  1. Use PRINT_END for the slicer ending script - please customise for your slicer of choice

gcode:

   G0 X150 Y150 Z50 F5000

[gcode_macro _PRIME_LINE] gcode:

   M117 Prime Line
   G92 E0 ;Reset Extruder
   # move z axis 
   G1 Z2.0 F3000 ;Move Z Axis up
   # move to prime position 
   G1 X20 Y20 Z0.28 F5000.0 ;Move to start position
   G1 X20 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line
   G1 X22 Y200.0 Z0.28 F5000.0 ;Move to side a little
   G1 X22 Y40 Z0.28 F1500.0 E30 ;Draw the second line
   G92 E0 ;Reset Extruder
   G1 Z2.0 F3000 ;Move Z Axis up

[gcode_macro UNLOAD] gcode:

 G28
 CENTER
 M109 S220 T0 ## heat extruder and wait
 M83
 G1 E-50 F300
 G1 E-50 F300
 TURN_OFF_HEATERS
 G92 E0 ;Reset Extruder
  1. Filament change

[gcode_macro M600] gcode:

   PAUSE_MACRO
   UNLOAD

[gcode_macro CASELIGHT_OFF] gcode =

 _LIGHTS R=0 G=0 B=0
 {action_respond_info("Caselight off")}


[gcode_macro CASELIGHT_ON] gcode =

 _LIGHTS  R=1 G=1 B=0.5
 {action_respond_info("Caselight on")}

[gcode_macro CASELIGHT_DIM] gcode =

 _LIGHTS  R=0.25 G=0.25 B=0.1
 {action_respond_info("Caselight 50%")}

[gcode_macro _LIGHTS] gcode:

   #	Index 1 = display, Index 2 and 3 = Knob
   {% set R = params.R|default(1) %}
   {% set G = params.R|default(1) %}
   {% set B= params.R|default(1) %}
   SET_LED LED=caselight RED={R} GREEN={G} BLUE={B}
   SET_LED LED=fysetc_mini12864 RED=0 GREEN=0 BLUE=0 INDEX=1 TRANSMIT=0
   SET_LED LED=fysetc_mini12864 RED={R} GREEN={G} BLUE={B} INDEX=2 TRANSMIT=0
   SET_LED LED=fysetc_mini12864 RED={R} GREEN={G} BLUE={B} INDEX=3 


  1. Display Menu definition #

[menu __main __control __caselightonoff] type: input enable: {'output_pin caselight' in printer} name: Lights: {'ON ' if menu.input else 'OFF'} input: {printer['output_pin caselight'].value} input_min: 0 input_max: 1 input_step: 1 gcode:

   {% if menu.input %}
     _CASELIGHT_ON
   {% else %}
     _CASELIGHT_OFF
   {% endif %}
    1. Thermistor Types
    2. "EPCOS 100K B57560G104F"
    3. "ATC Semitec 104GT-2"
    4. "NTC 100K beta 3950"
    5. "Honeywell 100K 135-104LAG-J01"
    6. "NTC 100K MGB18-104F39050L32" (Keenovo Heater Pad)
    7. "AD595"
    8. "PT100 INA826"
      1. <---------------------- SAVE_CONFIG ---------------------->
      2. DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
      3. [heater_bed]
      4. control = pid
      5. pid_kp = 36.483
      6. pid_ki = 1.871
      7. pid_kd = 177.854
      8. [stepper_z]
      9. position_endstop = 1.180
      10. [extruder]
      11. control = pid
      12. pid_kp = 26.692
      13. pid_ki = 1.648
      14. pid_kd = 108.103
      15. [probe]
      16. z_offset = 0