[include moonraker_obico_macros.cfg] #[include mmu/base/*.cfg] #[include mmu/optional/client_macros.cfg] [include mainsail.cfg] # host MCU service is preinstalled and ready to use with: [mcu CB1] serial: /tmp/klipper_host_mcu [mcu] canbus_uuid: a39755b6c75c [mcu printhead] canbus_uuid: 6e5db542668c [printer] kinematics: corexy max_velocity: 700 max_accel: 25000 max_z_velocity: 20 max_z_accel: 350 square_corner_velocity: 5.0 [temperature_sensor Electronics] sensor_type: temperature_mcu [temperature_sensor CPU] sensor_type: temperature_host ##################################################################### # X/Y Stepper Settings ##################################################################### [motor_constants ldo-42sth60-2004mac] resistance: 1.4 inductance: 0.003 holding_torque: 0.5884 max_current: 2.0 steps_per_revolution: 400 ## X Stepper on Motor1(B Motor) [stepper_x] step_pin: PE6 dir_pin: PE5 enable_pin: !PC14 microsteps: 16 rotation_distance: 40.1209 full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper endstop_pin: ^PF4 position_min: 0 position_endstop: 350 position_max: 350 homing_speed: 25 #Max 100 homing_retract_dist: 5 homing_positive_dir: true [tmc5160 stepper_x] cs_pin: PC13 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1.414 stealthchop_threshold: 0 [autotune_tmc stepper_x] motor: ldo-42sth60-2004mac tuning_goal: performance voltage: 48.0 # Y Stepper on Motor2 (A Motor) [stepper_y] step_pin: PE2 dir_pin: PE1 enable_pin: !PE4 microsteps: 16 rotation_distance: 40.3964 endstop_pin: ^PF3 full_steps_per_rotation:400 #set to 400 for 0.9 degree stepper position_min: 0 position_endstop: 355 position_max: 355 homing_speed: 25 #Max 100 homing_retract_dist: 5 homing_positive_dir: true [tmc5160 stepper_y] cs_pin: PE3 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1.414 stealthchop_threshold: 0 [autotune_tmc stepper_y] motor: ldo-42sth60-2004mac tuning_goal: performance voltage: 48.0 ##################################################################### # Z Stepper Settings ##################################################################### ## Z0 Stepper - Front Left on MOTOR3_A [stepper_z] step_pin: PB8 dir_pin: PB7 enable_pin: !PE0 rotation_distance: 41.3288 gear_ratio: 80:16 microsteps: 16 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: -2 position_max: 300 position_min: -10 homing_speed: 5 second_homing_speed: 3 homing_retract_dist: 3 [tmc5160 stepper_z] cs_pin: PB9 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1 stealthchop_threshold: 0 # [autotune_tmc stepper_z] # motor: moons-ms17hd6p420I-05 # tuning_goal: silent # voltage: 48.0 ## Z1 Stepper - Rear Left on Motor5 [stepper_z1] step_pin: PG13 dir_pin: !PG12 enable_pin: !PG15 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 [tmc5160 stepper_z1] cs_pin: PG14 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1 stealthchop_threshold: 0 # [autotune_tmc stepper_z1] # motor: moons-ms17hd6p420I-05 # tuning_goal: silent # voltage: 48.0 ## Z2 Stepper - Rear Right on Motor6 [stepper_z2] step_pin: PG9 dir_pin: PD7 enable_pin: !PG11 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 [tmc5160 stepper_z2] cs_pin: PG10 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1 stealthchop_threshold: 0 # [autotune_tmc stepper_z2] # motor: moons-ms17hd6p420I-05 # tuning_goal: silent # voltage: 48.0 ## Z3 Stepper - Front Right on Motor7 [stepper_z3] step_pin: PD4 dir_pin: !PD3 enable_pin: !PD6 rotation_distance: 40 gear_ratio: 80:16 microsteps: 16 [tmc5160 stepper_z3] cs_pin: PD5 spi_software_mosi_pin: PG6 spi_software_miso_pin: PG7 spi_software_sclk_pin: PG8 run_current: 1 stealthchop_threshold: 0 # [autotune_tmc stepper_z3] # motor: moons-ms17hd6p420I-05 # tuning_goal: silent # voltage: 48.0 ##################################################################### # Extruder ##################################################################### [extruder] step_pin: printhead: PD0 dir_pin: printhead: PD1 enable_pin: !printhead: PD2 rotation_distance: 5.7 gear_ratio: 1:1 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 spi_speed: 4000000 heater_pin: printhead: PB13 sensor_type: MAX31865 sensor_pin: printhead: PA4 spi_bus: spi1 rtd_nominal_r: 1000 rtd_reference_r: 4300 rtd_num_of_wires: 4 min_temp: 10 max_temp: 350 max_power: 1.0 min_extrude_temp: 170 control = pid pid_kp = 23.189 pid_ki = 1.562 pid_kd = 86.089 ## Try to keep pressure_advance below 1.0 pressure_advance: 0.05 ## Default is 0.040, leave stock pressure_advance_smooth_time: 0.040 [tmc2209 extruder] uart_pin: printhead: PA15 interpolate: false run_current: 0.707 stealthchop_threshold: 0 [motor_constants moon-36h020h-1004a-001] resistance: 2.37 inductance: 0.0012 holding_torque: 0.0883 max_current: 0.6 steps_per_revolution: 200 [autotune_tmc extruder] motor: moon-36h020h-1004a-001 tuning_goal: performance voltage: 24.0 [adxl345] cs_pin: printhead: PB12 spi_software_sclk_pin: printhead: PB10 spi_software_mosi_pin: printhead: PB11 spi_software_miso_pin: printhead: PB2 axes_map: x,z,y [resonance_tester] accel_chip: adxl345 probe_points: 175, 175, 30 ##################################################################### # Filament Sensor ##################################################################### [filament_switch_sensor switch_sensor] switch_pin: ^PF0 pause_on_runout: True runout_gcode: PAUSE M117 Filament switch runout insert_gcode: M117 Filament switch inserted [filament_motion_sensor encoder_sensor] switch_pin: ^PC15 detection_length: 15 extruder: extruder pause_on_runout: True runout_gcode: PAUSE M117 Filament encoder runout insert_gcode: M117 Filament encoder inserted ##################################################################### # Bed Heater ##################################################################### ## SSR Pin - HE2 [heater_bed] heater_pin: PA3 sensor_type: Generic 3950 sensor_pin: PB1 max_power: 1 min_temp: 0 max_temp: 120 control = pid pid_kp = 62.274 pid_ki = 3.218 pid_kd = 301.250 ##################################################################### # Probe ##################################################################### [probe] ## Inductive Probe ## This probe is not used for Z height, only Quad Gantry Leveling ## NPN and PNP proximity switch types can be set by jumper pin: printhead: PB6 x_offset: 0 y_offset: 25.0 #z_offset: 0 speed: 30.0 samples: 3 samples_result: median sample_retract_dist: 5.0 samples_tolerance: 0.01 samples_tolerance_retries: 6 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)) } M106 S255 M109 S{ PROBE_TEMP } M106 S0 {% 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 %} ##################################################################### # Enclosure Temperature Control ##################################################################### [temperature_sensor chamber] sensor_type: Generic 3950 sensor_pin: PB0 ##################################################################### # Fan Control ##################################################################### [fan_generic part_cooling_fan] ## Print Cooling Fan - CNC_FAN0 pin: !PA4 kick_start_time: 0 ## 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.28 [heater_fan hotend_fan] ## Hotend Fan - CNC_FAN1 pin: printhead: PA0 max_power: 1.0 kick_start_time: 0.5 heater: extruder heater_temp: 50.0 fan_speed: 1.0 [fan_generic exhaust_fan] # Exhaust fan - CNC_FAN3 pin: PF6 max_power: 1.0 shutdown_speed: 0.0 kick_start_time: 5.0 [multi_pin controller_fans] pins: PF7,PF9 [controller_fan controller_fan] ## Controller fan - CNC_FAN2 pin: multi_pin:controller_fans kick_start_time: 0.5 idle_speed: 0.5 heater: heater_bed idle_timeout: 120 ##################################################################### # LED Control ##################################################################### [neopixel caselight] pin: PD15 chain_count: 30 color_order: GRB [neopixel hotend_rgb] pin: printhead: PD3 chain_count: 6 color_order: GRB,RBG,GRB,RGB,RGB,RGB ##################################################################### # Idle Timeout ##################################################################### [idle_timeout] timeout: 600 gcode: TURN_OFF_HEATERS M84 ##################################################################### # Homing and Gantry Adjustment Routines ##################################################################### [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:170,170 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: -60,-60 410,410 points: 50,50 50,300 300,300 300,50 speed: 500 horizontal_move_z: 10 retries: 10 retry_tolerance: 0.02 max_adjust: 15 [bed_mesh] speed: 500 horizontal_move_z: 5 mesh_min: 30,50 mesh_max: 320,340 probe_count: 5,5 ##################################################################### # Pin Definitions ##################################################################### [board_pins] aliases: # EXP1 header EXP1_1=PE9, EXP1_2=PE10, EXP1_3=PE11, EXP1_4=PE12, EXP1_5=PE13, EXP1_6=PE14, # Slot in the socket on this side EXP1_7=PE15, EXP1_8=PB10, EXP1_9=, EXP1_10=<5V>, # EXP2 header EXP2_1=PB14, EXP2_2=PB13, EXP2_3=PF7, EXP2_4=PB12, EXP2_5=PE7, EXP2_6=PB11, # Slot in the socket on this side EXP2_7=PE8, EXP2_8=, EXP2_9=, EXP2_10=PC5 ##################################################################### # Optional G-Codes ##################################################################### [gcode_arcs] resolution: 0.1 [exclude_object] [pause_resume] recover_velocity: 100 [firmware_retraction] retract_length: 0.8 retract_speed: 40 unretract_extra_length: 0 unretract_speed: 40 [respond] default_type: echo ##################################################################### # Macros ##################################################################### [gcode_macro CANCEL_PRINT] rename_existing: BASE_CANCEL_PRINT gcode: M220 S100 ; reset speed factor override percentage to default (100%) M221 S100 ; reset extrusion factor override percentage to default (100%) {% if printer.extruder.temperature > 170 %} ; if extruder is hot, retract filament G1 E-3.0 F3600 ; retract filament by 3mm {% endif %} {% if printer.toolhead.homed_axis == "xyz" %} ; if XYZ is homed, we can move the nozzle G91 ; relative positioning G1 Z+5 F3600 ; move nozzle up 5mm G90 ; absolute positioning PARK_NOZZLE_REAR ; park nozzle {% endif %} CLEAR_PAUSE BASE_CANCEL_PRINT [gcode_macro G32] gcode: G28 QUAD_GANTRY_LEVEL BED_MESH_CALIBRATE G28 G0 X345 Y345 Z30 F3600 [gcode_macro PARK_NOZZLE_REAR] gcode: G0 X345 Y345 F3600 [gcode_macro PARK_NOZZLE_FRONT] gcode: G0 X15 Y15 F3600 [gcode_macro PRINT_START] gcode: UPDATE_DELAYED_GCODE ID=TURN_ON_LIGHTS DURATION=0 SET_LED LED="caselight" RED=0.898 GREEN=1 BLUE=0 SYNC=0 TRANSMIT=1 M140 S{ params.BED | float } ; set bed temperature {% set PROBE_TEMP = 150 %} {% set ACTUAL_TEMP = printer.extruder.temperature %} {% if ACTUAL_TEMP > PROBE_TEMP %} M106 S255 M109 S{ PROBE_TEMP } M106 S0 {% else %} M109 S{ PROBE_TEMP } {% endif %} ; get nozzle to probing temperture M190 S{ params.BED | float } ; wait for bed to reach temperture ; If QGL is NO, only do G28 (axis homing) ; If QGL is YES or not defined, do G32 (axis homing + QGL) ; First Check if QGL exists, then check if it is YES {% if params.QGL is defined and params.QGL == "NO" %} G28 {% else %} ; Is QGL applied already? {% if printer.quad_gantry_level.applied %} ; QGL is applied, so just home the axis G28 PARK_NOZZLE_REAR {% else %} ; QGL is not applied, so home the axis and apply QGL and calibrate the mesh G32 {% endif %} {% endif %} G1 Z20 F3000 ; move nozzle away from bed M109 S{ params.EXTRUDER | float } ; wait for nozzle to reach temperture SET_LED LED="hotend_rgb" RED=1 GREEN=0 BLUE=1 SYNC=0 TRANSMIT=1 ; turn on hotend LED SET_LED LED="caselight" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1 ; turn on case light [gcode_macro PRINT_PURGE_LINE] gcode: G0 X10Y10Z0.25 F10000 G0 X200Y10Z0.25 E50 F1000 [gcode_macro PRINT_END] 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 ; turn off heaters M107 ; turn off fan G1 Z2 F3000 ; move nozzle up 2mm G90 ; absolute positioning PARK_NOZZLE_REAR ; park nozzle #M84 ; disable motors (optional) UPDATE_DELAYED_GCODE ID=TURN_OFF_LIGHTS DURATION=300 [delayed_gcode TURN_OFF_LIGHTS] gcode: SET_LED LED="caselight" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1 SET_LED LED="hotend_rgb" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1 [gcode_macro LOAD_FILAMENT] gcode: M83 G1 E50 F300 G1 E30 F150 [gcode_macro UNLOAD_FILAMENT] gcode: M83 G1 E-35 F8000 G1 E26 F750 G4 P1000 G1 E-50 F8000 G1 E-50 F8000 [gcode_macro M106] gcode: # P0: Part cooling fan, P3: Exhaust fan # If no P parameter is given, assume Part Cooling Fan {% set speed = (params.S|float / 255 if params.S is defined else 1.0) %} {% set fan_id = (params.P)|int if params.P is defined else 0 %} {% if fan_id == 0 %} SET_FAN_SPEED FAN=part_cooling_fan SPEED={speed} {% elif fan_id == 3 %} SET_FAN_SPEED FAN=exhaust_fan SPEED={speed} {% endif %} # Home, get position, throw around toolhead, home again. # If MCU stepper positions (first line in GET_POSITION) are greater than a full step different (your number of microsteps), then skipping occured. # We only measure to a full step to accomodate for endstop variance. # Example: TEST_SPEED SPEED=300 ACCEL=5000 ITERATIONS=10 [gcode_macro TEST_SPEED] gcode: # Speed {% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %} # Iterations {% set iterations = params.ITERATIONS|default(5)|int %} # Acceleration {% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %} # Bounding inset for large pattern (helps prevent slamming the toolhead into the sides after small skips, and helps to account for machines with imperfectly set dimensions) {% set bound = params.BOUND|default(20)|int %} # Size for small pattern box {% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %} # Large pattern # Max positions, inset by BOUND {% set x_min = printer.toolhead.axis_minimum.x + bound %} {% set x_max = printer.toolhead.axis_maximum.x - bound %} {% set y_min = printer.toolhead.axis_minimum.y + bound %} {% set y_max = printer.toolhead.axis_maximum.y - bound %} # Small pattern at center # Find X/Y center point {% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %} {% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %} # Set small pattern box around center point {% set x_center_min = x_center - (smallpatternsize/2) %} {% set x_center_max = x_center + (smallpatternsize/2) %} {% set y_center_min = y_center - (smallpatternsize/2) %} {% set y_center_max = y_center + (smallpatternsize/2) %} # Save current gcode state (absolute/relative, etc) SAVE_GCODE_STATE NAME=TEST_SPEED # Output parameters to g-code terminal { action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) } # Home and get position for comparison later: M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 # QGL if not already QGLd (only if QGL section exists in config) {% if printer.configfile.settings.quad_gantry_level %} {% if printer.quad_gantry_level.applied == False %} QUAD_GANTRY_LEVEL G28 Z {% endif %} {% endif %} # Move 50mm away from max position and home again (to help with hall effect endstop accuracy - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/24) G90 G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60} M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 X Y G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION # Go to starting position G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60} # Set new limits SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2} {% for i in range(iterations) %} # Large pattern diagonals G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} # Large pattern box G0 X{x_min} Y{y_min} F{speed*60} G0 X{x_min} Y{y_max} F{speed*60} G0 X{x_max} Y{y_max} F{speed*60} G0 X{x_max} Y{y_min} F{speed*60} # Small pattern diagonals G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} # Small patternbox G0 X{x_center_min} Y{y_center_min} F{speed*60} G0 X{x_center_min} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_max} F{speed*60} G0 X{x_center_max} Y{y_center_min} F{speed*60} {% endfor %} # Restore max speed/accel/accel_to_decel to their configured values SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel} # Re-home and get position again for comparison: M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66 G28 # This is a full G28 to fix an issue with CoreXZ - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/12 # Go to XY home positions (in case your homing override leaves it elsewhere) G90 G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60} G4 P1000 GET_POSITION # Restore previous gcode state (absolute/relative, etc) RESTORE_GCODE_STATE NAME=TEST_SPEED ##################################################################### # Palette 2 ##################################################################### [palette2] serial: /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DM02HVOW-if00-port0 feedrate_splice: 0.3 feedrate_normal: 1.0 auto_load_speed: 2 auto_cancel_variation: 0.1 #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [input_shaper] #*# shaper_type_x = zv #*# shaper_freq_x = 57.6 #*# shaper_type_y = 3hump_ei #*# shaper_freq_y = 48.0 #*# #*# [probe] #*# z_offset = -1.455 #*# #*# [extruder] #*# #*# [heater_bed] #*# #*# [bed_mesh default] #*# version = 1 #*# points = #*# 0.592323, 0.690479, 0.687896, 0.682730, 0.618154 #*# 0.625903, 0.662065, 0.690479, 0.685313, 0.633652 #*# 0.594906, 0.625903, 0.618154, 0.612987, 0.638818 #*# 0.579408, 0.615570, 0.612987, 0.659482, 0.576825 #*# 0.636235, 0.703394, 0.659482, 0.654316, 0.607821 #*# x_count = 5 #*# y_count = 5 #*# mesh_x_pps = 2 #*# mesh_y_pps = 2 #*# algo = lagrange #*# tension = 0.2 #*# min_x = 30.0 #*# max_x = 320.0 #*# min_y = 50.0 #*# max_y = 340.0