# 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

# For klicky probe and klipper z calibration
#[include klicky-probe.cfg]
#[include z_calibration.cfg]

[mcu]
##  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_230032000851363131363530-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/serial/by-id/usb-Klipper_stm32f446xx_2A005A001051383039343538-if00
##--------------------------------------------------------------------

## Uncomment below if you're using the Raspberry uart0 to communicate with Spider
#restart_method: command

[printer]
kinematics: corexy
max_velocity: 300  
max_accel: 3000			        #Max 4000
max_z_velocity: 15			#Max 15 for 12V TMC Drivers, can increase for 24V
max_z_accel: 350
square_corner_velocity: 5.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: ^PA1 # X-MAX
position_min: 0

##--------------------------------------------------------------------

##	Uncomment below 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: 25   #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: 1.0
hold_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 0

#    Make sure to update below for your relevant driver (5160)
#[tmc5160 stepper_x] 
#spi_bus: spi4 
#cs_pin: PE7 
#interpolate: True
#diag1_pin: PB14 
#run_current: 0.800 
#hold_current: 0.500
##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: ^PA2 # Y-MAX
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: 25  #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: 1.0
hold_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 0

#       Make sure to update below for your relevant driver (5160)
#[tmc5160 stepper_y] 
#spi_bus: spi4 
#cs_pin: PE15
##diag1_pin: PB13
#interpolate: True 
#run_current: 0.8
#hold_current: 0.7
##stealthchop_threshold: 0

## In E3-MOT Position
## Z0 Stepper - Z Left Motor
[stepper_z]
step_pin: PD12
dir_pin: !PC4
enable_pin: !PE8
##T8x4 Lead Screws.  One rotation moves the bed 4mm 
##Change according to integrated steppers purchased
rotation_distance: 4
full_steps_per_rotation: 200
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
## All builds use same Max Z
position_max: 125

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

##	Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z]
uart_pin: PA15
uart_address: 0
interpolate: True
run_current: 1.2
hold_current: 1.0
sense_resistor: 0.110
stealthchop_threshold: 0

##	In E2-MOT Position
##	Z1 Stepper - Z Rear Motor
[stepper_z1]
step_pin: PE2
dir_pin: !PE4
enable_pin: !PE3
rotation_distance: 4
full_steps_per_rotation: 200
microsteps: 16

##	Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z1]
uart_pin: PC14
interpolate: True
run_current: 1.2
hold_current: 1.0
sense_resistor: 0.110
stealthchop_threshold: 0

##	In E1-MOT Position
##	Z2 Stepper - Z Right Motor
[stepper_z2]
step_pin: PE6
dir_pin: !PC13
enable_pin: !PE5
rotation_distance: 4
full_steps_per_rotation: 200
microsteps: 16

##	Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z2]
uart_pin: PC15
interpolate: true
run_current: 1.2
hold_current: 1.0
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.6789511	#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
min_temp: -100
max_temp: 270
max_power: 1.0
min_extrude_temp: 170
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.3
sense_resistor: 0.110
stealthchop_threshold: 0

#####################################################################
#   Bed Heater
#####################################################################
[heater_bed]
##	SSR Pin - In BED OUT position
heater_pin: PB4
sensor_type: NTC 100K MGB18-104F39050L32
#sensor_pin: PC3 # Spider v1.x
sensor_pin: PB0 # Spider v2.x
##	Adjust Max Power so your heater doesn't warp your bed
max_power: 0.6
min_temp: -100
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 NO instead of NC, add change pin to ^PA3
pin: ^PA3
x_offset: 0
y_offset: 25.0
z_offset: 0
speed: 10.0
samples: 3
samples_result: median
sample_retract_dist: 5.0
samples_tolerance: 0.01 #0.006
samples_tolerance_retries: 3


#####################################################################
#       Klicky Probe
#####################################################################
#[probe]
## In Y- Position
#pin: ^PB13
#x_offset: 0
#y_offset: 19.75
#z_offset: 6.42
#speed: 5
#samples:3 
#samples_result: median
#sample_retract_dist: 2.0
#samples_tolerance: 0.01
#samples_tolerance_retries: 3


#####################################################################
#	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: PA3
##	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 # Spider v1.x
pin: PA13 # Spider v2.x
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 # Spider v1.x
pin: PA14 # Spider v2.x
max_power: 1.0
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

[controller_fan tmc_fan]
##	Controller fan
#pin: PB2 # FAN2 Connector
pin: PC8 # E1 Out
kick_start_time: 0.5
#heater: heater_bed
#heater_temp: 45.0

#[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
#####################################################################

#[output_pin caselight ]
##  Chamber Lighting - In 5V-RGB Position
#pin: PD3
#pwm: true
#shutdown_value: 0
#value:100
#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.
#       FYSETC 350 kit example pos: 260,346 
# want 196, 333
#       FYSETC 300 kit example pos: 174,274
home_xy_position:196,333
speed:10
z_hop:5
z_hop_speed:5

#[homing_override]
#axes: z
#set_position_z: 0
#gcode:
#   G90
#   G0 Z5 F600
#   G28 X Y
#   ##   XY Location of the Z Endstop Switch
#   ##   Update X and Y to your values (such as X157, Y305) after going through
#   ##   Z Endstop Pin Location Definition step.
#   G0 X170 Y274 F3600
#
#   G28 Z
#   G0 Z10 F1800
#
#   ##   Uncomment for for your size printer:
#   ##   Rough measurement is the middle of your bed.
##--------------------------------------------------------------------
#   ##   Uncomment for 250mm build
#   #G0 X125 Y125 Z30 F3600
#
#   ##   Uncomment for 300 build
#   G0 X150 Y150 Z30 F3600
#
#   ##   Uncomment for 350 build
#   #G0 X175 Y175 Z30 F3600
##-------------------------------------------------------------------
   
[z_tilt]
##	Use Z_TILT_ADJUST to level the bed .
##	z_positions: Location of toolhead

##--------------------------------------------------------------------
## Uncomment below for 250mm build
#z_positions:
#	-46, 20
#	125, 313
#	296, 20
#points:
#	30, 5
#	125, 195
#	220, 5

## Uncomment below for 300mm build
#z_positions:
#	-46, 20
#	150, 338
#	346, 20
#points:
#	30, 5
#	150, 245
#	270, 5

# Uncomment below for 350mm build
z_positions:
	-46, 20
	175, 363
	396, 20
points:
	30, 5
	175, 295
	320, 5

#--------------------------------------------------------------------
speed: 100
horizontal_move_z: 10
retries: 5
retry_tolerance: 0.01# 0.0075

[bed_mesh]
speed: 120
horizontal_move_z: 10
## Uncomment below for 300mm build
#mesh_min: 35,26
#mesh_max: 270, 258

## Uncomment below for 350mm build
mesh_min: 35,26
mesh_max: 320, 308

probe_count: 6,6
relative_reference_index: 24
algorithm: bicubic

#####################################################################
#	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
#chain_count: 60
#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=0 BLUE=0 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
#####################################################################
[delayed_gcode clearBed]
initial_duration: 1
gcode:
       BED_MESH_CLEAR


[gcode_macro PRINT_START]
#   Use PRINT_START for the slicer starting script - please customise for your slicer of choice
gcode:
    G28                            ; home all axes
    # Uncomment for klicky probe
    #ATTACH_PROBE_LOCK
    Z_TILT_ADJUST
    G28 Z
    BED_MESH_PROFILE LOAD=default
    #BED_MESH_CALIBRATE
    # Uncomment below two lines for klicky probe
    #CALIBRATE_Z
    #DOCK_PROBE_UNLOCK
    G1 X175 Y175 Z20 F3000                   ; move nozzle away from bed 

[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-10.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  X125 Y250 F3600            ; park nozzle at rear
    BED_MESH_CLEAR

#[gcode_macro CANCEL_PRINT]
#description: Cancel the actual running print
#rename_existing: CANCEL_PRINT_BASE
#gcode:
#  TURN_OFF_HEATERS
#  CANCEL_PRINT_BASE
    
## 	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.
#*#
#*#
#*# [stepper_z]
#*# position_endstop = 0
