[include mainsail.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 VORON2 250/300/350mm BigTreeTech OctoPus V1 TMC2209 UART config
*** THINGS TO CHANGE/CHECK: ***
MCU paths [mcu] section
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
Probe 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_270005001150535556323420-if00
restart_method: command
##--------------------------------------------------------------------
#[include autoz.cfg]
[include macros.cfg]
#[include sensorless.cfg]
[include nozzle_scrub.cfg]
[include print_start.cfg]
[include print_end.cfg]
#[include set_pa.cfg]
[include stealthburner_leds.cfg]
#[include KAMP_Settings.cfg]
[include mainsail.cfg]
[virtual_sdcard]
path: /home/biqu/printer_data/gcodes
on_error_gcode: CANCEL_PRINT
#[include Nozzle_ADXL.cfg]
#[include PIS.cfg]
[respond]
#[include adxl.cfg]
[exclude_object]
[temperature_sensor Board_MCU]
sensor_type: temperature_mcu
min_temp: 0
max_temp: 100
[temperature_sensor Raspberry_Pi]
sensor_type: temperature_host
min_temp: 0
max_temp: 100
[input_shaper]
shaper_freq_x: 59.4
shaper_type_x: mzv
shaper_freq_y: 43.2
shaper_type_y: mzv
[printer]
kinematics: corexy
max_velocity: 400
max_accel: 6000 #Max 4000
max_accel_to_decel: 3000
max_z_velocity: 40 #Max 15 for 12V TMC Drivers, can increase for 24V
max_z_accel: 1000
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:400 #set to 200 for 1.8 degree stepper
endstop_pin: PG6
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:400 #set to 200 for 1.8 degree stepper
endstop_pin: PG9
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: 40
gear_ratio: 80:16
microsteps: 32
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
##--------------------------------------------------------------------
Uncomment below for 250mm build
#position_max: 210
Uncomment below for 300mm build
position_max: 260
Uncomment below for 350mm build
#position_max: 310
##--------------------------------------------------------------------
position_min: -5
homing_speed: 8
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.8
sense_resistor: 0.110
stealthchop_threshold: 0
Z1 Stepper - Rear Left
Connected to MOTOR_3
[stepper_z1]
step_pin: PG4
dir_pin: !PC1
enable_pin: !PA0
rotation_distance: 40
gear_ratio: 80:16
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.8
sense_resistor: 0.110
stealthchop_threshold: 0
Z2 Stepper - Rear Right
Connected to MOTOR_4
[stepper_z2]
step_pin: PF9
dir_pin: PF10
enable_pin: PG2
rotation_distance: 40
gear_ratio: 80:16
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.8
sense_resistor: 0.110
stealthchop_threshold: 0
Z3 Stepper - Front Right
Connected to MOTOR_5
[stepper_z3]
step_pin: PC13
dir_pin: !PF0
enable_pin: !PF1
rotation_distance: 40
gear_ratio: 80:16
microsteps: 32
Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 stepper_z3]
uart_pin: PE4
interpolate: false
run_current: 0.8
sense_resistor: 0.110
stealthchop_threshold: 0
#####################################################################
Extruder
#####################################################################
Connected to MOTOR_6
Heater - HE0
Thermistor - T0
[extruder]
step_pin: PE2
dir_pin: !PE3
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:10 for Stealthburner/Clockwork 2
Use 50:17 for Afterburner/Clockwork (BMG Gear Ratio)
Use 80:20 for M4, M3.1
gear_ratio: 50:17 #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: PA2
Use “Generic 3950” for NTC 100k 3950 thermistors
sensor_type: ATC Semitec 104NT-4-R025H42G
sensor_pin: PF4
min_temp: 10
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
E0 on MOTOR6
Make sure to update below for your relevant driver (2208 or 2209)
[tmc2209 extruder]
uart_pin: PE1
interpolate: false
run_current: 0.5
sense_resistor: 0.110
stealthchop_threshold: 0
#####################################################################
Bed Heater
#####################################################################
SSR Pin - HE1
Thermistor - TB
[heater_bed]
Uncomment the following line if using the default SSR wiring from the docs site
heater_pin: PA3
Other wiring guides may use BED_OUT to control the SSR. Uncomment the following line for those cases
#heater_pin: PA1
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.6
min_temp: 0
max_temp: 120
#control: pid
#pid_kp: 58.437
#pid_ki: 2.347
#pid_kd: 363.769
#####################################################################
Probe
#####################################################################
Inductive Probe
This probe is not used for Z height, only Quad Gantry Leveling
[probe]
#--------------------------------------------------------------------
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: 0
#z_offset: 0
speed: 10
lift_speed: 75.0
samples: 3
samples_result: median
sample_retract_dist: 5.0
samples_tolerance: 0.010
samples_tolerance_retries: 5
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 %}
#####################################################################
Fan Control
#####################################################################
Print Cooling Fan - FAN0
[fan]
pin: PA8
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
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 - FAN2
[controller_fan controller_fan]
pin: PD12
kick_start_time: 0.5
heater: heater_bed
Exhaust fan - FAN3
#[heater_fan exhaust_fan]
#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
#####################################################################
Chamber Lighting - HE2 Connector (Optional)
[output_pin caselight]
pin: PB10
pwm:true
hardware_pwm: true
shutdown_value: 0
value:0
cycle_time: 0.0001
#####################################################################
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:150,150
speed:100
z_hop:13
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
[quad_gantry_level]
#--------------------------------------------------------------------
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,50
50,250
250,250
250,50
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: 100
horizontal_move_z: 10
retries: 7
retry_tolerance: 0.0075
max_adjust: 10
########################################
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=, 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
#--------------------------------------------------------------------
RepRapDiscount 128x64 Full Graphic Smart Controller
#[display]
#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
#--------------------------------------------------------------------
[bed_mesh]
speed: 250
horizontal_move_z: 10
mesh_min: 30, 30
mesh_max: 290, 290
probe_count: 5, 5
mini12864 LCD Display
[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
To control Neopixel RGB in mini12864 display
[neopixel btt_mini12864]
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
#--------------------------------------------------------------------
[gcode_macro M401]
gcode:
G90
{action_respond_info(“Entering M401”)}
error_if_probe_deployed ; check to make sure that the probe is not already attached
_M401
[gcode_macro error_if_probe_deployed]
gcode:
QUERY_PROBE ; check probe status
do_error_if_probe_deployed ; logic check to verify probe is not already deployed
[gcode_macro do_error_if_probe_deployed]
gcode:
{% if not printer.probe.last_query %}
{action_raise_error(“Euclid Probe is already deployed - Remove and Return it to the dock”)}
{% endif %}
Macro to Deploy Bed Probe
[gcode_macro _M401]
gcode:
G90
{% if printer.probe.last_query %}
G0 Z50 F3000 ; set approach elevation of Z15 to clear probe over bed on fixed gantry machine
# for moving gantry machine this may need to be adjusted
#G0 X100 Y350 ; (0) move the carraige to safe position to move from. this is the pre-flight position
G0 X72 Y300 F3000 ; move to the side of the dock. this is the dock side position
#G4 P250 ; wait 1/4 second
G0 X72 Y150 ; move sideways over the dock to pick up probe. this is the dock position
M400 ; wait for moves to finish
G0 X150 Y150 F3000 ; move out of the dock in a straight line to the dock exit poistion
G0 Z15 F3000 ; move up to clear the probe over the bed of moving gantry or provide clearance for fixed gantry
#G0 X175 Y175 ; move probe to center of bed in ready position
{% endif %}
error_if_probe_not_deployed
{action_respond_info(“Exiting M401”)}
[gcode_macro error_if_probe_not_deployed]
gcode:
QUERY_PROBE
do_error_if_probe_not_deployed
[gcode_macro do_error_if_probe_not_deployed]
gcode:
{% if printer.probe.last_query %}
{action_raise_error(“Euclid Probe failed to deploy!”)}
{% endif %}
Macro to retract Bed Probe
[gcode_macro M402]
gcode:
G90
{action_respond_info(“Entering M402”)}
error_if_probe_not_deployed
_M402
Macro to Stow Bed Leveling Probe
[gcode_macro _M402]
gcode:
G90
{% if not printer.probe.last_query %} ; the logic on this needs function check
#G0 Z15 F2400 ; set approach elevation of Z15 for fixed gantry system to clear probe over bed
# ; for moving gantry system this may have to be altered to match your dock elevation
#G0 X150 Y150 F3000 ; start movements at center of the bed
G0 X72 Y200 F6000 ; move to the re-entry staging position
G0 X72 Y275 F3000 ; move to a position in front of the dock so a simple linear movement into dock
G0 X72 Y300 F500 ; slowly move into dock
M400 ; wait for moves to finish
#G4 P250 ; forced pause here so motion is definite 90 tavel to swipe
G0 X150 Y300 Z25 F1000 ; quick swipe off
# G0 Z20 F500 ; move up to elevation of Z20
{% endif %} ; exit the if-then loop. was missing in previous versions
error_if_probe_deployed ; verify that the probe is detached. is corrected error
{action_respond_info("Exiting M402")}
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing: _QUAD_GANTRY_LEVEL_ORIGINAL
gcode:
M401 ; deploy Euclid Probe if needed
_QUAD_GANTRY_LEVEL_ORIGINAL ; check bed level
M402 ; dock Euclid Probe
[gcode_macro LOAD_FILAMENT]
gcode:
M83 # Put the extruder into relative mode
G92 E0.0 # Reset the extruder so that it thinks it is at position zero
G1 E120 F350 # Move the extruder forward 120mm at a speed of 350mm/minute
G92 E0.0 # Reset the extruder again
M82 # Put the extruder back into absolute mode.
[gcode_macro UNLOAD_FILAMENT]
gcode:
M83 # Put the extruder into relative mode
G92 E0.0 # Reset the extruder so that it thinks it is at position zero
G1 E-120 F350 # Move the extruder forward 120mm at a speed of 350mm/minute
G92 E0.0 # Reset the extruder again
M82 # Put the extruder back into absolute mode.
[force_move]
enable_force_move: True
[gcode_macro FAKE_POSITION]
gcode:
SET_KINEMATIC_POSITION X=10 Y=10 Z=10
## <---------------------- SAVE_CONFIG ---------------------->
## DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
##
## [heater_bed]
## control = pid
## pid_kp = 37.983
## pid_ki = 1.415
## pid_kd = 254.961
##
## [extruder]
## control = pid
## pid_kp = 20.670
## pid_ki = 0.907
## pid_kd = 117.819
##
## [stepper_z]
##
##
## [probe]
## z_offset = 6.437
##
## [bed_mesh default]
## version = 1
## points =
## -3.464570, -3.417695, -3.416445, -3.440195, -3.481445
## -3.468320, -3.474570, -3.462070, -3.467070, -3.493945
## -3.473320, -3.452695, -3.466445, -3.467070, -3.482695
## -3.469570, -3.467695, -3.452695, -3.461445, -3.478945
## -3.482070, -3.448320, -3.437070, -3.430820, -3.455195
## x_count = 5
## y_count = 5
## mesh_x_pps = 2
## mesh_y_pps = 2
## algo = lagrange
## tension = 0.2
## min_x = 42.87
## max_x = 257.39
## min_y = 45.230000000000004
#*# max_y = 253.51