[include shell_command.cfg]
# 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 - See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types
## 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
## e pin                                [probe] section
## Fine tune E steps                    [extruder] section

[mcu]
##  Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify
##--------------------------------------------------------------------
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_41004C000A51313133353932-if00
restart_method: command
##--------------------------------------------------------------------

[mcu nhk]
##  Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify
##--------------------------------------------------------------------
serial: /dev/serial/by-id/usb-Klipper_rp2040_4E363334320D3925-if00
restart_method: command
##--------------------------------------------------------------------

[include mainsail.cfg]
[include stealthburner_leds.cfg]
[include case_lights.cfg]
[include print_handling.cfg]
[include nevermore.cfg]
[include Bed_Mesh.cfg]
[include KAMP_Settings.cfg]
[include ./KAMP/Adaptive_Meshing.cfg]       # Include to enable adaptive meshing configuration.
[include ./KAMP/Line_Purge.cfg]             # Include to enable adaptive line purging configuration.
[include ./KAMP/Smart_Park.cfg]             # Include to enable the Smart Park function, which parks the printhead near the print area for final heating.
[include custom_macros.cfg]
[include purge.cfg]
[include IS_shaper_calibrate.cfg]
[include timelapse.cfg]
[include shell_command.cfg]

[include klicky-probe.cfg]

[exclude_object]
[gcode_arcs]
resolution: 0.1

[printer]
kinematics: corexy
max_velocity: 300  
max_accel: 6000             #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
#####################################################################

##  B Stepper - Left
##  Connected to MOTOR_0
##  Endstop connected to DIAG_0
[stepper_x]
step_pin: PF13
dir_pin: PF12
enable_pin: !PF14
rotation_distance: 40
microsteps: 32
full_steps_per_rotation:200  #set to 400 for 0.9 degree stepper
endstop_pin: nhk:gpio13
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: PC4
interpolate: False
run_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 0

##  A Stepper - Right
##  Connected to MOTOR_1
##  Endstop connected to DIAG_1
[stepper_y]
step_pin: PG0
dir_pin: PG1
enable_pin: !PF15
rotation_distance: 40
microsteps: 32
full_steps_per_rotation:200  #set to 400 for 0.9 degree stepper
endstop_pin: PG6
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: PD11
interpolate: False
run_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 0
 
#####################################################################
#   Z Stepper Settings
#####################################################################

##  Z0 Stepper - Front Left
##  Connected to MOTOR_2
##  Endstop connected to DIAG_2
[stepper_z]
step_pin: PF11
dir_pin: PG3
enable_pin: !PG5
# Rotation Distance for TR8x8 = 8, TR8x4 = 4, TR8x2 = 2
rotation_distance: 4    
microsteps: 32
endstop_pin: probe:z_virtual_endstop
##  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_min: -8
homing_speed: 8.0 # Leadscrews are slower than 2.4, 10 is a recommended max.
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: PC6
interpolate: False
run_current: 0.6
sense_resistor: 0.110
stealthchop_threshold: 0

##  Z1 Stepper - Rear Center
##  Connected to MOTOR_3
[stepper_z1]
step_pin: PG4
dir_pin: PC1
enable_pin: !PA0
# Rotation Distance for TR8x8 = 8, TR8x4 = 4, TR8x2 = 2
rotation_distance: 4  
microsteps: 32

##  Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z1]
uart_pin: PC7
interpolate: False
run_current: 0.6
sense_resistor: 0.110
stealthchop_threshold: 0

##  Z2 Stepper - Front Right
##  Connected to MOTOR_4
[stepper_z2]
step_pin: PF9
dir_pin: PF10
enable_pin: !PG2
# Rotation Distance for TR8x8 = 8, TR8x4 = 4, TR8x2 = 2
rotation_distance: 4  
microsteps: 32

##  Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z2]
uart_pin: PF2
interpolate: False
run_current: 0.6
sense_resistor: 0.110
stealthchop_threshold: 0


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

#   Connected to MOTOR_6
#   Heater - HE0
#   Thermistor - T0
[extruder]
step_pin: nhk:gpio23
dir_pin: !nhk:gpio24
enable_pin: !nhk:gpio25
##  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: 23.2556 #22.6789511   #Bondtech 5mm Drive Gears old: 13.056242
max_extrude_only_distance: 101
##  Update Gear Ratio depending on your Extruder Type
##  Use 50:10 for Stealthburner/Clockwork 2
##  Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio)
##  Use 80:20 for M4, M3.1
gear_ratio: 50:10               #BMG Gear Ratio
microsteps: 32
full_steps_per_rotation: 200    #200 for 1.8 degree, 400 for 0.9 degree
nozzle_diameter: 0.400
filament_diameter: 1.75
heater_pin: nhk:gpio9 
## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types.
## Use "Generic 3950" for NTC 100k 3950 thermistors
sensor_type: ATC Semitec 104NT-4-R025H42G 
sensor_pin: nhk:gpio29
pullup_resistor: 2200
min_temp: 10
max_temp: 280
max_power: 1.0
min_extrude_temp: 10 # change back to 170
max_extrude_cross_section: 5
#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.0355
#  Default is 0.040, leave stock
pressure_advance_smooth_time: 0.040

##  E0 on MOTOR6
##  Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 extruder]
uart_pin: nhk:gpio0
#tx_pin: nhk:gpio1
interpolate: false
run_current: 0.5
sense_resistor: 0.110 #previously 0.110
stealthchop_threshold: 0


#####################################################################
#   Bed Heater
#####################################################################

[heater_bed]
##  SSR Pin - HE1
##  Thermistor - TB
heater_pin: PA3
## Check what thermistor type you have. See https://www.klipper3d.org/Config_Reference.html#common-thermistors for common thermistor types.
## Use "Generic 3950" for Keenovo heaters
sensor_type: Generic 3950
sensor_pin: PF3
##  Adjust Max Power so your heater doesn't warp your bed. Rule of thumb is 0.4 watts / cm^2 .
max_power: 0.9
min_temp: 0
max_temp: 130
#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: nhk:gpio10
## For Octopus Pro Probe port; NPN and PNP proximity switch types can be set by jumper
#pin: ~!PC5


#------------------------------------------------------------------ This was all voron tap specific

#activate_gcode:
#    {% set PROBE_TEMP = 150 %}
#    {% set MAX_TEMP = PROBE_TEMP + 5 %}
#    {% set ACTUAL_TEMP = printer.extruder.temperature %}
#    {% set TARGET_TEMP = printer.extruder.target %}

#    {% if TARGET_TEMP > PROBE_TEMP %}
#        { action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }
#        M109 S{ PROBE_TEMP }
#    {% else %}
#        # Temperature target is already low enough, but nozzle may still be too hot.
#        {% if ACTUAL_TEMP > MAX_TEMP %}
#            { action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }
#            TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }
#        {% endif %}
#    {% endif %}
    

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

x_offset: 0
y_offset: 0
#z_offset: 0
speed: 10.0
samples: 3
samples_result: median
sample_retract_dist: 3.0
samples_tolerance: 0.05
samples_tolerance_retries: 3

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

[fan]
##  Print Cooling Fan - FAN0
pin: PA8 # Output pin controlling the fan. This parameter must be provided.
max_power: 0.4 
# This should be set to 0.8 on most motherboards to give full range of control to your slicer. 
# Anything above 80% duty cycle will be full power on this particular brushless driver.
# To fine-tune the max_power parameter for your particular motherboard, set max_power to 1.0, go into the Klipper dashboard, and increase fan speed 1% at a time until the actual fan speed stops increasing as you increase the fan speed. Divide the fan speed at this point by 100 and enter it into the max_power parameter.
# This parameter defines the maximum power (expressed as a value from 0.0 to 1.0) that the pin may be set to. 
# The value 1.0 allows the pin to be set fully enabled for extended periods, while a value of 0.5 would allow the pin to be enabled for no more than half the time. 
# This setting may be used to limit the total power output (over extended periods) to the fan. 
# If this value is less than 1.0, then fan speed requests will be scaled between zero and max_power (for example, if max_power is 0.9 and a fan speed of 80% is requested, then the fan power will be set to 72%).
shutdown_speed: 0 
# The desired fan speed (expressed as a value from 0.0 to 1.0) if 
# The microcontroller software enters an error state. 
# The default is 0.
cycle_time: 0.010 #0.005 Example config value 
# The amount of time (in seconds) for each PWM power cycle to the fan. 
# It is recommended this be 10 milliseconds or greater when using software-based PWM. 
# The default is 0.010 seconds.
hardware_pwm: False 
# Enable this to use hardware PWM instead of software PWM. 
# Most fans do not work well with hardware PWM, so it is not recommended to enable this unless there is an electrical requirement to switch at very high speeds. 
# When using hardware PWM, the actual cycle time is constrained by the implementation and may be significantly different than the requested cycle_time. 
# The default is False.
kick_start_time: 0.100 
# Time (in seconds) to run the fan at full speed when either first enabling or increasing it by more than 50% (helps get the fan spinning). 
# The default is 0.100 seconds.
off_below: 0.1 
# The blower will not spin with the included brushless driver when the duty cycle is below 8%. When scaled with Max_power at 0.8, the off_below parameter should be set to 0.1. 
# To calibrate this setting, gradually lower the fan speed to determine the lowest input speed that reliably drives the fan without stalls. 
# Set off_below to the duty cycle corresponding to this value (for example, 8% -> 0.08/Max_power -> 0.08/0.8 -> 0.1) or slightly higher. 
# This parameter is the minimum input speed that will power the fan (expressed as a value from 0.0 to 1.0). 
# When a speed lower than off_below is requested, the fan will instead be turned off. 
# This setting may be used to prevent fan stalls and to ensure effective kick starts. 
# To calibrate this setting, start with off_below set to 0.0 and the fan spinning. 
# Gradually lower the fan speed to determine the lowest input speed that reliably drives the fan without stalls. 
# Set off_below to the duty cycle corresponding to this value (for example, 12% -> 0.12) or slightly higher.
#Tachometer_pin:
# Tachometer input pin for monitoring fan speed. A pullup is generally required. 
# This parameter is optional.
#Tachometer_ppr: 1
# When tachometer_pin is specified, this is the number of pulses per revolution of the tachometer signal.
#Tachometer_poll_interval: 0.0005
# When tachometer_pin is specified, this is the polling period of the tachometer pin, in seconds. 
# The default is 0.0015, which is fast enough for fans below 10,000 RPM at 2 PPR. 
# This must be smaller than 30/(tachometer_ppr*rpm), with some margin, where rpm is the 
# maximum speed (in RPM) of the fan.

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

[multi_pin my_enable_pin]
pins: PD15, PD14

[controller_fan controller_fan]
##  Controller fan - FAN2
pin: multi_pin:my_enable_pin
kick_start_time: 0.5
heater: heater_bed
max_power: 0.5
shutdown_speed: 0

[temperature_sensor chamber]
sensor_type: Generic 3950
sensor_pin: PF5
min_temp: 0
max_temp: 100
gcode_id: C

[heater_fan exhaust_fan]
#  Exhaust fan - FAN3
pin: PD12
max_power: 1.0
shutdown_speed: 0.0
kick_start_time: 5.0
heater: heater_bed
heater_temp: 60
off_below: 0.10

#[fan_generic test_fan]
##  Exhaust fan - FAN3
#pin: PD12
#max_power: 1.0
#shutdown_speed: 0.0
#kick_start_time: 5.0
#off_below: 0.10


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

#[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: 175,175
#speed:100
#z_hop:10

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

##--------------------------------------------------------------------
## Uncomment below for 250mm build
#z_positions:
#    -50, 18
#    125, 298
#    300, 18
#points:
#    30, 5
#    125, 195
#    220, 5

## Uncomment below for 300mm build
#z_positions:
#   -50, 18
#   150, 348
#   350, 18
#points:
#   30, 5
#   150, 245
#   270, 5

## Uncomment below for 350mm build
z_positions:
   -50, 18
   175, 398
   400, 18
points:
   30, 5
   175, 295
   320, 5


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

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

########################################
# 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.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=btt_mini12864 RED=1 GREEN=1 BLUE=1 INDEX=1 TRANSMIT=0
#        SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=2 TRANSMIT=0
#        SET_LED LED=btt_mini12864 RED=1 GREEN=0 BLUE=0 INDEX=3 

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

#####################################################################
#   Accelerometer
#####################################################################
[adxl345]
cs_pin: nhk:gpio27
spi_software_sclk_pin: nhk:gpio18
spi_software_mosi_pin: nhk:gpio20
spi_software_miso_pin: nhk:gpio19

[resonance_tester]
accel_chip: adxl345
probe_points:
 175, 175, 20  # an example

[input_shaper]
shaper_freq_x: 59.4
shaper_type_x: mzv
shaper_freq_y: 41.6
shaper_type_y: mzv

[gcode_shell_command plot_graph]
command: bash /home/miguel/printer_data/config/scripts/plot_graphs.sh
timeout: 500.0
verbose: True

[firmware_retraction]
retract_length: 0.35
# The length of filament (in mm) to retract when G10 is activated,
# and to unretract when G11 is activated (but see
# unretract_extra_length below). The default is 0 mm.
retract_speed: 25
# The speed of retraction, in mm/s. The default is 20 mm/s.
unretract_extra_length: 0
# The length (in mm) of *additional* filament to add when
# unretracting.
unretract_speed: 25
# The speed of unretraction, in mm/s. The default is 10 mm/s.

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

# in the print_handling.cfg

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 53.742
#*# pid_ki = 2.437
#*# pid_kd = 296.252
#*#
#*# [probe]
#*# z_offset = 6.420
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 36.178
#*# pid_ki = 4.231
#*# pid_kd = 77.330
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	-0.060000, -0.048125, -0.089375, -0.036250, 0.028750
#*# 	0.026875, -0.020625, -0.086875, -0.027500, 0.046250
#*# 	0.041250, 0.006250, -0.073750, -0.011250, 0.113125
#*# 	0.008750, -0.004375, -0.015625, -0.038750, 0.081250
#*# 	0.030625, 0.009375, -0.070000, -0.054375, 0.061250
#*# x_count = 5
#*# y_count = 5
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = lagrange
#*# tension = 0.2
#*# min_x = 57.34
#*# max_x = 292.58
#*# min_y = 57.5
#*# max_y = 292.46
