# 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 VORON2 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 '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 [include ./TOOLHEAD/*.cfg] [include ./SYSTEM/*.cfg] [include ./CUSTOM/*.cfg] [mcu] ## [X in MOTOR0] - B Motor ## [Y in MOTOR1] - A Motor ## [E in MOTOR6] - Extruder ## Obtain definition by "ls -l /dev/serial/by-id/" then unplug to verify ##-------------------------------------------------------------------- serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_360026001950534146373920-if00 restart_method: command ##-------------------------------------------------------------------- [printer] kinematics: corexy max_velocity: 500 max_accel: 4200 #Max 4000 #max_y_accel: 4200 #max_x_accel: 8000 #max_accel: 10000 #Testing - revert back to above line after! #max_accel_to_decel: 10000 #Testing - revert back to above line after! max_z_velocity: 30 #Max 15 for 12V TMC Drivers, can increase for 24V max_z_accel: 500 square_corner_velocity: 2.0 minimum_cruise_ratio: 0 [force_move] enable_force_move: True [skew_correction] [exclude_object] [firmware_retraction] [gcode_arcs] resolution: 0.1 ##################################################################### # X/Y Stepper Settings ##################################################################### ## X Stepper on MOTOR0(B Motor) [stepper_x] step_pin: PF13 dir_pin: PF12 enable_pin: !PF14 rotation_distance: 40 microsteps: 16 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: tmc2209_stepper_x:virtual_endstop position_min: 0 position_endstop: 352 position_max: 352 ##-------------------------------------------------------------------- homing_speed: 50 #Max 100 homing_retract_dist: 0 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.9 hold_current: 0.7 sense_resistor: 0.110 #stealthchop_threshold: 400 diag_pin: ^PG6 driver_SGTHRS: 60 #255 Most Sensitive 0 Least Sensitive ## Y Stepper on MOTOR1 (A Motor) [stepper_y] step_pin: PG0 dir_pin: PG1 enable_pin: !PF15 rotation_distance: 40 microsteps: 16 full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper endstop_pin: tmc2209_stepper_y:virtual_endstop position_min: 0 position_endstop: 359 position_max: 359 ##-------------------------------------------------------------------- homing_speed: 50 #Max 100 homing_retract_dist: 0 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.9 hold_current: 0.7 sense_resistor: 0.110 #stealthchop_threshold: 400 diag_pin: ^PG9 driver_SGTHRS: 63 #255 Most Sensitive 0 Least Sensitive ##################################################################### # Z Stepper Settings ##################################################################### ## Z0 Stepper - Front Left on MOTOR2_1 [stepper_z] step_pin: PF9 dir_pin: PF10 enable_pin: !PG2 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 #endstop_pin: probe:z_virtual_endstop endstop_pin: EBB:gpio6 ## 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: 240 ## Uncomment below for 300mm build #position_max: 290 ## Uncomment below for 350mm build position_max: 300 ##-------------------------------------------------------------------- position_min: -1 homing_speed: 10 second_homing_speed: 1 homing_retract_dist: 2 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z] uart_pin: PF2 interpolate: true run_current: 0.8 hold_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z1 Stepper - Rear Left on MOTOR3 [stepper_z1] step_pin: PC13 dir_pin: !PF0 enable_pin: !PF1 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: PE4 interpolate: true run_current: 0.8 hold_current: 0.8 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z2 Stepper - Rear Right on MOTOR4 [stepper_z2] step_pin: PE2 dir_pin: PE3 enable_pin: !PD4 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: PE1 interpolate: true run_current: 0.8 hold_current: 0.80 sense_resistor: 0.110 stealthchop_threshold: 0 ## Z3 Stepper - Front Right on MOTOR5 [stepper_z3] step_pin: PE6 dir_pin: !PA14 enable_pin: !PE0 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 ## Make sure to update below for your relevant driver (2208 or 2209) [tmc2209 stepper_z3] uart_pin: PD3 interpolate: true run_current: 0.8 hold_current: 0.80 sense_resistor: 0.110 stealthchop_threshold: 0 ##################################################################### # Bed Heater ##################################################################### [heater_bed] ## SSR Pin - BED_OUT heater_pin: PA1 sensor_type: Generic 3950 sensor_pin: PF3 ## Adjust Max Power so your heater doesn't warp your bed max_power: 1.0 min_temp: 0 max_temp: 125 #control: pid #pid_kp: 58.437 #pid_ki: 2.347 #pid_kd: 363.769 ##################################################################### # Fan Control ##################################################################### [fan] ## Part Cooling Fan - CPAP 7040 pin: PG15 max_power: 1.0 kick_start_time: 0.05 hardware_pwm: False cycle_time: 0.005 off_below: 0.1 [controller_fan stepper_fan] ## Controller fan - CNC_FAN2 pin: PD12 max_power: 0.9 kick_start_time: 0.5 fan_speed: 0.7 [controller_fan electronic_chamber_fans] ## Controller fan - CNC_FAN2 pin: PD13 max_power: 0.8 kick_start_time: 0.5 fan_speed: 0.4 [temperature_fan exhaust_fan] pin: PE5 shutdown_speed: 0.0 kick_start_time: 5.0 cycle_time: 0.05 hardware_pwm: True off_below: 0.15 sensor_type: temperature_combined sensor_list: temperature_sensor _chamber_1, temperature_sensor _chamber_2, temperature_sensor _chamber_3, temperature_sensor _chamber_4 combination_method: mean maximum_deviation: 999 control: pid pid_Kp: 35.0 pid_Ki: 12 pid_Kd: 4.0 pid_deriv_time: 2.0 target_temp: 50.0 min_temp: 0 max_temp: 110 min_speed: 0.149 max_speed: 1.0 gcode_id: C #[temperature_fan exhaust_fan] ## Exhaust fan - CNC_FAN3 #pin: PE5 #max_power: 1.0 #shutdown_speed: 0.0 #kick_start_time: 5.0 #cycle_time:0.05 #off_below:0.1 #sensor_type: temperature_combined #sensor_list: temperature_sensor _chamber_1,temperature_sensor _chamber_2,temperature_sensor _chamber_3,temperature_sensor _chamber_4 #combination_method: mean #maximum_deviation: 999 #min_temp: 0 #max_temp: 80 #target_temp: 35.0 #max_delta: 0.5 #max_speed: 1.0 #min_speed: 0.3 #control: watermark #gcode_id: C [gcode_macro M141] gcode: {% set s = params.S|default(0)|float %} SET_TEMPERATURE_FAN_TARGET temperature_fan="exhaust_fan" target={s} [fan_generic nevermore_fan] pin: PD15 max_power: 1.0 kick_start_time: 1.0 cycle_time: 0.05 off_below: 0.13 ##################################################################### # LED Control ##################################################################### #[output_pin caselight] # Chamber Lighting - HE1 Connector (Optional) #pin: PB11 #pwm:true #shutdown_value: 0 #value:1 #cycle_time: 0.01 [output_pin daylight] pin: PB11 pwm: True 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 [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 ## Probe points #points: # 50,25 # 50,175 # 200,175 # 200,25 ## Gantry Corners for 300mm Build ## Uncomment for 300mm build #gantry_corners: # -60,-10 # 360,370 ## Probe points #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: 200 horizontal_move_z: 2 retries: 15 retry_tolerance: 0.015 max_adjust: 5 #-------------------------------------------------------------------- [neopixel front_logo] pin: PB0 # The pin connected to the neopixel. This parameter must be # provided. chain_count: 7 # The number of Neopixel chips that are "daisy chained" to the # provided pin. The default is 1 (which indicates only a single # Neopixel is connected to the pin). color_order: GRB # Set the pixel order required by the LED hardware (using a string # containing the letters R, G, B, W with W optional). Alternatively, # this may be a comma separated list of pixel orders - one for each # LED in the chain. The default is GRB. initial_RED: 1.0 initial_GREEN: 0.0 initial_BLUE: 0.0 initial_WHITE: 0.0 # See the "led" section for information on these parameters. #-------------------------------------------------------------------- ##################################################################### # Macros ##################################################################### [gcode_macro G32] description: Home XYZ mesh calibrate gcode: STATUS_HOMING BED_MESH_CLEAR G28 QUAD_GANTRY_LEVEL STATUS_MESHING BED_MESH_CALIBRATE G1 X{ printer.toolhead.axis_maximum.x/2 } Y{ printer.toolhead.axis_maximum.y/2 } Z30 F4500 CARTOGRAPHER_TOUCH STATUS_READY #-------------------------------------------------------------------- [gcode_macro FAST_CALIBRATE] description: > Quickly home axis and mesh the print area. • Caps nozzle temp at 150 °C (warns if over‑requested) • Heats bed & nozzle, non‑blocking wait (via WAIT_HEAT_ALL) • Clears old mesh, homes, then runs adaptive mesh • Moves to center & probes, with step‑by‑step logs gcode: # ─── STEP 1: Read & Cap Requested Temps ─────────────────────────── # {% set extruder_req = params.EXTRUDER|default(0)|int %} {% set bed_req = params.BED |default(0)|int %} {% if extruder_req > 150 %} {% set capped_extruder = 150 %} {% set warn_msg = "⚠️ Nozzle temp request " ~ extruder_req|string ~ "°C capped to " ~ capped_extruder|string ~ "°C" %} RESPOND MSG="{warn_msg}" {% else %} {% set capped_extruder = extruder_req %} {% endif %} # ─── STEP 2: Status Overview ──────────────────────────────────────── # {% set status_msg = "⚙️ Fast Calibrate Starting | Bed → " ~ bed_req|string ~ "°C" ~ " | Nozzle → " ~ capped_extruder|string ~ "°C" %} RESPOND MSG="{status_msg}" # ─── STEP 3: Begin Heating Heaters ───────────────────────────────── # {% if capped_extruder > 0 %} {% set heat_nozzle_msg = "🔥 Heating nozzle to " ~ capped_extruder|string ~ "°C" %} RESPOND MSG="{heat_nozzle_msg}" M104 S{capped_extruder} {% else %} RESPOND MSG="ℹ️ Nozzle heating skipped (0°C requested)" {% endif %} {% if bed_req > 0 %} {% set heat_bed_msg = "🔥 Heating bed to " ~ bed_req|string ~ "°C" %} RESPOND MSG="{heat_bed_msg}" M140 S{bed_req} {% else %} RESPOND MSG="ℹ️ Bed heating skipped (0°C requested)" {% endif %} # ─── STEP 4: Non‑blocking Wait for Both Temps ─────────────────────── # WAIT_HEAT_ALL # ─── STEP 5: Clear Mesh & Home Axes ───────────────────────────────── # RESPOND MSG="🧹 Clearing old mesh" BED_MESH_CLEAR RESPOND MSG="🏠 Homing all axes" _CG28 {% if printer.quad_gantry_level.applied|lower == 'false' %} RESPOND MSG="📏 Running quad gantry level" STATUS_LEVELING QUAD_GANTRY_LEVEL {% else %} RESPOND MSG="✔️ Gantry already leveled" {% endif %} # ─── STEP 6: Adaptive Mesh Scan ──────────────────────────────────── # RESPOND MSG="🔍 Starting adaptive mesh scan" STATUS_MESHING BED_MESH_CALIBRATE ADAPTIVE=1 # ─── STEP 7: Final Probe Touch ───────────────────────────────────── # RESPOND MSG="📍 Moving to center for probe touch" G1 X{ printer.toolhead.axis_maximum.x/2 } Y{ printer.toolhead.axis_maximum.y/2 } F4500 CARTOGRAPHER_TOUCH # ─── STEP 8: Restore original nozzle temp & wait ────────────────── # {% if extruder_req > 0 %} {% set restore_msg = "🔁 Restoring nozzle temp to " ~ extruder_req|string ~ "°C" %} RESPOND MSG="{restore_msg}" M104 S{extruder_req} WAIT_HEAT_EXTRUDER {% endif %} RESPOND MSG="✅ Fast calibration complete" [gcode_macro WAIT_HEAT_ALL] description: Wait for bed and nozzle to reach target temps gcode: RESPOND MSG="⏳ Waiting for bed and nozzle to heat..." M190 S{printer.heater_bed.target} M109 S{printer.extruder.target} RESPOND MSG="🔥 Bed and nozzle ready." [gcode_macro WAIT_HEAT_EXTRUDER] description: Wait for nozzle to reach target temps gcode: RESPOND MSG="⏳ Waiting for nozzle to heat..." M109 S{printer.extruder.target} RESPOND MSG="🔥 Nozzle ready." [gcode_macro PRINT_START] # Use PRINT_START for the slicer starting script - please customise for your slicer of choice gcode: RESPOND MSG="🚦 Waiting for bed/chamber readiness..." SET_MATERIAL {rawparams} FAST_CALIBRATE {rawparams} CLEAN_NOZZLE STATUS_PRINTING LINE_PURGE [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 M106 S0 G1 Z5 F3000 ; move nozzle up 5mm G90 ; absolute positioning BED_MESH_CLEAR SET_PIN PIN=daylight VALUE=0.0 ## 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. #*# #*# [extruder] #*# control = pid #*# pid_kp = 15.921 #*# pid_ki = 3.553 #*# pid_kd = 12.717 #*# #*# [heater_bed] #*# control = pid #*# pid_kp = 38.431 #*# pid_ki = 1.601 #*# pid_kd = 230.586 #*# #*# [stepper_z] #*# position_endstop = -0.65 #*# #*# [input_shaper] #*# shaper_type_x = mzv #*# shaper_freq_x = 52.2 #*# shaper_type_y = mzv #*# shaper_freq_y = 37.8 #*# #*# [scanner] #*# mode = touch #*# scanner_touch_threshold = 2250 #*# scanner_touch_speed = 3 #*# #*# [scanner model default] #*# model_coef = 1.503616458401332, #*# 1.8307346475213917, #*# 0.7262664387406956, #*# 0.2835099604869052, #*# 0.49907486591585376, #*# 0.6866272569538326, #*# -0.4090974133486076, #*# -0.7852408625740519, #*# 0.33079701878632656, #*# 0.4362887326279605 #*# model_domain = 3.241918166319436e-07,3.3488126441795064e-07 #*# model_range = 0.200000,5.100000 #*# model_temp = 32.343261 #*# model_offset = 0.00000 #*# model_mode = touch #*# model_fw_version = CARTOGRAPHER 5.1.0 #*# #*# [bed_mesh default] #*# version = 1 #*# points = #*# 0.072398, 0.066187, 0.119609, 0.134320, 0.132330, 0.124682, 0.100382, 0.086712, 0.077852, 0.074655 #*# 0.039626, 0.036818, 0.092077, 0.101400, 0.103115, 0.087366, 0.059710, 0.045081, 0.039742, 0.020377 #*# 0.007233, 0.011211, 0.055786, 0.061958, 0.054488, 0.046772, 0.017405, 0.006026, 0.001332, -0.019181 #*# -0.015451, -0.008911, 0.036741, 0.037070, 0.022559, 0.018322, -0.002258, -0.016678, -0.023943, -0.036462 #*# -0.032068, -0.040985, 0.033854, 0.035543, 0.009602, -0.000700, -0.021671, -0.027756, -0.038461, -0.058526 #*# -0.036397, -0.034285, 0.032927, 0.026578, -0.003679, -0.002466, -0.023670, -0.034656, -0.036612, -0.054150 #*# -0.021564, -0.030095, 0.022793, 0.029899, 0.010114, 0.000905, -0.013579, -0.025803, -0.025878, -0.035988 #*# 0.007332, 0.002438, 0.063747, 0.059245, 0.045247, 0.033976, 0.020512, 0.012343, 0.014880, -0.002763 #*# 0.044449, 0.033778, 0.080687, 0.087097, 0.085445, 0.074759, 0.065539, 0.054285, 0.054044, 0.039216 #*# 0.045665, 0.049666, 0.111007, 0.114869, 0.103424, 0.098449, 0.091647, 0.084339, 0.083037, 0.062745 #*# x_count = 10 #*# y_count = 10 #*# mesh_x_pps = 2 #*# mesh_y_pps = 2 #*# algo = bicubic #*# tension = 0.2 #*# min_x = 15.0 #*# max_x = 334.95 #*# min_y = 25.0 #*# max_y = 334.96