
# This file contains common pin mappings for the BigTreeTech Octopus V1.
# To use this config, the firmware should be compiled for the STM32F446 with a "32KiB bootloader"
# Enable "extra low-level configuration options" and select the "12MHz crystal" as clock reference

# after running "make", copy the generated "klipper/out/klipper.bin" file to a
# file named "firmware.bin" on an SD card and then restart the OctoPus with that SD card.

# See docs/Config_Reference.md for a description of parameters.

## Voron Design Trident 250/300/350mm BigTreeTech OctoPus V1 TMC2209 UART config

## *** THINGS TO CHANGE/CHECK: ***
## MCU paths                            [mcu] section
## Thermistor types                     [extruder] and [heater_bed] sections
## Leadscrew Rotation Distance          [stepper_z], [stepper_z1], [stepper_z2]
## Z Endstop Switch location            [safe_z_home] section
## Z Endstop Switch  offset for Z0      [stepper_z] section
## PID tune                             [extruder] and [heater_bed] sections
## Probe pin                            [probe] section
## Fine tune E steps    

## Thermistor Types
##   "EPCOS 100K B57560G104F"
##   "ATC Semitec 104GT-2"
##   "NTC 100K beta 3950"
##   "Honeywell 100K 135-104LAG-J01"
##   "NTC 100K MGB18-104F39050L32"
##   "AD595"
##   "PT100 INA826"
##===================================================================.

[include mainsail.cfg]
#[include flexplate.cfg]

[save_variables]
filename: /home/pi/klipper_config/.variables.stb

[virtual_sdcard]
path: ~/gcode_files

[pause_resume]
[display_status]

[mcu]
###Change to device found by "ls -l /dev/serial/by-id/" with just one this MCU connected to Pi
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_49005A000F51383438343939-if00

[printer]
kinematics: corexy
max_velocity: 300
max_accel: 5000
max_z_velocity: 5 #30
max_z_accel: 50 #350
square_corner_velocity: 5.0  

[bed_mesh]
speed: 75
mesh_min: 15, 25
mesh_max: 232, 230
probe_count: 3,3
mesh_pps: 2,2
algorithm: bicubic
bicubic_tension: .05

[mcu rpi]
serial: /tmp/klipper_host_mcu

#[adxl345]
#cs_pin: rpi:None

#[resonance_tester]
#accel_chip: adxl345
##accel_per_hz: 100  # default is 75
#probe_points:
#    125,125,20  # an example

[adxl345]
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345
#accel_per_hz: 100  # default is 75
probe_points:


#####################################################################
# 	X/Y Stepper Settings
#####################################################################\

##  B Stepper - Left
##  Connected to MOTOR_0
##  Endstop connected to DIAG_0
[stepper_x]
step_pin: PF13
dir_pin: PF12
enable_pin: !PF14
microsteps: 16
rotation_distance: 40
#full_steps_per_rotation: 400
endstop_pin: PG6
position_min: 0

position_endstop: 250
position_max: 250

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

[tmc2209 stepper_x]
uart_pin: PC4
run_current: 0.900
hold_current: 0.750
#sense_resistor: 0.110 #not sure if needed
stealthchop_threshold: 250


##  A Stepper - Right
##  Connected to MOTOR_1
##  Endstop connected to DIAG_1
[stepper_y]
step_pin: PG0
dir_pin: PG1
enable_pin: !PF15
microsteps: 16
rotation_distance: 40
#full_steps_per_rotation: 400
endstop_pin: PG9
position_endstop: 258
position_max: 258
homing_speed: 10  #Max 100
homing_retract_dist: 5
homing_positive_dir: true

[tmc2209 stepper_y]
uart_pin: PD11
run_current: 0.900
hold_current: 0.750
#sense_resistor: 0.110
stealthchop_threshold: 250


#####################################################################
# 	Z Stepper Settings
#####################################################################

##  Z0 Stepper - Front Left (M1)
##  Connected to MOTOR_2
##  Endstop connected to DIAG_2
[stepper_z]
step_pin: PF11
dir_pin: !PG3
enable_pin: !PG5
microsteps: 16
##T8x4 Lead Screws.  One rotation moves the bed 4mm 
##Change according to integrated steppers purchased
rotation_distance: 8
#full_steps_per_rotation: 200
endstop_pin: PG10
#  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: 250
position_max: 250
position_min: -2.5
homing_speed: 20

[tmc2209 stepper_z]
uart_pin: PC6
interpolate: False
run_current: 0.650
hold_current: 0.450
#sense_resistor: 0.110
stealthchop_threshold: 30 # old was 30

##  Z1 Stepper - Rear Center (M2)
##  Connected to MOTOR_3
[stepper_z1]
step_pin: PG4
dir_pin: !PC1
enable_pin: !PA0
microsteps: 16
rotation_distance: 8
#full_steps_per_rotation: 200

[tmc2209 stepper_z1]
uart_pin: PC7
interpolate: False
run_current: 0.650
hold_current: 0.450
#sense_resistor: 0.110
stealthchop_threshold: 30 # old was 30

##  Z2 Stepper - Front Right (M3)
##  Connected to MOTOR_4
[stepper_z2]
step_pin: PF9
dir_pin: !PF10
enable_pin: !PG2
microsteps: 16
rotation_distance: 8
#full_steps_per_rotation: 200

[tmc2209 stepper_z2]
uart_pin: PF2
interpolate: False
run_current: 0.650
hold_current: 0.450
#sense_resistor: 0.110
stealthchop_threshold: 30 # old was 30



#####################################################################
#   Extruder
#####################################################################

#   Connected to MOTOR_6
#   Heater - HE0
#   Thermistor - T0
[extruder]
step_pin: PE2
dir_pin: PE3
enable_pin: !PD4
max_extrude_cross_section: 50
max_extrude_only_distance: 700.00
microsteps: 16
# Tune per individual printer
# Default for Bondtech 5mm Bore Drive Gears
#rotation_distance: 22.6789511
#gear_ratio: 50:17
## Bondtech LGX
rotation_distance:  54.45 #55 #for LGX        #for mini AB  21.855 #21.8553543599825 #21.8851878115 #22.6789511 #22.23        # See calibrating rotation_distance on extruders doc
gear_ratio: 45:14, 37:17 #for LGX      # For Mini Afterburner 50:10 
#end LGX
#full_steps_per_rotation: 200
nozzle_diameter: 0.400
filament_diameter: 1.750
pressure_advance: 0.67
pressure_advance_smooth_time: 0.040
heater_pin: PA2
##	Validate the following thermistor type to make sure it is correct
sensor_type: Generic 3950
sensor_pin: PF4
min_extrude_temp: 0
min_temp: 0
max_temp: 300
#control = pid
#pid_kp = 26.213
#pid_ki = 1.304
#pid_kd = 131.721
#Set appropriate once tuning your printer
#pressure_advance: .05
##	Default is 0.040, leave stock
pressure_advance_smooth_time: 0.040

[tmc2209 extruder]
uart_pin: PE1
run_current: 0.5
hold_current: 0.4
#sense_resistor: 0.110
stealthchop_threshold: 30

#####################################################################
# 	Bed Heater
#####################################################################   
[heater_bed]
heater_pin: PA1
##  Choose the correct thermistor for your heater
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PF3
##	Adjust Max Power so your heater doesn't warp your bed
max_power: 1
min_temp: 0
max_temp: 120
control: pid
pid_kp: 58.437
pid_ki: 2.347
pid_kd: 363.769

#####################################################################
# 	Probe
#####################################################################
[probe]
##  Inductive Probe
##  This probe is not used for Z height, only Quad Gantry Leveling

# Select the probe port by type:
## For the PROBE port. Will not work with Diode. May need pull-up resistor from signal to 24V.
# pin: ~!PB7
## For the DIAG_7 port. NEEDS BAT85 DIODE! Change to !PG15 if probe is NO.
pin: PG15
## For Octopus Pro Probe port; NPN and PNP proximity switch types can be set by jumper
# pin: ^PC5

x_offset: 0
y_offset: 22.5
z_offset: 0
speed: 30.0 #20.0
samples: 1
samples_result: average
sample_retract_dist: 2.0
samples_tolerance: 0.05
samples_tolerance_retries: 3

#####################################################################
# 	Fan Control
#####################################################################

##  Print Cooling Fan - FAN0
[fan]
pin: PA8
max_power: 1.0
kick_start_time: 0.5

##  Hotend Fan - FAN1
[heater_fan hotend_fan]
pin: PE5
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

#[controller_fan controller_fan]
##  Controller fan - FAN2
#pin: PD12
#kick_start_time: 0.5
#heater: heater_bed

#[heater_fan exhaust_fan]
##  Exhaust fan - FAN3
#pin: PD13
#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 - HE2 Connector (Optional)
#pin: PB10
#pwm:true
#shutdown_value: 0
#value:1
#cycle_time: 0.01

#####################################################################
# 	Homing and Gantry Adjustment Routines
#####################################################################

[idle_timeout]
timeout: 1800

[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 X145 Y256 F3600 
   
   G28 Z
   G0 Z10 F1800
   G0 X125 Y125 F3600
########################################
# EXP1 / EXP2 (display) pins
########################################

[board_pins]
aliases:
    # EXP1 header
    EXP1_1=PE8, EXP1_2=PE7,
    EXP1_3=PE9, EXP1_4=PE10,
    EXP1_5=PE12, EXP1_6=PE13,    # Slot in the socket on this side
    EXP1_7=PE14, EXP1_8=PE15,
    EXP1_9=<GND>, EXP1_10=<5V>,

    # EXP2 header
    EXP2_1=PA6, EXP2_2=PA5,
    EXP2_3=PB1, EXP2_4=PA4,
    EXP2_5=PB2, EXP2_6=PA7,      # Slot in the socket on this side
    EXP2_7=PC15, EXP2_8=<RST>,
    EXP2_9=<GND>, EXP2_10=<5V>

#####################################################################
#   Displays
#####################################################################

##  Uncomment the display that you have
#--------------------------------------------------------------------

#[display]
##  RepRapDiscount 128x64 Full Graphic Smart Controller
#lcd_type: st7920
#cs_pin: EXP1_4
#sclk_pin: EXP1_5
#sid_pin: EXP1_3
#menu_timeout: 40
#encoder_pins: ^EXP2_5, ^EXP2_3
#click_pin: ^!EXP1_2

[output_pin beeper]
pin: EXP1_1

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

[display]
#  mini12864 LCD Display
lcd_type: uc1701
cs_pin: EXP1_3
a0_pin: EXP1_4
rst_pin: EXP1_5
encoder_pins: ^EXP2_5, ^EXP2_3
click_pin: ^!EXP1_2
contrast: 63
spi_software_miso_pin: EXP2_1
spi_software_mosi_pin: EXP2_6
spi_software_sclk_pin: EXP2_2

[neopixel btt_mini12864]
#  To control Neopixel RGB in mini12864 display
pin: EXP1_6
chain_count: 3
initial_RED: 0.0
initial_GREEN: 0.0
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=btt_mini12864 RED=0 GREEN=0.0 BLUE=0.0 INDEX=1 TRANSMIT=0
        SET_LED LED=btt_mini12864 RED=0 GREEN=0.2 BLUE=0.1 INDEX=2 TRANSMIT=0
        SET_LED LED=btt_mini12864 RED=0 GREEN=0.2 BLUE=0.1 INDEX=3 

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


#####################################################################
# 	Macros
#####################################################################

[z_tilt]
##	Use Z_TILT_ADJUST to level the bed .
##	z_positions: Location of toolhead

##--------------------------------------------------------------------
## Uncomment below for 250mm build
z_positions:
	-50, 17  #stepper_z - left front (should be negative)
    125, 295 #stepper_z1 - rear
	300, 16  #stepper_z2 - right front
points:
    30, 5   #10, 19	  # X 30, Y 5 stepper_z Probe position (nozzle coordinates) 
    125, 195 #125, 215  
    220, 5 #238, 19	


speed: 200
horizontal_move_z: 10
retries: 5
retry_tolerance: 0.0075

[gcode_macro PRINT_START]
#   Use PRINT_START for the slicer starting script - PLEASE CUSTOMISE THE SCRIPT
gcode:
    M117 Homing...                 ; display message
    G28 Y0 X0 Z0
    Z_TILT_ADJUST
    G28 Y0 X0 Z0
    
    ##Purge Line Gcode
    #G92 E0;
    #G90
    #G0 X5 Y5 F6000
    #G0 Z0.4
    #G91
    #G1 X120 E30 F1200;
    #G1 Y1
    #G1 X-120 E30 F1200;
    #G92 E0;
    #G90
    
    G1 Z15.0 F600 ;move the platform down 15mm
    G1 X125 Y125 F3000
    G92 E0 ;zero the extruded length again
    G1 F9000
    M117 Printing...

[gcode_macro PRINT_END]
#   Use PRINT_END for the slicer ending script
gcode:
    #   Get Boundaries
    {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
    {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
    {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %}
    
    #   Check end position to determine safe directions to move
    {% if printer.toolhead.position.x < (max_x - 20) %}
        {% set x_safe = 20.0 %}
    {% else %}
        {% set x_safe = -20.0 %}
    {% endif %}

    {% if printer.toolhead.position.y < (max_y - 20) %}
        {% set y_safe = 20.0 %}
    {% else %}
        {% set y_safe = -20.0 %}
    {% endif %}

    {% if printer.toolhead.position.z < (max_z - 2) %}
        {% set z_safe = 2.0 %}
    {% else %}
        {% set z_safe = max_z - printer.toolhead.position.z %}
    {% endif %}
    
    #  Commence PRINT_END
    M400                             ; wait for buffer to clear
    G92 E0                           ; zero the extruder
    G1 E-4.0 F3600                   ; retract
    G91                              ; relative positioning
    G0 Z{z_safe} F3600               ; move nozzle up
    G0 X{x_safe} Y{y_safe} F20000    ; move nozzle to remove stringing
    
    M104 S0                          ; turn off hotend
    M140 S0                          ; turn off bed
    M106 S0                          ; turn off fan
    G90                              ; absolute positioning
    G0 X{max_x / 2} Y{max_y} F3600   ; park nozzle at rear
    M117 Finished!

[gcode_macro Motors_OFF]
gcode:
      M84

# Additional Thermistors

[temperature_sensor raspberry_pi]
sensor_type: temperature_host
min_temp: 10
max_temp: 100

#[temperature_sensor SKR_1.4]
#sensor_type: temperature_mcu
#min_temp: 10
#max_temp: 100

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	0.008753, -0.016247, 0.003753
#*# 	0.003753, -0.001247, 0.006253
#*# 	-0.011247, 0.003753, -0.008747
#*# tension = 0.05
#*# min_x = 15.0
#*# algo = bicubic
#*# y_count = 3
#*# mesh_y_pps = 2
#*# min_y = 25.0
#*# x_count = 3
#*# max_y = 230.0
#*# mesh_x_pps = 2
#*# max_x = 232.0
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 30.890
#*# pid_ki = 2.039
#*# pid_kd = 116.996
#*#
#*#
#*# [stepper_z]
#*# position_endstop = 0.600
