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:
- Install jumper on BT0 pins and power on
- Launch STM32CubeProgrammer, select USB, and Connect
- Click the Erasing and Programming tab, and then:
- Pick the Bootloader_FYSETC_SPIDER.hex bootloader from the FYSETC Spider GitHub Repo
- Select Verify programming and Full Chip Erase
- Click Start Programm..
- Next install the firmware (previously compiled)
- Uncheck the Full chip erase checkbox
- Choose the firmware. After compiling, it can generally be found in the <<install path>>firmware/Marlin/.pio/build/FYSETC_S6_8000
- 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
- Click Start Programm... to write the firmware
- 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]
- This file contains common pin mappings for the Fysetc Spider board.
- To use this config, the firmware should be compiled for the STM32F446.
- When calling "menuconfig", enable "extra low-level configuration setup"
- and select the "12MHz crystal" as clock reference
- For flashing, write the compiled klipper.bin to memory location 0x08000000
- See docs/Config_Reference.md for a description of parameters.
- Voron Design VORON2 250/300/350mm Spider TMC2209 UART config
- *** THINGS TO CHANGE/CHECK: ***
- MCU paths [mcu] section
- Thermistor types [extruder] and [heater_bed] sections - See 'sensor types' list at end of file
- Z Endstop Switch location [safe_z_home] section
- Homing end position [gcode_macro G32] section
- Z Endstop Switch offset for Z0 [stepper_z] section
- Probe points [quad_gantry_level] section
- Min & Max gantry corner postions [quad_gantry_level] section
- PID tune [extruder] and [heater_bed] sections
- Fine tune E steps [extruder] section
[mcu]
- Uncomment below if you're using the Raspberry uart0 to communicate with Spider
- restart_method: command
- You need to select 'Communication interface' to USB in 'make menuconfig'
- when you compile Klipper for Spider
- Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify
- --------------------------------------------------------------------
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_1E0048001050563046363120-if00
- If you want to use the Raspberry uart0 to communicate with Spider,
- you need to select 'Communication interface' to 'Serial (on USART1 PA10/PA9)'
- in 'make menuconfig' when you compile klipper and set the serial as below
- --------------------------------------------------------------------
- serial: /dev/ttyAMA0
- --------------------------------------------------------------------
[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
- X/Y Stepper Settings
[stepper_x]
- 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
- --------------------------------------------------------------------
- Uncomment below for 225050mm build
- position_endstop: 250
- position_max: 250
- Uncomment for 300mm build
position_endstop: 300 position_max: 300
- Uncomment for 350mm build
- position_endstop: 350
- position_max: 350
- --------------------------------------------------------------------
homing_speed: 50 #Max 100 homing_retract_dist: 5 homing_positive_dir: true
- 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]
- 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
- --------------------------------------------------------------------
- Uncomment for 250mm build
- position_endstop: 250
- position_max: 250
- Uncomment for 300mm build
position_endstop: 300 position_max: 300
- Uncomment for 350mm build
- position_endstop: 350
- position_max: 350
- --------------------------------------------------------------------
homing_speed: 50 #Max 100 homing_retract_dist: 5 homing_positive_dir: true
- 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
- Z Stepper Settings
- In Z-MOT Position
- Z0 Stepper - Front Left
[stepper_z] step_pin: PD14 dir_pin: PD13 enable_pin: !PD15 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16
- In Z- Position
endstop_pin: ^PA0
- Z-position of nozzle (in mm) to z-endstop trigger point relative to print surface (Z0)
- (+) value = endstop above Z0, (-) value = endstop below
- Increasing position_endstop brings nozzle closer to the bed
- After you run Z_ENDSTOP_CALIBRATE, position_endstop will be stored at the very end of your config
- position_endstop: -0.5
- --------------------------------------------------------------------
- Uncomment below for 250mm build
position_max: 170
- Uncomment below for 300mm build
- position_max: 290
- Uncomment below for 350mm build
- position_max: 340
- --------------------------------------------------------------------
position_min: -5 homing_speed: 10 second_homing_speed: 3 homing_retract_dist: 3
- 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
- In E1-MOT Position
- Z1 Stepper - Rear Left
[stepper_z1] step_pin: PE6 dir_pin: !PC13 enable_pin: !PE5 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16
- 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
- In E2-MOT Position
- Z2 Stepper - Rear Right
[stepper_z2] step_pin: PE2 dir_pin: PE4 enable_pin: !PE3 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16
- 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
- In E3-MOT Position
- 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
- Extruder
- In E0-MOT Position
[extruder] step_pin: PD5 dir_pin: !PD6 enable_pin: !PD4
- Update value below when you perform extruder calibration
- If you ask for 100mm of filament, but in reality it is 98mm:
- rotation_distance = <previous_rotation_distance> * <actual_extrude_distance> / 100
- 22.6789511 is a good starting point
rotation_distance: 22.5078095278 #Bondtech 5mm Drive Gears
- Update Gear Ratio depending on your Extruder Type
- Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio)
- 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
- In E0 OUT Position
heater_pin: PB15
- 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
- control = pid
- pid_kp = 26.213
- pid_ki = 1.304
- pid_kd = 131.721
- Try to keep pressure_advance below 1.0
pressure_advance: 0.05
- Default is 0.040, leave stock
pressure_advance_smooth_time: 0.040
- In E0-MOT Position
- 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
- Bed Heater
[heater_bed]
- SSR Pin - In BED OUT position
heater_pin: PB4 sensor_type: NTC 100K beta 3950 sensor_pin: PC3 # TB Position
- Adjust Max Power so your heater doesn't warp your bed
max_power: 0.6 min_temp: 0 max_temp: 120
- control: pid
- pid_kp: 58.437
- pid_ki: 2.347
- pid_kd: 363.769
- Probe
[probe]
- Inductive Probe - If you use this section , please comment the [bltouch] section
- This probe is not used for Z height, only Quad Gantry Leveling
- In Z+ position
- If your probe is NC instead of NO, add change pin to ^PA3
pin: ^PA3 x_offset: 0 y_offset: 25.0
- z_offset: 0
speed: 20.0 samples: 2 samples_result: median sample_retract_dist: 3.0 samples_tolerance: 0.01 samples_tolerance_retries: 4
- Bltouch
- [bltouch]
- Bltouch - If you use this section , please comment the [probe] section
- More infomation at : https://www.klipper3d.org/BLTouch.html
- This bltouch is not used for Z height, only Quad Gantry Leveling
- In Z+ Position
- sensor_pin: PA0
- In Y+ Position
- control_pin: PA2
- x_offset: 0
- y_offset: 25.0
- z_offset: 0
- speed: 10.0
- samples: 3
- samples_result: median
- sample_retract_dist: 3.0
- samples_tolerance: 0.006
- samples_tolerance_retries: 3
- Fan Control
[heater_fan hotend_fan]
- Hotend Fan - FAN0 Connector
pin: PB0 max_power: 1.0 kick_start_time: 0.5 heater: extruder heater_temp: 50.0
- If you are experiencing back flow, you can reduce fan_speed
- fan_speed: 1.0
[fan]
- Print Cooling Fan - FAN1 Connector
pin: PB1 max_power: 0.4 kick_start_time: 0.5
- Depending on your fan, you may need to increase this value
- if your fan will not start. Can change cycle_time (increase)
- if your fan is not able to slow down effectively
off_below: 0.10
[heater_fan controller_fan]
- Controller fan - FAN2 Connector
pin: PB2 kick_start_time: 0.5 heater: heater_bed heater_temp: 45.0 fan_speed: .3
- [heater_fan exhaust_fan]
- Exhaust fan - In E2 OUT Positon
- pin: PB3
- max_power: 1.0
- shutdown_speed: 0.0
- kick_start_time: 5.0
- heater: heater_bed
- heater_temp: 60
- fan_speed: 1.0
- LED Control
- Chamber Lighting - In 5V-RGB Position
- [neopixel caselight ]
- pin: PD3
- chain_count: 15
- color_order: RGB
- initial_RED: 1.0
- initial_GREEN: 1.0
- initial_BLUE: 1.0
[neopixel caselight] pin: PD3 chain_count: 35 color_order: RGB initial_RED: 1 initial_GREEN: 1 initial_BLUE: .5
- [output_pin caselight ]
- Chamber Lighting - In 5V-RGB Position
- pin: PD3
- pwm: true
- shutdown_value: 0
- value: 1.0
- cycle_time: 0.01
- Homing and Gantry Adjustment Routines
[idle_timeout] timeout: 1800
[safe_z_home]
- XY Location of the Z Endstop Switch
- Update -10,-10 to the XY coordinates of your endstop pin
- (such as 157,305) after going through Z Endstop Pin
- Location Definition step.
home_xy_position:205,300 speed:100 z_hop:10
[quad_gantry_level]
- Use QUAD_GANTRY_LEVEL to level a gantry.
- Min & Max gantry corners - measure from nozzle at MIN (0,0) and
- MAX (250, 250), (300,300), or (350,350) depending on your printer size
- to respective belt positions
- --------------------------------------------------------------------
- Gantry Corners for 250mm Build
- Uncomment for 250mm build
- gantry_corners:
- -60,-10
- 310, 320
- points:
- 50,25
- 50,175
- 200,175
- 200,25
- Gantry Corners for 300mm Build
- Uncomment for 300mm build
gantry_corners: -60,-10 360,370 points: 50,25 50,225 250,225 250,25
- Gantry Corners for 350mm Build
- Uncomment for 350mm build
- gantry_corners:
- -60,-10
- 410,420
- Probe points
- points:
- 50,25
- 50,275
- 300,275
- 300,25
- --------------------------------------------------------------------
speed: 150 horizontal_move_z: 10 retries: 5 retry_tolerance: 0.009 max_adjust: 10
- Displays
- --------------------------------------------------------------------
[display]
- mini12864 LCD Display
lcd_type: uc1701 cs_pin: PC11 a0_pin: PD2 rst_pin: PC10 encoder_pins: ^PC6,^PC7 click_pin: ^!PA8 contrast: 63
- spi_bus: spi1
spi_software_mosi_pin: PA7 spi_software_miso_pin: PA6 spi_software_sclk_pin: PA5
[neopixel fysetc_mini12864]
- 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
- Set RGB values on boot up for each Neopixel.
- 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
- --------------------------------------------------------------------
- Macros
[verify_heater extruder]
- max_error: 120
- The maximum "cumulative temperature error" before raising an
- error. Smaller values result in stricter checking and larger
- values allow for more time before an error is reported.
- Specifically, the temperature is inspected once a second and if it
- is close to the target temperature then an internal "error
- counter" is reset; otherwise, if the temperature is below the
- target range then the counter is increased by the amount the
- reported temperature differs from that range. Should the counter
- exceed this "max_error" then an error is raised. The default is
- 120.
- check_gain_time: 40
- This controls heater verification during initial heating. Smaller
- values result in stricter checking and larger values allow for
- more time before an error is reported. Specifically, during
- initial heating, as long as the heater increases in temperature
- within this time frame (specified in seconds) then the internal
- "error counter" is reset. The default is 20 seconds for extruders
- and 60 seconds for heater_bed.
- hysteresis: 5
- The maximum temperature difference (in Celsius) to a target
- temperature that is considered in range of the target. This
- controls the max_error range check. It is rare to customize this
- value. The default is 5.
- heating_gain: 2
- The minimum temperature (in Celsius) that the heater must increase
- by during the check_gain_time check. It is rare to customize this
- value. The default is 2.
- 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]
- 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]
- 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]
- 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
- 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
- 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 %}
- Thermistor Types
- "EPCOS 100K B57560G104F"
- "ATC Semitec 104GT-2"
- "NTC 100K beta 3950"
- "Honeywell 100K 135-104LAG-J01"
- "NTC 100K MGB18-104F39050L32" (Keenovo Heater Pad)
- "AD595"
- "PT100 INA826"
- <---------------------- SAVE_CONFIG ---------------------->
- DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
- [heater_bed]
- control = pid
- pid_kp = 36.483
- pid_ki = 1.871
- pid_kd = 177.854
- [stepper_z]
- position_endstop = 1.180
- [extruder]
- control = pid
- pid_kp = 26.692
- pid_ki = 1.648
- pid_kd = 108.103
- [probe]
- z_offset = 0