diff --git a/printer_data/config/.theme b/printer_data/config/.theme new file mode 160000 index 0000000..df761b9 --- /dev/null +++ b/printer_data/config/.theme @@ -0,0 +1 @@ +Subproject commit df761b97f433df902bd6c66bba93d6019bd10f95 diff --git a/printer_data/config/AFC/AFC.cfg b/printer_data/config/AFC/AFC.cfg deleted file mode 100644 index 2055ad8..0000000 --- a/printer_data/config/AFC/AFC.cfg +++ /dev/null @@ -1,121 +0,0 @@ -[AFC] -VarFile: /home/mks/printer_data/config/AFC/AFC.var # Path to the variables file for AFC configuration. - -#--=================================================================================- -#------- Speed ---------------------------------------------------------------------- -#--=================================================================================- -long_moves_speed: 50 # mm/s. Default value is 150mm/s. -long_moves_accel: 250 # mm/s². Default value is 250mm/s². -short_moves_speed: 50 # mm/s. Default value is 50mm/s. -short_moves_accel: 300 # mm/s². Default value is 300mm/s². -short_move_dis: 10 # Move distance for failsafe moves. Default is 10mm. - -#--=================================================================================- -#------- Pause/Resume --------------------------------------------------------------- -#--=================================================================================- -z_hop: 2 # Height to move up before and after a tool change completes -resume_speed: 350 # Speed mm/s of resume move. Set to 0 to use gcode speed -resume_z_speed: 100 # Speed mm/s of resume move in Z. Set to 0 to use gcode speed - - -#--=================================================================================- -#------- Spoolman ------------------------------------------------------------------- -#--=================================================================================- -# spoolman_ip: http://spoolman.local # Spoolman IP address. -# spoolman_port: 7912 # Spoolman port. - - -#--=================================================================================- -#------- LED Settings --------------------------------------------------------------- -#--=================================================================================- -led_name: AFC_Indicator # LED name from the [AFC_led] section in AFC_Hardware.cfg. -led_fault: 1,0,0,0 # Fault color (R,G,B,W) 0 = off, 1 = full brightness. -led_ready: 0,0.8,0,0 # Ready color (R,G,B,W) 0 = off, 1 = full brightness. -led_not_ready: 1,0,0,0 # Not ready color (R,G,B,W) 0 = off, 1 = full brightness. -led_loading: 1,1,1,0 # Loading color (R,G,B,W) 0 = off, 1 = full brightness. -led_tool_loaded: 0,0,1,0 # Loaded color (R,G,B,W) 0 = off, 1 = full brightness. -led_buffer_advancing: 0,0,1,0 # Buffer advancing color (R,G,B,W) 0 = off, 1 = full brightness. -led_buffer_trailing: 0,1,0,0 # Buffer trailing color (R,G,B,W) 0 = off, 1 = full brightness. -led_buffer_disable: 0,0,0,0.25 # Buffer disable color (R,G,B,W) 0 = off, 1 = full brightness. - -#--=================================================================================- -#------- Macro Config --------------------------------------------------------------- -#--=================================================================================- -# Macro order of operation -# - Load | - Unload -# - Load Filament | - Cut -# - Poop | - Park -# - Wipe | or -# - Kick | - Park -# - Wipe | - Tip Form -# - Print | - -# TOOL Cutting Settings -tool_cut: False # Enable Cut macro. -tool_cut_cmd: AFC_CUT # Cut macro name. - -# Park Settings -park: True # Enable Park. -park_cmd: AFC_PARK # Park macro name. - -# Poop Settings -poop: True # Enable Poop. -poop_cmd: AFC_POOP # Poop macro name. - -# Kick Settings -kick: False # Enable Kick. -kick_cmd: AFC_KICK # Kick macro name. - -# Wipe Settings -wipe: True # Enable Wipe. -wipe_cmd: AFC_BRUSH # Wipe macro name. - -# Form Tip Settings -form_tip: True # Enable Tip Form. -form_tip_cmd: AFC # AFC is default routine. Name to custom macro if you prefer - - -#--=================================================================================- -#------- Start-up ------------------------------------------------------------------- -#--=================================================================================- -[AFC_prep] -enable: True # Enable the AFC Prep routine. - -[delayed_gcode welcome] -initial_duration: 1 -gcode: - PREP - - -[AFC_form_tip] -#--=================================================================================- -#------- Tip Forming --------------------------------------------------------------- -#--=================================================================================- -# This is the initial press of the filament into the tip before any cooling moves. -ramming_volume: 2 # Volume of filament to press into the nozzle during tip formation in mm³. - -# Set this if you would like a temperature reduction during the tip formation. -# If using skinny_dip, this change will happen before. -toolchange_temp: 0 - -# This step is split into two different movements. First, a fast move to separate the filament -# from the hot zone. Next, a slower movement over the remaining distance of the cooling tube. -unloading_speed_start: 60 # Speed in mm/s (fast pull). -unloading_speed: 20 # Speed in mm/s (cooling tube move). - -# This stage moves the filament back and forth in the cooling tube section of the hotend. -# It helps keep the tip shape uniform with the filament path to prevent clogs. -cooling_tube_position: 38 # Start of the cooling tube in mm. -cooling_tube_length: 8 # Length of the move in mm. -initial_cooling_speed: 10 # Initial movement speed to start solidifying the tip in mm/s. -final_cooling_speed: 50 # Fast movement speed in mm/s. -cooling_moves: 4 # Number of back and forth moves in the cooling tube. - -# This is a final move to burn off any hairs possibly on the end of stringy materials like PLA. -# If you use this, it should be the last thing you tune after achieving a solid tip shape. -use_skinnydip: False # Enable skinny dip moves (for burning off filament hairs). -skinnydip_distance: 30 # Distance to reinsert the filament, starting at the end of the cooling tube in mm. -dip_insertion_speed: 30 # Insertion speed for burning off filament hairs in mm/s. -dip_extraction_speed: 70 # Extraction speed (set to around 2x the insertion speed) in mm/s. -melt_zone_pause: 0 # Pause time in the melt zone in seconds. -cooling_zone_pause: 0 # Pause time in the cooling zone after the dip in seconds. diff --git a/printer_data/config/AFC/AFC.var.tool b/printer_data/config/AFC/AFC.var.tool deleted file mode 100644 index f090796..0000000 --- a/printer_data/config/AFC/AFC.var.tool +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extruder": { - "lane_loaded": "" - } -} \ No newline at end of file diff --git a/printer_data/config/AFC/AFC.var.unit b/printer_data/config/AFC/AFC.var.unit deleted file mode 100644 index 16b934c..0000000 --- a/printer_data/config/AFC/AFC.var.unit +++ /dev/null @@ -1,44 +0,0 @@ -{ - "Turtle_1": { - "leg1": { - "spool_id": "", - "material": "", - "color": "#000000", - "weight": 0, - "command": null, - "index": 1, - "tool_loaded": false, - "hub_loaded": true - }, - "leg2": { - "spool_id": "", - "material": "", - "color": "#000000", - "weight": 0, - "command": null, - "index": 2, - "tool_loaded": false, - "hub_loaded": true - }, - "leg3": { - "spool_id": "", - "material": "", - "color": "#000000", - "weight": 0, - "command": null, - "index": 3, - "tool_loaded": false, - "hub_loaded": false - }, - "leg4": { - "spool_id": "", - "material": "", - "color": "#000000", - "weight": 0, - "command": null, - "index": 4, - "tool_loaded": false, - "hub_loaded": true - } - } -} \ No newline at end of file diff --git a/printer_data/config/AFC/AFC_Hardware.cfg b/printer_data/config/AFC/AFC_Hardware.cfg deleted file mode 100644 index f8efc56..0000000 --- a/printer_data/config/AFC/AFC_Hardware.cfg +++ /dev/null @@ -1,190 +0,0 @@ -[mcu AFC] -#canbus_uuid: change_me_to_canbus_id -serial: /dev/serial/by-id/usb-Klipper_stm32h723xx_3D002E001151333038363231-if00 - -[include mcu/AFC_Lite.cfg] - - - -[force_move] -enable_force_move: True - -[temperature_sensor AFC] -sensor_type: temperature_mcu -sensor_mcu: AFC - -[AFC_stepper leg1] -unit: Turtle_1:1 -extruder: extruder -step_pin: AFC:M1_STEP -dir_pin: !AFC:M1_DIR -enable_pin: !AFC:M1_EN -microsteps: 16 -rotation_distance: 4.65 -dist_hub: 140 -park_dist: 10 -led_index: AFC_Indicator:1 -afc_motor_rwd: AFC:MOT1_RWD -afc_motor_fwd: AFC:MOT1_FWD -afc_motor_enb: AFC:MOT1_EN -afc_motor_fwd_pulse: 64 -afc_motor_fwd_gear_ratio: 2:1 -afc_motor_fwd_drive_diam: 48 -rwd_speed_multiplier: 0.5 -fwd_speed_multiplier: 0.5 -pwm: True -prep: ^!AFC:TRG1 -load: ^AFC:EXT1 - -[tmc2209 AFC_stepper leg1] -uart_pin: AFC:M1_UART -uart_address: 0 -run_current: 0.65 -sense_resistor: 0.110 - -[AFC_stepper leg2] -unit: Turtle_1:2 -extruder: extruder -step_pin: AFC:M2_STEP -dir_pin: !AFC:M2_DIR -enable_pin: !AFC:M2_EN -microsteps: 16 -rotation_distance: 4.65 -dist_hub: 80 -park_dist: 10 -led_index: AFC_Indicator:2 -afc_motor_rwd: AFC:MOT2_RWD -afc_motor_fwd: AFC:MOT2_FWD -afc_motor_enb: AFC:MOT2_EN -afc_motor_fwd_pulse: 64 -afc_motor_fwd_gear_ratio: 2:1 -afc_motor_fwd_drive_diam: 48 -rwd_speed_multiplier: 0.5 -fwd_speed_multiplier: 0.5 -pwm: True -prep: ^!AFC:TRG2 -load: ^AFC:EXT2 - -[tmc2209 AFC_stepper leg2] -uart_pin: AFC:M2_UART -uart_address: 0 -run_current: 0.65 -sense_resistor: 0.110 - -[AFC_stepper leg3] -unit: Turtle_1:3 -extruder: extruder -step_pin: AFC:M3_STEP -dir_pin: !AFC:M3_DIR -enable_pin: !AFC:M3_EN -microsteps: 16 -rotation_distance: 4.65 -dist_hub: 80 -park_dist: 10 -led_index: AFC_Indicator:3 -afc_motor_rwd: AFC:MOT3_RWD -afc_motor_fwd: AFC:MOT3_FWD -afc_motor_enb: AFC:MOT3_EN -afc_motor_fwd_pulse: 64 -afc_motor_fwd_gear_ratio: 2:1 -afc_motor_fwd_drive_diam: 48 -rwd_speed_multiplier: 0.5 -fwd_speed_multiplier: 0.5 -pwm: True -prep: ^!AFC:TRG3 -load: ^AFC:EXT3 - -[tmc2209 AFC_stepper leg3] -uart_pin: AFC:M3_UART -uart_address: 0 -run_current: 0.65 -sense_resistor: 0.110 - -[AFC_stepper leg4] -unit: Turtle_1:4 -extruder: extruder -step_pin: AFC:M4_STEP -dir_pin: !AFC:M4_DIR -enable_pin: !AFC:M4_EN -microsteps: 16 -rotation_distance: 4.65 -dist_hub: 140 -park_dist: 10 -led_index: AFC_Indicator:4 -afc_motor_rwd: AFC:MOT4_RWD -afc_motor_fwd: AFC:MOT4_FWD -afc_motor_enb: AFC:MOT4_EN -afc_motor_fwd_pulse: 64 -afc_motor_fwd_gear_ratio: 2:1 -afc_motor_fwd_drive_diam: 48 -rwd_speed_multiplier: 0.5 -fwd_speed_multiplier: 0.5 -pwm: True -prep: ^!AFC:TRG4 -load: ^AFC:EXT4 - -[tmc2209 AFC_stepper leg4] -uart_pin: AFC:M4_UART -uart_address: 0 -run_current: 0.65 -sense_resistor: 0.110 - -[AFC_extruder extruder] -pin_tool_start: th:gpio28 -#pin_tool_end: -tool_stn: 76 # Distance from the toolhead sensor to the tip of the nozzle in mm. -tool_stn_unload: 90 # Unload distance for the toolhead in mm. -tool_sensor_after_extruder: 0 # Distance in mm. -tool_unload_speed: 25 # Unload speed in mm/s. Default is 25mm/s. -tool_load_speed: 25 # Load speed in mm/s. Default is 25mm/s. -buffer: TN - -[AFC_hub Turtle_1] -Type: Box_Turtle -afc_bowden_length: 1660 # Length of the Bowden tube from the hub to the toolhead sensor in mm. -move_dis: 50 # Distance to move the filament within the hub in mm. -cut: False # Hub has Cutter -#--=================================================================================-- -#------- Hub Cut --------------------------------------------------------------------- -#--=================================================================================-- -cut_cmd: AFC # CMD to use -cut_dist: 200 # How much filament to cut off (in mm). -cut_clear: 120 # How far the filament should retract back from the hub (in mm). -cut_servo_name: cut # Servos name in configuration to use -cut_min_length: 300.0 -cut_servo_pass_angle: 10 # Servo angle to align the Bowden tube with the hole for loading the toolhead. -cut_servo_clip_angle: 180 # Servo angle for cutting the filament. -cut_servo_prep_angle: 80 # Servo angle to prepare the filament for cutting (aligning the exit hole). -switch_pin: ^AFC:HUB - -[AFC_led AFC_Indicator] -pin: AFC:RGB1 -chain_count: 4 -color_order: GRBW -initial_RED: 0.0 -initial_GREEN: 0.0 -initial_BLUE: 0.0 -initial_WHITE: 0.0 - -#[neopixel Corners] -#pin: AFC:RGB2 -#chain_count: 6 - -#[neopixel Extra1] -#pin: AFC:RGB3 -#chain_count: 4 -#color_order: RGBW - -#[neopixel Extra2] -#pin: AFC:RGB4 -#chain_count: 4 - -[AFC_buffer TN] -advance_pin:^AFC:PE12 # set advance pin -trailing_pin:^AFC:PE13 # set trailing pin -multiplier_high: 1.05 # default 1.05, factor to feed more filament -multiplier_low: 0.95 # default 0.95, factor to feed less filament -velocity: 100 - - - diff --git a/printer_data/config/AFC/AFC_Macro_Vars.cfg b/printer_data/config/AFC/AFC_Macro_Vars.cfg deleted file mode 100644 index 6c3fa76..0000000 --- a/printer_data/config/AFC/AFC_Macro_Vars.cfg +++ /dev/null @@ -1,213 +0,0 @@ -[include macros/*.cfg] - -#--=================================================================================- -#------- Global --------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_GLOBAL_VARS] -description: Global variables used in multiple macros -gcode: # Leave Empty - -# Set this to match your AFC_stepper base naming in AFC_Hardware.cfg -variable_stepper_name : 'leg' # [AFC_stepper leg1] [AFC_stepper leg2]... - -variable_travel_speed : 350 # Speed mm/s -variable_z_travel_speed : 100 # Speed mm/s -variable_verbose : 2 # Console Output for macros - # 0 - None - # 1 - Limited - # 2 - All - - -#--=================================================================================- -#------- Cut ----------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_CUT_TIP_VARS] -description: Toolhead tip cutting macro configuration variables -gcode: # Leave empty - -# Speed related settings for tip cutting -# Note that if the cut speed is too fast, the steppers can lose steps. -# Therefore, for a cut: -# - We first make a fast move to accumulate some momentum and get the cut -# blade to the initial contact with the filament -# - We then make a slow move for the actual cut to happen -variable_cut_fast_move_speed : 32 # Speed mm/s -variable_cut_slow_move_speed : 10 # Speed mm/s -variable_evacuate_speed : 150 # Speed mm/s -variable_cut_dwell_time : 50 # Time to dwell at the cut point in ms -variable_cut_fast_move_fraction : 0.85 # Fraction of the move that uses fast move 0.0 - 1.0 -variable_extruder_move_speed : 25 # Speed mm/s for all extruder movement - -# If the toolhead returns to initial position after the cut is complete. -variable_restore_position : False # True = return to initial position, False = don't return - -# Distance to retract prior to making the cut, this reduces wasted filament but might cause clog -# if set too large and/or if there are gaps in the hotend assembly -# *This must be less than the distance from the nozzle to the cutter -variable_retract_length : 20 - -# This can help prevent cloggin of some toolheads by doing a quick tip from to reduce stringing -variable_quick_tip_forming : False - -# Direction to make the cut move (left, right, front, back) -variable_cut_direction : "left" - -# Number of times to run the cut movement -variable_cut_count : 2 - -# This should be the position of the toolhead where the cutter arm just -# lightly touches the depressor pin -variable_pin_loc_xy : 9, 310 # x,y coordinates of depressor pin - -# This distance is used to move toolhead to cut filament -# and to create a small saftely distance that aids in generating momentum -variable_pin_park_dist : 6.0 # Distance in mm - -# Position of the toolhead when the cutter is fully compressed. -# Distnace the toolhead needs to travel to compress the cutter arm. -# To calculate this distance start at the pin_loc_xy position and move -# your toolhead till the cutter arm is completely compressed. Take 0.5mm off this distance -# as a buffer. -# Ex pin_loc_x : 9, 310 fully compressed at 0, 310 set cut_move_dist to 8.5 -variable_cut_move_dist : 8.5 # Distance in mm - -# Retract length and speed after the cut so that the cutter can go back -# into its origin position -variable_rip_length : 1.0 # Distance in mm to retract to aid lever decompression (>= 0) -variable_rip_speed : 3 # Speed mm/s - -# Pushback of the remaining tip from the cold end into the hotend -# *Must be less then retract_length -variable_pushback_length : 25 # Distance in mm -variable_pushback_dwell_time : 20 # Time to dwell between the pushback - -# Safety margin for fast vs slow travel. When traveling to the pin location -# we make a safer but longer move if we are closer to the pin than this -# specified margin. Usually setting these to the size of the toolhead -# (plus a small margin) should be good enough -variable_safe_margin_xy : 30, 30 # Approx toolhead width +5mm, height +5mm) - - -#--=================================================================================- -#------- Poop ---------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_POOP_VARS] -description: Poop macro configuration variables -gcode: # Leave empty - - - -# Speed, in mm/s, of the purge. -variable_purge_spd : 6.5 - -# Speed, in mm/s to lift z after the purge is completed. Its a faster lift to keep it from -# sticking to the toolhead -variable_fast_z : 200 - -# Z height to raise to after the purge is completed as part of the fast z move -variable_z_lift : 0 - -# If the toolhead returns to initial position after the poop is complete. -variable_restore_position : False # True = return to initial position, False = don't return - -# The height to raise the nozzle above the tray before purging. This allows any built up -# pressure to escape before the purge. -variable_purge_start : 0.6 - -# Set the part cooling fan speed. Disabling can help prevent the nozzle from cooling down -# and stimulate flow, Enabling it can prevent blobs from sticking together. -variable_part_cooling_fan : True # Run it at full speed - -variable_part_cooling_fan_speed : 1.0 # Speed to run fan when enabled above. 0 - 1.0 - -# Time to pause after purge to allow fan to cool the poop -variable_purge_cool_time : 2 # Time in seconds - -# ==================== PURGE LENGTH TUNING -# Default purge length to fall back on when neither the tool map purge_volumes or -# parameter PURGE_LENGTH is set. -variable_purge_length : 72.111 - -# The absolute minimum to purge, even if you don't changed tools. This is to prime the -# nozzle before printing -variable_purge_length_minimum : 60.999 - -# The slicer values often are a bit too wastefull. Tune it here to get optimal values. 0.6 -# is a good starting point. -#variable_purge_length_modifier : 1 - -# Length of filament to add after the purge volume. Purge volumes don't always take -# cutters into account and therefor a swap from red to white might be long enough, but -# from white to red can be far too short. When should you alter this value: -# INCREASE: When the dark to light swaps are good, but light to dark aren't. -# DECREASE: When the light to dark swaps are good, but dark to light aren't. Don't -# forget to increase the purge_length_modifier -#variable_purge_length_addition : 0 - - -#--=================================================================================- -#------- Kick ---------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_KICK_VARS] -description: Kick macro configuration variables -gcode: # Leave empty -# Location to move before kick -variable_kick_start_loc : 250, 300, 10 - -variable_kick_z : 1.5 # Height to drop to for kick move - -variable_kick_speed : 150 # Speed of kick movement - -# Direction to make the kick move (left, right, front, back) -variable_kick_direction : "right" - -variable_kick_move_dist : 45 # How far to move to kick poop off - -variable_z_after_kick : 10 # Height of z after kick move - - -#--=================================================================================- -#------- Brush --------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_BRUSH_VARS] -description: Brush macro configuration variables -gcode: # Leave empty -# Position of the center of the brush (Set z to -1 if you dont want a z move) -variable_brush_loc : 80, 254 -variable_x_brush_end : 97 - -# Speed of cleaning moves when brushing -variable_brush_clean_speed : 150 - -# Accel of cleaning moves when brushing -variable_brush_clean_accel : 1500 - -# Total width in mm of the brush in the X direction -variable_brush_width : 34 - -# Total depth in mm of the brush in the Y direction -variable_brush_depth : 10 - -# True - Brush along Y axis first then X. False - Only brush along x -variable_y_brush : False - -variable_brush_count : 4 # Number of passes to make on the brush. - - -#--=================================================================================- -#------- Park ---------------------------------------------------------------------- -#--=================================================================================- -[gcode_macro _AFC_PARK_VARS] -description: Park macro configuration variables -gcode: # Leave empty -# Position to park the toolhead -variable_purge_x: 97 # x purge location -variable_purge_y: 254 # y purge location -variable_purge_x_entry: 97 # x entry location before going to the purge location -variable_purge_y_entry: 240 # y entry location before going to the purge location -variable_travel_speed: 300 # how fast travel speeds will be performed -variable_entry_speed: 25 # how fast to move from the entry location to the purge location -variable_z_min: 10 # minimum height of Z during park -# Height to raise Z when moving to park. Leave 0 to disable -# If you want z_hop during toolchanges please set the value in the AFC.cfg -variable_z_hop : 0 \ No newline at end of file diff --git a/printer_data/config/AFC/macros/AFC_macros.cfg b/printer_data/config/AFC/macros/AFC_macros.cfg deleted file mode 100644 index 4d447a5..0000000 --- a/printer_data/config/AFC/macros/AFC_macros.cfg +++ /dev/null @@ -1,76 +0,0 @@ -# Eject Loaded Lane -[gcode_macro BT_TOOL_UNLOAD] -description: Unload the currently loaded lane -gcode: - TOOL_UNLOAD - -[gcode_macro BT_CHANGE_TOOL] -description: Switch to a new lane by ejecting the previously loaded one -gcode: - {% set lane_num = params.LANE|default(1)|int %} - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - - CHANGE_TOOL LANE={stepper ~ lane_num} - -[gcode_macro BT_LANE_EJECT] -description: Fully eject the filament from the lane -gcode: - {% set lane_num = params.LANE|default(1)|int %} - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - - LANE_UNLOAD LANE={stepper ~ lane_num} - -[gcode_macro BT_LANE_MOVE] -description: Move the specified lane the specified amount -gcode: - {% set lane_num = params.LANE|default(1)|int %} - {% set dist = params.DISTANCE|default(20)|float %} - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - - LANE_MOVE LANE={stepper ~ lane_num} DISTANCE={dist} - -[gcode_macro BT_RESUME] -description: Resume the print after an error -gcode: - {% if not printer.pause_resume.is_paused %} - RESPOND MSG="Print is not paused. Resume ignored" - {% else %} - AFC_RESUME - {% endif %} - -[gcode_macro BT_PREP] -description: Run the AFC PREP sequence -gcode: - PREP - -[gcode_macro T0] -description: Change to tool 0 -gcode: - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - {% set ln = stepper ~ "1" %} - - CHANGE_TOOL LANE={ln} - -[gcode_macro T1] -description: Change to tool 1 -gcode: - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - {% set ln = stepper ~ "2" %} - - CHANGE_TOOL LANE={ln} - -[gcode_macro T2] -description: Change to tool 2 -gcode: - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - {% set ln = stepper ~ "3" %} - - CHANGE_TOOL LANE={ln} - -[gcode_macro T3] -description: Change to tool 3 -gcode: - {% set stepper = printer['gcode_macro _AFC_GLOBAL_VARS'].stepper_name|string %} - {% set ln = stepper ~ "4" %} - - CHANGE_TOOL LANE={ln} \ No newline at end of file diff --git a/printer_data/config/AFC/macros/Brush.cfg b/printer_data/config/AFC/macros/Brush.cfg deleted file mode 100644 index b3af4ba..0000000 --- a/printer_data/config/AFC/macros/Brush.cfg +++ /dev/null @@ -1,88 +0,0 @@ -[gcode_macro AFC_BRUSH] -description: Wipe the nozzle on the brush -gcode: - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set z_travel_speed = gVars['z_travel_speed'] * 60|float %} - {% set verbose = gVars['verbose']|int %} - {% set vars = printer['gcode_macro _AFC_BRUSH_VARS'] %} - {% set Bx, By, Bz = vars.brush_loc|map('float') %} - {% set brush_clean_accel = vars['brush_clean_accel']|float %} - {% set y_brush = vars['y_brush']|default(false)|lower == 'true' %} - {% set brush_clean_speed = vars['brush_clean_speed'] * 60|float %} - {% set brush_width = vars['brush_width']|float %} - {% set brush_depth = vars['brush_depth']|float %} - {% set brush_count = vars['brush_count']|int %} - {% set x_brush_end = vars['x_brush_end']|int %} - # Get printer bounds to make sure none of our cleaning moves fall outside of them - {% set x_max = printer.toolhead.axis_maximum.x %} - {% set x_min = printer.toolhead.axis_minimum.x %} - {% set y_max = printer.toolhead.axis_maximum.y %} - {% set y_min = printer.toolhead.axis_minimum.y %} - - # Get min and max positions for brush moves - {% set brush_x_max = Bx + brush_width / 2 %} - {% set brush_x_min = Bx - brush_width / 2 %} - {% set brush_y_max = By + brush_depth / 2 %} - {% set brush_y_min = By - brush_depth / 2 %} - - # Set the cleaning acceleration prior to any movement - {% set saved_accel = printer.toolhead.max_accel %} - SET_VELOCITY_LIMIT ACCEL={brush_clean_accel} - - {% if verbose > 0 %} - RESPOND TYPE=command MSG='AFC_Brush: Clean Nozzle' - {% endif %} - - # Move to center of the brush - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Brush: Move to Brush.' - {% endif %} - - G1 X{Bx} Y{By} F{travel_speed} - - {% if Bz >= 0 %} - G1 Z{Bz} F{z_travel_speed} - {% endif %} - - # Wipe procedure - {% if y_brush %} - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Brush: Y Brush Moves' - {% endif %} - {% for wipe in range(brush_count) %} - - {% if brush_y_min >= y_min %} - G1 Y{brush_y_min} F{brush_clean_speed} - {% endif %} - - {% if brush_y_max <= y_max %} - G1 Y{brush_y_max} F{brush_clean_speed} - {% endif %} - - G1 Y{By} F{brush_clean_speed} - - {% endfor %} - {% endif %} - - # Brush procedure - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Brush: X Brush Moves' - {% endif %} - {% for wipe in range(brush_count) %} - {% if brush_x_min >= x_min %} - G1 X{brush_x_min} F{brush_clean_speed} - {% endif %} - - {% if brush_x_max <= x_max %} - G1 X{brush_x_max} F{brush_clean_speed} - {% endif %} - - G1 X{Bx} F{brush_clean_speed} - - {% endfor %} - - G1 X{x_brush_end} F{brush_clean_speed} - - # Reset acceleration values to what it was before - SET_VELOCITY_LIMIT ACCEL={saved_accel} diff --git a/printer_data/config/AFC/macros/Cut.cfg b/printer_data/config/AFC/macros/Cut.cfg deleted file mode 100644 index f0b5972..0000000 --- a/printer_data/config/AFC/macros/Cut.cfg +++ /dev/null @@ -1,207 +0,0 @@ -[gcode_macro AFC_CUT] -description: Cut filament by pressing the cutter on a pin -gcode: - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set verbose = gVars['verbose']|int %} - {% set vars = printer['gcode_macro _AFC_CUT_TIP_VARS'] %} - {% set pin_loc_x, pin_loc_y = vars.pin_loc_xy|map('float') %} - {% set pin_park_dist = vars['pin_park_dist']|float %} - {% set retract_length = vars['retract_length']|float %} - {% set quick_tip_forming = vars['quick_tip_forming']|default(true)|lower == 'true' %} - {% set rip_length = vars['rip_length']|float %} - {% set cut_direction = vars['cut_direction']|default('')|lower %} - {% set pushback_length = vars['pushback_length']|float %} - {% set pushback_dwell_time = vars['pushback_dwell_time']|int %} - {% set extruder_move_speed = vars['extruder_move_speed'] * 60|float %} - {% set restore_position = vars['restore_position']|default(true)|lower == 'true' %} - {% set cut_count = vars['cut_count']|int %} - {% set y_cut = vars['y_cut']|default(false)|lower == 'true' %} - - {% if verbose > 0 %} - RESPOND TYPE=command MSG='AFC_Cut: Cut Filament' - {% endif %} - - {% set location_factor = { - 'left' : { 'x': 1, 'y': 0 }, - 'right' : { 'x': -1, 'y': 0 }, - 'front' : { 'x': 0, 'y': 1 }, - 'back' : { 'x': 0, 'y': -1 } - } %} - - # Add safe move distance to x or y depending on cut type - {% if cut_direction == "left" or cut_direction == "right" %} - {% set pin_park_x_loc = pin_loc_x + location_factor[cut_direction].x * pin_park_dist %} - {% set pin_park_y_loc = pin_loc_y %} - {% elif cut_direction == "front" or cut_direction == "back" %} - {% set pin_park_x_loc = pin_loc_x %} - {% set pin_park_y_loc = pin_loc_y + location_factor[cut_direction].y * pin_park_dist %} - {% else %} - { action_raise_error("Invalid cut direction. Check the cut_direction in your AFC_Macro_Vars.cfg file!") } - {% endif %} - - # Track total extruder move dist for future use - {% set _extruder_moved_dist = 0 %} - - {% if "xy" not in printer.toolhead.homed_axes %} - G28 X Y - {% endif %} - - SAVE_GCODE_STATE NAME=_AFC_CUT - - {% set prev_pa = printer.extruder.pressure_advance %} # Save current PA - SET_PRESSURE_ADVANCE ADVANCE=0 # Temporarily disable PA - - G90 # Absolute positioning - M83 # Relative extrusion - G92 E0 - {% if retract_length > 0 %} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Retract Filament for Cut' - {% endif %} - # Retract to save filament waste, repeat to allow some cooling - G1 E-{retract_length} F{extruder_move_speed} - - {% if quick_tip_forming %} - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Performing Quick Tip Form' - {% endif %} - G1 E{retract_length / 2} F{extruder_move_speed} - G1 E-{retract_length / 2} F{extruder_move_speed} - {% endif %} - - {% set _extruder_moved_dist = _extruder_moved_dist + retract_length %} - {% endif %} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Move to Cut Pin Location' - {% endif %} - _MOVE_TO_CUTTER_PIN PIN_PARK_X_LOC={pin_park_x_loc} PIN_PARK_Y_LOC={pin_park_y_loc} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Cut Move...' - {% endif %} - - {% for cut in range(cut_count - 1) %} - _DO_CUT_MOTION PIN_PARK_X_LOC={pin_park_x_loc} PIN_PARK_Y_LOC={pin_park_y_loc} RIP_LENGTH=0 - {% endfor %} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Final Cut...' - {% endif %} - # Do a rip on final cut pass - _DO_CUT_MOTION PIN_PARK_X_LOC={pin_park_x_loc} PIN_PARK_Y_LOC={pin_park_y_loc} RIP_LENGTH={rip_length} - - {% set _extruder_moved_dist = _extruder_moved_dist + rip_length %} - - # Optionally pushback of the cut piece into the hotend to avoid potential clog - {% if pushback_length > 0 %} - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Cut: Push cut tip back into hotend' - {% endif %} - G1 E{pushback_length} F{extruder_move_speed} - G4 P{pushback_dwell_time} - G1 E-{pushback_length} F{extruder_move_speed} - - {% set _extruder_moved_dist = _extruder_moved_dist - pushback_length %} - {% endif %} - - SET_PRESSURE_ADVANCE ADVANCE={prev_pa} # Restore PA - - # Restore state and optionally position - RESTORE_GCODE_STATE NAME=_AFC_CUT MOVE={1 if restore_position else 0} MOVE_SPEED={travel_speed} - - -#--=================================================================================- -#------- Helper macro for tip cutting ----------------------------------------------- -#--=================================================================================- -[gcode_macro _MOVE_TO_CUTTER_PIN] -description: Helper to move the toolhead to the target pin in either safe or faster way, depending on toolhead clearance -gcode: - {% set pin_park_x_loc = params.PIN_PARK_X_LOC|float %} - {% set pin_park_y_loc = params.PIN_PARK_Y_LOC|float %} - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set vars = printer['gcode_macro _AFC_CUT_TIP_VARS'] %} - {% set safe_margin_x, safe_margin_y = vars.safe_margin_xy|map('float') %} - - {% if ((printer.gcode_move.gcode_position.x - pin_park_x_loc)|abs < safe_margin_x) or ((printer.gcode_move.gcode_position.y - pin_park_y_loc)|abs < safe_margin_y) %} - # Make a safe but slower travel move - G1 X{pin_park_x_loc} F{travel_speed} - G1 Y{pin_park_y_loc} F{travel_speed} - {% else %} - G1 X{pin_park_x_loc} Y{pin_park_y_loc} F{travel_speed} - {% endif %} - - -#--=================================================================================- -#------- Helper macro for tip cutting ----------------------------------------------- -#--=================================================================================- -[gcode_macro _DO_CUT_MOTION] -description: Helper to do a single horizontal cut movement -gcode: - {% set pin_park_x_loc = params.PIN_PARK_X_LOC|float %} - {% set pin_park_y_loc = params.PIN_PARK_Y_LOC|float %} - {% set vars = printer['gcode_macro _AFC_CUT_TIP_VARS'] %} - {% set cut_move_dist = vars['cut_move_dist']|float %} - {% set cut_direction = vars['cut_direction']|default('')|lower %} - {% set cut_fast_move_fraction = vars['cut_fast_move_fraction']|float %} - {% set pin_park_dist = vars['pin_park_dist']|float %} - {% set cut_fast_move_speed = vars['cut_fast_move_speed'] * 60|float %} - {% set cut_slow_move_speed = vars['cut_slow_move_speed'] * 60|float %} - {% set cut_dwell_time = vars['cut_dwell_time']|float %} - {% set evacuate_speed = vars['evacuate_speed'] * 60|float %} - {% set rip_length = vars['rip_length']|float %} - {% set rip_speed = vars['rip_speed'] * 60|float %} - - # Get printer bounds to make sure none of our cut moves fall outside of them - {% set x_max = printer.toolhead.axis_maximum.x %} - {% set x_min = printer.toolhead.axis_minimum.x %} - {% set y_max = printer.toolhead.axis_maximum.y %} - {% set y_min = printer.toolhead.axis_minimum.y %} - - # Add the safe park distance to the cut move - {% set cut_dist = cut_move_dist + pin_park_dist %} - - {% set location_factor = { - 'left' : { 'x': -1, 'y': 0 }, - 'right' : { 'x': 1, 'y': 0 }, - 'front' : { 'x': 0, 'y': -1 }, - 'back' : { 'x': 0, 'y': 1 } - } %} - - {% if cut_direction == "left" or cut_direction == "right" %} - {% set fast_slow_transition_loc_x = pin_park_x_loc + location_factor[cut_direction].x * (cut_dist * cut_fast_move_fraction)| float %} - {% set full_cut_loc_x = pin_park_x_loc + location_factor[cut_direction].x * cut_dist| float %} - - {% if full_cut_loc_x > x_max or full_cut_loc_x < x_min %} - { action_raise_error("X Cut move is outside your printer bounds. Check the cut_move_dist in your AFC_Macro_Vars.cfg file!") } - {% else %} - G1 X{fast_slow_transition_loc_x} F{cut_fast_move_speed} # Fast move to initiate contact of the blade with filament - G1 X{full_cut_loc_x} F{cut_slow_move_speed} # Do the cut in slow move - G4 P{cut_dwell_time} - {% if rip_length > 0 %} - G1 E-{rip_length} F{rip_speed} - {% endif %} - G1 X{pin_park_x_loc} F{evacuate_speed} # Evacuate - {% endif %} - {% elif cut_direction == "front" or cut_direction == "back" %} - {% set fast_slow_transition_loc_y = pin_park_y_loc + location_factor[cut_direction].y * (cut_dist * cut_fast_move_fraction)| float %} - {% set full_cut_loc_y = pin_park_y_loc + location_factor[cut_direction].y * cut_dist| float %} - - {% if full_cut_loc_y > y_max or full_cut_loc_y < y_min %} - { action_raise_error("Y Cut move is outside your printer bounds. Check the cut_move_dist in your AFC_Macro_Vars.cfg file!") } - {% else %} - G1 Y{fast_slow_transition_loc_y} F{cut_fast_move_speed} # Fast move to initiate contact of the blade with filament - G1 Y{full_cut_loc_y} F{cut_slow_move_speed} # Do the cut in slow move - G4 P{cut_dwell_time} - {% if rip_length > 0 %} - G1 E-{rip_length} F{rip_speed} - {% endif %} - G1 Y{pin_park_y_loc} F{evacuate_speed} # Evacuate - {% endif %} - {% else %} - { action_raise_error("Invalid cut direction. Check the cut_direction in your AFC_Macro_Vars.cfg file!") } - {% endif %} - diff --git a/printer_data/config/AFC/macros/Kick.cfg b/printer_data/config/AFC/macros/Kick.cfg deleted file mode 100644 index 5f818fd..0000000 --- a/printer_data/config/AFC/macros/Kick.cfg +++ /dev/null @@ -1,67 +0,0 @@ -[gcode_macro AFC_KICK] -gcode: - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set z_travel_speed = gVars['z_travel_speed'] * 60|float %} - {% set verbose = gVars['verbose']|int %} - {% set vars = printer['gcode_macro _AFC_KICK_VARS'] %} - {% set kick_start_x, kick_start_y, kick_start_z = vars.kick_start_loc|map('float') %} - {% set kick_z = vars['kick_z']|float %} - {% set kick_direction = vars['kick_direction']|default('')|lower %} %} - {% set kick_move_dist = vars['kick_move_dist']|float %} - {% set z_after_kick = vars['z_after_kick']|float %} - {% set kick_speed = vars['kick_speed'] * 60|float %} - - # Get printer bounds to make sure none of our kick moves fall outside of them - {% set x_max = printer.toolhead.axis_maximum.x %} - {% set x_min = printer.toolhead.axis_minimum.x %} - {% set y_max = printer.toolhead.axis_maximum.y %} - {% set y_min = printer.toolhead.axis_minimum.y %} - - {% if verbose > 0 %} - RESPOND TYPE=command MSG='AFC_Kick: Starting Filament Kick' - {% endif %} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Kick: Move to Start Position' - {% endif %} - G1 Z{kick_start_z} F{z_travel_speed} - G1 X{kick_start_x} Y{kick_start_y} F{travel_speed} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Kick: Drop Z For Kick Move' - {% endif %} - {% if kick_z > 0 %} - G1 Z{kick_z} F{z_travel_speed} - {% else %} - RESPOND TYPE=command MSG='AFC-KICK: kick_z value to low. Please adjust in AFC_Macro_Vars.cfg. Defaulting to 0.5mm z-height' - G1 Z0.5 F{z_travel_speed} - {% endif %} - - {% set location_factor = { - 'left' : { 'x': -1, 'y': 0 }, - 'right' : { 'x': 1, 'y': 0 }, - 'front' : { 'x': 0, 'y': -1 }, - 'back' : { 'x': 0, 'y': 1 } - } %} - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Kick: Kick filament' - {% endif %} - {% if kick_direction == "left" or kick_direction == "right" %} - {% if (kick_start_x + location_factor[kick_direction].x * kick_move_dist) > x_max or (kick_start_x + location_factor[kick_direction].x * kick_move_dist) < x_min %} - { action_raise_error("X Kick move is outside your printer bounds. Check the kick_move_dist in your AFC_Macro_Vars.cfg file!") } - {% else %} - G1 X{kick_start_x + location_factor[kick_direction].x * kick_move_dist} F{kick_speed} - {% endif %} - {% elif kick_direction == "front" or kick_direction == "back" %} - {% if (kick_start_y + location_factor[kick_direction].y * kick_move_dist) > y_max or (kick_start_y + location_factor[kick_direction].y * kick_move_dist) < y_min %} - { action_raise_error("Y Kick move is outside your printer bounds. Check the kick_move_dist in your AFC_Macro_Vars.cfg file!") } - {% else %} - G1 Y{kick_start_y + location_factor[kick_direction].y * kick_move_dist} F{kick_speed} - {% endif %} - {% else %} - { action_raise_error("Error in kick movement. Check the directions in your AFC_Macro_Vars.cfg file!") } - {% endif %} - - G1 Z{z_after_kick} F{z_travel_speed} \ No newline at end of file diff --git a/printer_data/config/AFC/macros/Park.cfg b/printer_data/config/AFC/macros/Park.cfg deleted file mode 100644 index c685b07..0000000 --- a/printer_data/config/AFC/macros/Park.cfg +++ /dev/null @@ -1,41 +0,0 @@ -[gcode_macro AFC_PARK] -gcode: - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set verbose = gVars['verbose']|int %} - {% set z_travel_speed = gVars['z_travel_speed'] * 60|float %} - {% set vars = printer['gcode_macro _AFC_PARK_VARS'] %} - {% set Px = printer["gcode_macro _AFC_PARK_VARS"].purge_x|float %} - {% set Py = printer["gcode_macro _AFC_PARK_VARS"].purge_y|float %} - {% set Pxe = printer["gcode_macro _AFC_PARK_VARS"].purge_x_entry|float %} - {% set Pye = printer["gcode_macro _AFC_PARK_VARS"].purge_y_entry|float %} - {% set St = printer["gcode_macro _AFC_PARK_VARS"].travel_speed * 60 %} - {% set Se = printer["gcode_macro _AFC_PARK_VARS"].entry_speed * 60 %} - {% set z_min = printer["gcode_macro _AFC_PARK_VARS"].z_min|float %} - {% set z_hop = vars['z_hop']|float %} - {% set z_hop = params.Z_HOP|default(z_hop)|float %} - - {% set z_hop = vars['z_hop']|float %} - {% set z_hop = params.Z_HOP|default(z_hop)|float %} - - - {% set max_z = printer.toolhead.axis_maximum.z - printer.gcode_move.homing_origin.z |float %} - {% set cur_z = printer.gcode_move.gcode_position.z|float %} - - {% set z_safe = [cur_z + z_hop, max_z]|min %} - {% if z_safe > max_z %} - {% set z_safe = max_z %} - {% endif %} - {% if z_safe < z_min %} - {%set z_safe = z_min %} - {% endif %} - - {% if verbose > 0 %} - RESPOND TYPE=command MSG='AFC_Park: Park Toolhead' - {% endif %} - - G1 Z{z_safe} F{z_travel_speed} - {% if not (printer.toolhead.position.x == Px and printer.toolhead.position.y == Py) %} - G1 X{Pxe} Y{Pye} F{St} - G1 X{Px} Y{Py} F{Se} - {% endif %} \ No newline at end of file diff --git a/printer_data/config/AFC/macros/Poop.cfg b/printer_data/config/AFC/macros/Poop.cfg deleted file mode 100644 index 36a997f..0000000 --- a/printer_data/config/AFC/macros/Poop.cfg +++ /dev/null @@ -1,107 +0,0 @@ - -[gcode_macro AFC_POOP] -variable_max_iteration_length: 40 -variable_max_iterations_per_blob: 3 -variable_pressure_release_time: 1000 -variable_part_cooling_fan: True -variable_part_cooling_fan_speed: 40 - -gcode: - {% set gVars = printer['gcode_macro _AFC_GLOBAL_VARS'] %} - {% set travel_speed = gVars['travel_speed'] * 60|float %} - {% set verbose = gVars['verbose']|int %} - {% set vars = printer['gcode_macro _AFC_POOP_VARS'] %} - {% set purge_spd = vars['purge_spd'] * 60|float %} - {% set part_cooling_fan = vars['part_cooling_fan']|default(true)|lower == 'true' %} - {% set part_cooling_fan_speed = vars['part_cooling_fan_speed']|default(1.0)|float %} - {% set purge_cool_time = vars['purge_cool_time'] * 1000|float %} - {% set purge_length = vars['purge_length']|float %} - {% set purge_length_minimum = vars['purge_length_minimum']|float %} - {% set purge_start = vars['purge_start']|float %} - {% set restore_position = vars['restore_position']|default(true)|lower == 'true' %} - - {% if verbose > 0 %} - RESPOND TYPE=command MSG='AFC_Poop: Starting poop' - {% endif %} - - SAVE_GCODE_STATE NAME=_AFC_POOPING - - {% if part_cooling_fan %} - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Poop: Set Cooling Fan to Full Speed' - {% endif %} - {% set backup_fan_speed = printer.fan.speed %} - M106 P0 S{(part_cooling_fan_speed * 255)|int} - {% endif %} - - {% set backup_feedrate = printer.gcode_move.speed_factor %} - M220 S100 - - {% if params.PURGE_LENGTH %} - {% set purge_len = params.PURGE_LENGTH|float %} - {% else %} - {% set purge_len = purge_length %} - {% endif %} - - # Apply purge minimum - {% set purge_len = [purge_len, purge_length_minimum]|max %} - G90 - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Poop: Move To Purge Location' - {% endif %} - - - - {% set iterations = (purge_len / max_iteration_length)|round(0, 'ceil')|int %} - - # Repeat the process until purge_len is reached - {% for n in range(iterations) %} - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Poop: Purge Iteration {n}' - {% endif %} - - # Calculate current iteration in current blob - {% set step = n % max_iterations_per_blob %} - - {% set purge_amount_left = purge_len - (max_iteration_length * n) %} - {% set extrude_amount = [purge_amount_left, max_iteration_length]|min %} - {% set extrude_ratio = extrude_amount / max_iteration_length %} - - G91 - M83 - - {% set step_triangular = step * (step + 1) / 2 %} - {% set z_raise_substract = purge_start if step == 0 else step_triangular * iteration_z_change %} - {% set raise_z = (iteration_z_raise - z_raise_substract) * extrude_ratio %} - {% set raise_z = [raise_z, 0]|max %} - - {% set duration = extrude_amount / purge_spd %} - {% set speed = purge_spd %} - - G1 E{extrude_amount} F{speed} - - {% set max_iterations_reached = step == max_iterations_per_blob - 1 %} - {% set purge_length_reached = purge_len - max_iteration_length * (n + 1) <= 0 %} - - {% if max_iterations_reached or purge_length_reached %} - M83 - G4 P{purge_cool_time} # Pause - {% endif %} - {% endfor %} - - G90 - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Poop: Fast Z Lift to keep poop from sticking' - {% endif %} - 0 - - {% if verbose > 1 %} - RESPOND TYPE=command MSG='AFC_Poop: Restore fan speed and feedrate' - {% endif %} - {% if part_cooling_fan %} - M106 P0 S{(backup_fan_speed * 255)|int} - {% endif %} - M220 S{(backup_feedrate * 100)|int} - - RESTORE_GCODE_STATE NAME=_AFC_POOPING MOVE={1 if restore_position else 0} diff --git a/printer_data/config/AFC/mcu/AFC_Lite.cfg b/printer_data/config/AFC/mcu/AFC_Lite.cfg deleted file mode 100644 index 41ca507..0000000 --- a/printer_data/config/AFC/mcu/AFC_Lite.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[board_pins afc_lite] -mcu: AFC -aliases: - M1_STEP=PD4 , M1_DIR=PD3 , M1_EN=PD6 , M1_UART=PD5 , # M1_DIAG=PD2 , - M2_STEP=PC12 , M2_DIR=PC11 , M2_EN=PD1 , M2_UART=PD0 , # M2_DIAG=PC10 , - M3_STEP=PE2 , M3_DIR=PE3 , M3_EN=PE0 , M3_UART=PE1 , # M3_DIAG=PE4 , - M4_STEP=PD15 , M4_DIR=PD14 , M4_EN=PC7 , M4_UART=PC6 , # M4_DIAG=PC8 , - - # suggested switch pin configurations - HUB=PC4 , - TRG1=PC5 , TRG2=PB0 , TRG3=PB1 , TRG4=PB2 , - EXT1=PE8 , EXT2=PE9 , EXT3=PE10 , EXT4=PE11 , - - # alternate names for endstop ports - SW1=PC4 , SW2=PC5 , SW3=PB0 , SW4=PB1 , SW5=PB2 , SW6=PE7 , - SW7=PE8 , SW8=PE9 , SW9=PE10 , SW10=PE11 , SW11=PE12 , SW12=PE13 , - - MOT1_RWD=PA0 , MOT1_FWD=PA1 , MOT1_EN=PA2 , - MOT2_RWD=PA6 , MOT2_FWD=PA7 , MOT2_EN=PA5 , - MOT3_RWD=PB14 , MOT3_FWD=PB15 , MOT3_EN=PB13 , - MOT4_RWD=PD12 , MOT4_FWD=PD13 , MOT4_EN=PD11 , - - RGB1=PE14 , RGB2=PE15 , RGB3=PB10 , RGB4=PB11 , diff --git a/printer_data/config/AFC/mcu/MMB_1.0.cfg b/printer_data/config/AFC/mcu/MMB_1.0.cfg deleted file mode 100644 index 30e8937..0000000 --- a/printer_data/config/AFC/mcu/MMB_1.0.cfg +++ /dev/null @@ -1,18 +0,0 @@ -[board_pins mmb_1.1] -mcu: AFC -aliases: - M1_STEP=PB15 , M1_DIR=PB14 , M1_EN=PA8 , M1_UART=PA10 , # M1_DIAG=PA3 , - M2_STEP=PD2 , M2_DIR=PB13 , M2_EN=PD1 , M2_UART=PC7 , # M2_DIAG=PA4 , - M3_STEP=PD0 , M3_DIR=PD3 , M3_EN=PA15 , M3_UART=PC6 , # M3_DIAG=PB9 , - M4_STEP=PB6 , M4_DIR=PB7 , M4_EN=PB5 , M4_UART=PA9 , # M4_DIAG=PB8 , - - HUB=PC4 , - TRG1=PA3 , TRG2=PA4 , TRG3=PB9 , TRG4=PB12 , - EXT1=PC15 , EXT2=PC13 , EXT3=PC14 , EXT4=PB8 , - - MOT1_RWD=PA0 , - MOT2_RWD=PA1 , - MOT3_RWD=PB10 , - MOT4_RWD=PB2 , - - RGB1=PA2 , \ No newline at end of file diff --git a/printer_data/config/AFC/mcu/MMB_1.1.cfg b/printer_data/config/AFC/mcu/MMB_1.1.cfg deleted file mode 100644 index 5864a58..0000000 --- a/printer_data/config/AFC/mcu/MMB_1.1.cfg +++ /dev/null @@ -1,18 +0,0 @@ -[board_pins mmb_1.1] -mcu: AFC -aliases: - M1_STEP=PB15 , M1_DIR=PB14 , M1_EN=PB8 , M1_UART=PA10 , # M1_DIAG=PA3 , - M2_STEP=PD2 , M2_DIR=PB13 , M2_EN=PD1 , M2_UART=PC7 , # M2_DIAG=PA4 , - M3_STEP=PD0 , M3_DIR=PD3 , M3_EN=PA15 , M3_UART=PC6 , # M3_DIAG=PB9 , - M4_STEP=PB6 , M4_DIR=PB7 , M4_EN=PB5 , M4_UART=PA9 , # M4_DIAG=PB8 , - - HUB=PC4 , - TRG1=PA3 , TRG2=PA4 , TRG3=PB9 , TRG4=PB12 , - EXT1=PC15 , EXT2=PC13 , EXT3=PC14 , EXT4=PA8 , - - MOT1_RWD=PA0 , - MOT2_RWD=PA1 , - MOT3_RWD=PB10 , - MOT4_RWD=PB2 , - - RGB1=PA2 , \ No newline at end of file diff --git a/printer_data/config/AFC/mcu/TurtleNeckv2.cfg b/printer_data/config/AFC/mcu/TurtleNeckv2.cfg deleted file mode 100644 index cea5875..0000000 --- a/printer_data/config/AFC/mcu/TurtleNeckv2.cfg +++ /dev/null @@ -1,12 +0,0 @@ -[mcu turtleneck] -serial: /dev/serial/by-id/**YOUR SERIAL HERE** - -[board_pins tn_v2] -mcu: turtleneck -aliases: - TRAILING = PB1, - ADVANCE = PB2, - - ES1 = PB5, ES2 = PB6, ES3 = PB7, ES4 = PB8, ES5 = PB9, - - RGB = PD3, diff --git a/printer_data/config/KAMP_Settings.cfg b/printer_data/config/KAMP_Settings.cfg deleted file mode 100644 index 4b5695c..0000000 --- a/printer_data/config/KAMP_Settings.cfg +++ /dev/null @@ -1,36 +0,0 @@ -# Below you can include specific configuration files depending on what you want KAMP to do: - -#[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/Voron_Purge.cfg] # Include to enable adaptive Voron logo 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. - -[gcode_macro _KAMP_Settings] -description: This macro contains all adjustable settings for KAMP - -# The following variables are settings for KAMP as a whole. -variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging. - -# The following variables are for adjusting adaptive mesh settings for KAMP. -variable_mesh_margin: 0 # Expands the mesh size in millimeters if desired. Leave at 0 to disable. -variable_fuzz_amount: 0 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable. - -# The following variables are for those with a dockable probe like Klicky, Euclid, etc. # ---------------- Attach Macro | Detach Macro -variable_probe_dock_enable: False # Set to True to enable the usage of a dockable probe. # --------------------------------------------- -variable_attach_macro: 'Attach_Probe' # The macro that is used to attach the probe. # Klicky Probe: 'Attach_Probe' | 'Dock_Probe' -variable_detach_macro: 'Dock_Probe' # The macro that is used to store the probe. # Euclid Probe: 'Deploy_Probe' | 'Stow_Probe' - # Legacy Gcode: 'M401' | 'M402' - -# The following variables are for adjusting adaptive purge settings for KAMP. -variable_purge_height: 0.8 # Z position of nozzle during purge, default is 0.8. -variable_tip_distance: 0 # Distance between tip of filament and nozzle before purge. Should be similar to PRINT_END final retract amount. -variable_purge_margin: 10 # Distance the purge will be in front of the print area, default is 10. -variable_purge_amount: 30 # Amount of filament to be purged prior to printing. -variable_flow_rate: 12 # Flow rate of purge in mm3/s. Default is 12. - -# The following variables are for adjusting the Smart Park feature for KAMP, which will park the printhead near the print area at a specified height. -variable_smart_park_height: 10 # Z position for Smart Park, default is 10. - -gcode: # Gcode section left intentionally blank. Do not disturb. - - {action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} diff --git a/printer_data/config/Macros/search.cfg b/printer_data/config/Macros/search.cfg deleted file mode 100644 index 1adf47c..0000000 --- a/printer_data/config/Macros/search.cfg +++ /dev/null @@ -1,36 +0,0 @@ -[gcode_macro SEARCH_VARS] -gcode: - {% set search = params.S|lower %} - {% set ns = namespace() %} - {% for item in printer %} - {% if ' ' in item %} - {% set ns.path = ['printer', "['%s']" % (item), ''] %} - {% else %} - {% set ns.path = ['printer.', item, ''] %} - {% endif %} - - {% if search in ns.path|lower %} - { action_respond_info(ns.path|join) } - {% endif %} - - {% if printer[item].items() %} - {% for childkey, child in printer[item].items() recursive %} - {% set ns.path = ns.path[:loop.depth|int + 1] %} - - {% if ' ' in childkey %} - {% set null = ns.path.append("['%s']" % (childkey)) %} - {% else %} - {% set null = ns.path.append(".%s" % (childkey)) %} - {% endif %} - - {% if child is mapping %} - { loop(child.items()) } - {% else %} - {% if search in ns.path|lower %} - { action_respond_info("%s : %s" % (ns.path|join, child)) } - {% endif %} - {% endif %} - - {% endfor %} - {% endif %} - {% endfor %} \ No newline at end of file diff --git a/printer_data/config/ShakeTune_results/belts/belts_20240605_211502.png b/printer_data/config/ShakeTune_results/belts/belts_20240605_211502.png deleted file mode 100644 index 38f7450..0000000 Binary files a/printer_data/config/ShakeTune_results/belts/belts_20240605_211502.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/belts/belts_20240605_214945.png b/printer_data/config/ShakeTune_results/belts/belts_20240605_214945.png deleted file mode 100644 index 6b5f888..0000000 Binary files a/printer_data/config/ShakeTune_results/belts/belts_20240605_214945.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/belts/beltscomparison_20241006_204458.png b/printer_data/config/ShakeTune_results/belts/beltscomparison_20241006_204458.png deleted file mode 100644 index d68c513..0000000 Binary files a/printer_data/config/ShakeTune_results/belts/beltscomparison_20241006_204458.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210411_X.png b/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210411_X.png deleted file mode 100644 index 080b2b8..0000000 Binary files a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210411_X.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210649_Y.png b/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210649_Y.png deleted file mode 100644 index 7553408..0000000 Binary files a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_210649_Y.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215257_X.png b/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215257_X.png deleted file mode 100644 index bf915b6..0000000 Binary files a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215257_X.png and /dev/null differ diff --git a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215536_Y.png b/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215536_Y.png deleted file mode 100644 index 38aa4db..0000000 Binary files a/printer_data/config/ShakeTune_results/inputshaper/shaper_20240605_215536_Y.png and /dev/null differ diff --git a/printer_data/config/crowsnest.conf b/printer_data/config/crowsnest.conf index e1320da..c7ed3f8 100644 --- a/printer_data/config/crowsnest.conf +++ b/printer_data/config/crowsnest.conf @@ -41,7 +41,7 @@ enable_rtsp: false # If camera-streamer is used, this enabl rtsp_port: 8554 # Set different ports for each device! port: 8080 # HTTP/MJPG Stream/Snapshot Port device: /dev/video3 # See Log for available ... -resolution: 1280x720 # widthxheight format +resolution: 640x480 # widthxheight format max_fps: 15 # If Hardware Supports this it will be forced, otherwise ignored/coerced. #custom_flags: # You can run the Stream Services with custom flags. #v4l2ctl: # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of. diff --git a/printer_data/config/mainsail.cfg b/printer_data/config/mainsail.cfg deleted file mode 100644 index 61e1443..0000000 --- a/printer_data/config/mainsail.cfg +++ /dev/null @@ -1,294 +0,0 @@ -## Client klipper macro definitions -## -## Copyright (C) 2022 Alex Zellner -## -## This file may be distributed under the terms of the GNU GPLv3 license -## -## !!! This file is read-only. Maybe the used editor indicates that. !!! -## -## Customization: -## 1) copy the gcode_macro _CLIENT_VARIABLE (see below) to your printer.cfg -## 2) remove the comment mark (#) from all lines -## 3) change any value in there to your needs -## -## Use the PAUSE macro direct in your M600: -## e.g. with a different park position front left and a minimal height of 50 -## [gcode_macro M600] -## description: Filament change -## gcode: PAUSE X=10 Y=10 Z_MIN=50 -## Z_MIN will park the toolhead at a minimum of 50 mm above to bed to make it easier for you to swap filament. -## -## Client variable macro for your printer.cfg -#[gcode_macro _CLIENT_VARIABLE] -#variable_use_custom_pos : False ; use custom park coordinates for x,y [True/False] -#variable_custom_park_x : 0.0 ; custom x position; value must be within your defined min and max of X -#variable_custom_park_y : 0.0 ; custom y position; value must be within your defined min and max of Y -#variable_custom_park_dz : 2.0 ; custom dz value; the value in mm to lift the nozzle when move to park position -#variable_retract : 1.0 ; the value to retract while PAUSE -#variable_cancel_retract : 5.0 ; the value to retract while CANCEL_PRINT -#variable_speed_retract : 35.0 ; retract speed in mm/s -#variable_unretract : 1.0 ; the value to unretract while RESUME -#variable_speed_unretract : 35.0 ; unretract speed in mm/s -#variable_speed_hop : 15.0 ; z move speed in mm/s -#variable_speed_move : 100.0 ; move speed in mm/s -#variable_park_at_cancel : False ; allow to move the toolhead to park while execute CANCEL_PRINT [True/False] -#variable_park_at_cancel_x : None ; different park position during CANCEL_PRINT [None/Position as Float]; park_at_cancel must be True -#variable_park_at_cancel_y : None ; different park position during CANCEL_PRINT [None/Position as Float]; park_at_cancel must be True -## !!! Caution [firmware_retraction] must be defined in the printer.cfg if you set use_fw_retract: True !!! -#variable_use_fw_retract : False ; use fw_retraction instead of the manual version [True/False] -#variable_idle_timeout : 0 ; time in sec until idle_timeout kicks in. Value 0 means that no value will be set or restored -#variable_runout_sensor : "" ; If a sensor is defined, it will be used to cancel the execution of RESUME in case no filament is detected. -## Specify the config name of the runout sensor e.g "filament_switch_sensor runout". Hint use the same as in your printer.cfg -## !!! Custom macros, please use with care and review the section of the corresponding macro. -## These macros are for simple operations like setting a status LED. Please make sure your macro does not interfere with the basic macro functions. -## Only single line commands are supported, please create a macro if you need more than one command. -#variable_user_pause_macro : "" ; Everything inside the "" will be executed after the klipper base pause (PAUSE_BASE) function -#variable_user_resume_macro: "" ; Everything inside the "" will be executed before the klipper base resume (RESUME_BASE) function -#variable_user_cancel_macro: "" ; Everything inside the "" will be executed before the klipper base cancel (CANCEL_PRINT_BASE) function -#gcode: - -[virtual_sdcard] -path: ~/printer_data/gcodes -on_error_gcode: CANCEL_PRINT - -[pause_resume] -#recover_velocity: 50. -# When capture/restore is enabled, the speed at which to return to -# the captured position (in mm/s). Default is 50.0 mm/s. - -[display_status] - -[respond] - -[gcode_macro CANCEL_PRINT] -description: Cancel the actual running print -rename_existing: CANCEL_PRINT_BASE -gcode: - ##### get user parameters or use default ##### - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set allow_park = client.park_at_cancel|default(false)|lower == 'true' %} - {% set retract = client.cancel_retract|default(5.0)|abs %} - ##### define park position ##### - {% set park_x = "" if (client.park_at_cancel_x|default(none) is none) - else "X=" ~ client.park_at_cancel_x %} - {% set park_y = "" if (client.park_at_cancel_y|default(none) is none) - else "Y=" ~ client.park_at_cancel_y %} - {% set custom_park = park_x|length > 0 or park_y|length > 0 %} - ##### end of definitions ##### - # restore idle_timeout time if needed - {% if printer['gcode_macro RESUME'].restore_idle_timeout > 0 %} - SET_IDLE_TIMEOUT TIMEOUT={printer['gcode_macro RESUME'].restore_idle_timeout} - {% endif %} - {% if (custom_park or not printer.pause_resume.is_paused) and allow_park %} _TOOLHEAD_PARK_PAUSE_CANCEL {park_x} {park_y} {% endif %} - _CLIENT_RETRACT LENGTH={retract} - TURN_OFF_HEATERS - M106 S0 - {client.user_cancel_macro|default("")} - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False - # clear pause_next_layer and pause_at_layer as preparation for next print - SET_PAUSE_NEXT_LAYER ENABLE=0 - SET_PAUSE_AT_LAYER ENABLE=0 LAYER=0 - CANCEL_PRINT_BASE - -[gcode_macro PAUSE] -description: Pause the actual running print -rename_existing: PAUSE_BASE -gcode: - ##### get user parameters or use default ##### - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set idle_timeout = client.idle_timeout|default(0) %} - {% set temp = printer[printer.toolhead.extruder].target if printer.toolhead.extruder != '' else 0 %} - {% set restore = False if printer.toolhead.extruder == '' - else True if params.RESTORE|default(1)|int == 1 else False %} - ##### end of definitions ##### - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=last_extruder_temp VALUE="{{'restore': restore, 'temp': temp}}" - # set a new idle_timeout value - {% if idle_timeout > 0 %} - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=restore_idle_timeout VALUE={printer.configfile.settings.idle_timeout.timeout} - SET_IDLE_TIMEOUT TIMEOUT={idle_timeout} - {% endif %} - PAUSE_BASE - {client.user_pause_macro|default("")} - _TOOLHEAD_PARK_PAUSE_CANCEL {rawparams} - -[gcode_macro RESUME] -description: Resume the actual running print -rename_existing: RESUME_BASE -variable_last_extruder_temp: {'restore': False, 'temp': 0} -variable_restore_idle_timeout: 0 -variable_idle_state: False -gcode: - ##### get user parameters or use default ##### - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} - {% set sp_move = client.speed_move|default(velocity) %} - {% set runout_resume = True if client.runout_sensor|default("") == "" # no runout - else True if not printer[client.runout_sensor].enabled # sensor is disabled - else printer[client.runout_sensor].filament_detected %} # sensor status - {% set can_extrude = True if printer.toolhead.extruder == '' # no extruder defined in config - else printer[printer.toolhead.extruder].can_extrude %} # status of active extruder - {% set do_resume = False %} - {% set prompt_txt = [] %} - ##### end of definitions ##### - #### Printer comming from timeout idle state #### - {% if printer.idle_timeout.state|upper == "IDLE" or idle_state %} - SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=idle_state VALUE=False - {% if last_extruder_temp.restore %} - # we need to use the unicode (\u00B0) for the ° as py2 env's would throw an error otherwise - RESPOND TYPE=echo MSG='{"Restoring \"%s\" temperature to %3.1f\u00B0C, this may take some time" % (printer.toolhead.extruder, last_extruder_temp.temp) }' - M109 S{last_extruder_temp.temp} - {% set do_resume = True %} - {% elif can_extrude %} - {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} - {% endif %} - #### Printer comming out of regular PAUSE state #### - {% elif can_extrude %} - {% set do_resume = True %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder}' - {% set _d = prompt_txt.append("\"%s\" not hot enough, please heat up again and press RESUME" % printer.toolhead.extruder) %} - {% endif %} - {% if runout_resume %} - {% if do_resume %} - {% if restore_idle_timeout > 0 %} SET_IDLE_TIMEOUT TIMEOUT={restore_idle_timeout} {% endif %} # restore idle_timeout time - {client.user_resume_macro|default("")} - _CLIENT_EXTRUDE - RESUME_BASE VELOCITY={params.VELOCITY|default(sp_move)} - {% endif %} - {% else %} - RESPOND TYPE=error MSG='{"Resume aborted !!! \"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]}' - {% set _d = prompt_txt.append("\"%s\" detects no filament, please load filament and press RESUME" % (client.runout_sensor.split(" "))[1]) %} - {% endif %} - ##### Generate User Information box in case of abort ##### - {% if not (runout_resume and do_resume) %} - RESPOND TYPE=command MSG="action:prompt_begin RESUME aborted !!!" - {% for element in prompt_txt %} - RESPOND TYPE=command MSG='{"action:prompt_text %s" % element}' - {% endfor %} - RESPOND TYPE=command MSG="action:prompt_footer_button Ok|RESPOND TYPE=command MSG=action:prompt_end|info" - RESPOND TYPE=command MSG="action:prompt_show" - {% endif %} - -# Usage: SET_PAUSE_NEXT_LAYER [ENABLE=[0|1]] [MACRO=] -[gcode_macro SET_PAUSE_NEXT_LAYER] -description: Enable a pause if the next layer is reached -gcode: - {% set pause_next_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_next_layer %} - {% set ENABLE = params.ENABLE|default(1)|int != 0 %} - {% set MACRO = params.MACRO|default(pause_next_layer.call, True) %} - SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_next_layer VALUE="{{ 'enable': ENABLE, 'call': MACRO }}" - -# Usage: SET_PAUSE_AT_LAYER [ENABLE=[0|1]] [LAYER=] [MACRO=] -[gcode_macro SET_PAUSE_AT_LAYER] -description: Enable/disable a pause if a given layer number is reached -gcode: - {% set pause_at_layer = printer['gcode_macro SET_PRINT_STATS_INFO'].pause_at_layer %} - {% set ENABLE = params.ENABLE|int != 0 if params.ENABLE is defined - else params.LAYER is defined %} - {% set LAYER = params.LAYER|default(pause_at_layer.layer)|int %} - {% set MACRO = params.MACRO|default(pause_at_layer.call, True) %} - SET_GCODE_VARIABLE MACRO=SET_PRINT_STATS_INFO VARIABLE=pause_at_layer VALUE="{{ 'enable': ENABLE, 'layer': LAYER, 'call': MACRO }}" - -# Usage: SET_PRINT_STATS_INFO [TOTAL_LAYER=] [CURRENT_LAYER= ] -[gcode_macro SET_PRINT_STATS_INFO] -rename_existing: SET_PRINT_STATS_INFO_BASE -description: Overwrite, to get pause_next_layer and pause_at_layer feature -variable_pause_next_layer: { 'enable': False, 'call': "PAUSE" } -variable_pause_at_layer : { 'enable': False, 'layer': 0, 'call': "PAUSE" } -gcode: - {% if pause_next_layer.enable %} - RESPOND TYPE=echo MSG='{"%s, forced by pause_next_layer" % pause_next_layer.call}' - {pause_next_layer.call} ; execute the given gcode to pause, should be either M600 or PAUSE - SET_PAUSE_NEXT_LAYER ENABLE=0 - {% elif pause_at_layer.enable and params.CURRENT_LAYER is defined and params.CURRENT_LAYER|int == pause_at_layer.layer %} - RESPOND TYPE=echo MSG='{"%s, forced by pause_at_layer [%d]" % (pause_at_layer.call, pause_at_layer.layer)}' - {pause_at_layer.call} ; execute the given gcode to pause, should be either M600 or PAUSE - SET_PAUSE_AT_LAYER ENABLE=0 - {% endif %} - SET_PRINT_STATS_INFO_BASE {rawparams} - -##### internal use ##### -[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] -description: Helper: park toolhead used in PAUSE and CANCEL_PRINT -gcode: - ##### get user parameters or use default ##### - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set velocity = printer.configfile.settings.pause_resume.recover_velocity %} - {% set use_custom = client.use_custom_pos|default(false)|lower == 'true' %} - {% set custom_park_x = client.custom_park_x|default(0.0) %} - {% set custom_park_y = client.custom_park_y|default(0.0) %} - {% set park_dz = client.custom_park_dz|default(2.0)|abs %} - {% set sp_hop = client.speed_hop|default(15) * 60 %} - {% set sp_move = client.speed_move|default(velocity) * 60 %} - ##### get config and toolhead values ##### - {% set origin = printer.gcode_move.homing_origin %} - {% set act = printer.gcode_move.gcode_position %} - {% set max = printer.toolhead.axis_maximum %} - {% set cone = printer.toolhead.cone_start_z|default(max.z) %} ; height as long the toolhead can reach max and min of an delta - {% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch'] - else False %} - ##### define park position ##### - {% set z_min = params.Z_MIN|default(0)|float %} - {% set z_park = [[(act.z + park_dz), z_min]|max, (max.z - origin.z)]|min %} - {% set x_park = params.X if params.X is defined - else custom_park_x if use_custom - else 0.0 if round_bed - else (max.x - 5.0) %} - {% set y_park = params.Y if params.Y is defined - else custom_park_y if use_custom - else (max.y - 5.0) if round_bed and z_park < cone - else 0.0 if round_bed - else (max.y - 5.0) %} - ##### end of definitions ##### - _CLIENT_RETRACT - {% if "xyz" in printer.toolhead.homed_axes %} - G90 - G1 Z{z_park} F{sp_hop} - G1 X{x_park} Y{y_park} F{sp_move} - {% if not printer.gcode_move.absolute_coordinates %} G91 {% endif %} - {% else %} - RESPOND TYPE=echo MSG='Printer not homed' - {% endif %} - -[gcode_macro _CLIENT_EXTRUDE] -description: Extrudes, if the extruder is hot enough -gcode: - ##### get user parameters or use default ##### - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set use_fw_retract = (client.use_fw_retract|default(false)|lower == 'true') and (printer.firmware_retraction is defined) %} - {% set length = params.LENGTH|default(client.unretract)|default(1.0)|float %} - {% set speed = params.SPEED|default(client.speed_unretract)|default(35) %} - {% set absolute_extrude = printer.gcode_move.absolute_extrude %} - ##### end of definitions ##### - {% if printer.toolhead.extruder != '' %} - {% if printer[printer.toolhead.extruder].can_extrude %} - {% if use_fw_retract %} - {% if length < 0 %} - G10 - {% else %} - G11 - {% endif %} - {% else %} - M83 - G1 E{length} F{(speed|float|abs) * 60} - {% if absolute_extrude %} - M82 - {% endif %} - {% endif %} - {% else %} - RESPOND TYPE=echo MSG='{"\"%s\" not hot enough" % printer.toolhead.extruder}' - {% endif %} - {% endif %} - -[gcode_macro _CLIENT_RETRACT] -description: Retracts, if the extruder is hot enough -gcode: - {% set client = printer['gcode_macro _CLIENT_VARIABLE']|default({}) %} - {% set length = params.LENGTH|default(client.retract)|default(1.0)|float %} - {% set speed = params.SPEED|default(client.speed_retract)|default(35) %} - - _CLIENT_EXTRUDE LENGTH=-{length|float|abs} SPEED={speed|float|abs} - diff --git a/printer_data/config/mmu-20241127_231535/addons/mmu_erec_cutter.cfg b/printer_data/config/mmu-20241127_231535/addons/mmu_erec_cutter.cfg deleted file mode 100644 index dadc1b4..0000000 --- a/printer_data/config/mmu-20241127_231535/addons/mmu_erec_cutter.cfg +++ /dev/null @@ -1,89 +0,0 @@ -# Include servo hardware definition separately to allow for automatic upgrade -[include mmu_erec_cutter_hw.cfg] - -########################################################################### -# Optional EREC Filament Cutter Support -# -# https://github.com/kevinakasam/ERCF_Filament_Cutter -# -# This is the supplementary macro to support filament cutting at the MMU -# on a ERCF design. -# -# To configure: -# 1. Add this to your printer.cfg: -# -# [include mmu/addons/mmu_erec_cutter.cfg] -# -# 2. In mmu_macro_vars.cfg, change this line: -# -# variable_user_post_unload_extension : "EREC_CUTTER_ACTION" -# -# 3. Tune the servo configuration and macro "variables" below -# - -# EREC CUTTER CONFIGURATION ----------------------------------------------- -# (addons/mmu_erec_cutter.cfg) -# -[gcode_macro _EREC_VARS] -description: Empty macro to store the variables -gcode: # Leave empty - -# These variables control the servo movement -variable_servo_closed_angle : 70 ; Servo angle for closed postion with bowden aligned MMU -variable_servo_open_angle : 10 ; Servo angle to open up the cutter and move bowden away from MMU -variable_servo_duration : 1.5 ; Time (s) of PWM pulse train to activate servo -variable_servo_idle_time : 1.8 ; Time (s) to let the servo to reach it's position - -# Controls for feed and cut lengths -variable_feed_length : 48 ; Distance in mm from gate parking position to blade (ERCFv1.1: 58, v2/other: 48) -variable_cut_length : 10 ; Amount in mm of filament to cut -variable_cut_attempts : 1 ; Number of times the cutter tries to cut the filament - - -########################################################################### -# Macro to perform the cutting step. Designed to be included to the -# _MMU_POST_UNLOAD step -# -[gcode_macro EREC_CUTTER_ACTION] -description: Cut off the filament tip at the MMU after the unload sequence is complete -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - - _CUTTER_OPEN - _MMU_STEP_MOVE MOVE={vars.feed_length + vars.cut_length} - {% for i in range(vars.cut_attempts - 1) %} - _CUTTER_CLOSE - _CUTTER_OPEN - {% endfor %} - _MMU_STEP_MOVE MOVE=-1 - _CUTTER_CLOSE - _MMU_EVENT EVENT="filament_cut" # Count as one cut for consumption counter - - _MMU_STEP_SET_FILAMENT STATE=2 # FILAMENT_POS_START_BOWDEN - _MMU_STEP_UNLOAD_GATE # Repeat gate parking move - _MMU_M400 # Wait on both move queues - -[gcode_macro _CUTTER_ANGLE] -description: Helper macro to set cutter servo angle -gcode: - {% set angle = params.ANGLE|default(0)|int %} - SET_SERVO SERVO=cut_servo ANGLE={angle} - -[gcode_macro _CUTTER_CLOSE] -description: Helper macro to set cutting servo the closed position -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - SET_SERVO SERVO=cut_servo ANGLE={vars.servo_closed_angle} DURATION={vars.servo_duration} - G4 P{vars.servo_idle_time * 1000} - RESPOND MSG="EREC Cutter closed" - M400 - -[gcode_macro _CUTTER_OPEN] -description: Helper macro to set cutting servo the open position -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - SET_SERVO SERVO=cut_servo ANGLE={vars.servo_open_angle} DURATION={vars.servo_duration} - G4 P{vars.servo_idle_time * 1000} - RESPOND MSG="EREC Cutter open" - M400 - diff --git a/printer_data/config/mmu-20241127_231535/base/mmu_hardware.cfg b/printer_data/config/mmu-20241127_231535/base/mmu_hardware.cfg deleted file mode 100644 index 70d4eb7..0000000 --- a/printer_data/config/mmu-20241127_231535/base/mmu_hardware.cfg +++ /dev/null @@ -1,295 +0,0 @@ -######################################################################################################################## -# Happy Hare MMU Software -# -# EDIT THIS FILE BASED ON YOUR SETUP -# -# Copyright (C) 2022 moggieuk#6538 (discord) moggieuk@hotmail.com -# This file may be distributed under the terms of the GNU GPLv3 license. -# -# Goal: Happy Hare MMU hardware config file with config for AFC_LITE_1 MCU board -# -# (\_/) -# ( *,*) -# (")_(") Happy Hare Ready -# -# -# Notes about setup of common external mcus can be found here: -# https://github.com/moggieuk/Happy-Hare/blob/main/doc/mcu_notes.md -# -# Note about "touch" endstops: Happy Hare provides extremely flexible homing options using both single steppers or -# synced steppers. The "touch" option leverages stallguard and thus requires the appropriate 'diag_pin' and stallguard -# parameters set on the TMC driver section. If you have the diag_pin exposed, it is harmless to define this because -# they will only be used when explicitly needed and configured. -# -# Touch option for each stepper provides these benefits / possibilities (experimental): -# - on extruder stepper allows for the automatic detection of the nozzle! -# - on selector stepper allows for the automatic detection of filament stuck in the gate and subsequent recovery -# - on gear stepper allows for the automatic detection of the extruder entrance -# -# These sound wonderful right? They are, but there are caveats: -# - Some external mcu's are terrible at detecting stallguard and often result in an "undervoltage error" -# It is generally possible to get selector touch (TMC2209) tuned especially if you set 'stealthchop_threshold' -# to a value greater than homing speeds and less than move speed. I.e. the stepper runs in stealthchop mode when -# homing. [klipper experts will know that it switches the chip mode automatically to stealthchop and then back for -# Stallguard2 support, however the automatic switching back to spreadcycle at the end homing move seems to provoke -# the error condition and setting 'shealthchop_threshold' appropriately avoids this condition. More than you wanted -# to know I'm sure! -# - I have not had much luck with touch (stallguard) on the gear stepper with EASY-BRD and ERB mcu's and you really -# want the extra torque of spreadcycle so adjusting 'stealthchop_threshold' is not really an option -# - Enabling on the extruder stepper is viable but you will likley have to change jumpers on your main mcu to expose -# the DIAG pin for whichever driver the extruder stepper is connected to. -# -# In summary, "touch" homing with your MMU is an advanced option that requires patience and careful tuning. Everything -# works with regular endstops and there are workaround options for certain homing points (like extruder entry) in -# the absence of any endstop. I'm really interested in creative setups. Ping me on Discord (moggieuk#6538) -# -# See 'mmu.cfg' for serial definition and pins aliaes -# -# HOMING CAPABLE EXTRUDER (VERY ADVANCED) ----------------------------------------------------------------------------- -# With Happy Hare installed even the extruder can be homed. You will find the usual 'endstop' parameters can be added -# to your '[extruder]' section. Useless you have some clever load cell attached to your nozzle it only really makes -# sense to configure stallguard style "touch" homing. To do this add lines similar to this to your existing -# '[extruder]' definition in printer.cfg. -# -# [extruder] -# endstop_pin: tmc2209_extruder:virtual_endstop -# -# Also be sure to add the appropriate stallguard config to the TMC section, e.g. -# -# [tmc2209 extruder] -# diag_pin: E_DIAG # Set to MCU pin connected to TMC DIAG pin for extruder -# driver_SGTHRS: 100 # 255 is most sensitive value, 0 is least sensitive -# -# Happy Hare will take care of the rest and add a 'mmu_ext_touch' endstop automatically -# - - -# MMU MACHINE / TYPE --------------------------------------------------------------------------------------------------- -# ███╗ ███╗███╗ ███╗██╗ ██╗ ███╗ ███╗ █████╗ ██████╗██╗ ██╗██╗███╗ ██╗███████╗ -# ████╗ ████║████╗ ████║██║ ██║ ████╗ ████║██╔══██╗██╔════╝██║ ██║██║████╗ ██║██╔════╝ -# ██╔████╔██║██╔████╔██║██║ ██║ ██╔████╔██║███████║██║ ███████║██║██╔██╗ ██║█████╗ -# ██║╚██╔╝██║██║╚██╔╝██║██║ ██║ ██║╚██╔╝██║██╔══██║██║ ██╔══██║██║██║╚██╗██║██╔══╝ -# ██║ ╚═╝ ██║██║ ╚═╝ ██║╚██████╔╝ ██║ ╚═╝ ██║██║ ██║╚██████╗██║ ██║██║██║ ╚████║███████╗ -# ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ -[mmu_machine] -num_gates: 4 # Number of selectable gates on MMU - -# MMU Vendor & Version is used to automatically configure some parameters and validate configuration -# If custom set to "Other" and uncomment the additional parameters below -# -# ERCF 1.1 add "s" suffix for Springy, "b" for Binky, "t" for Triple-Decky -# e.g. "1.1sb" for v1.1 with Springy mod and Binky encoder -# ERCF 2.0 community edition ERCFv2 -# Tradrack 1.0 add "e" if encoder is fitted (assumed to be Binky) -# AngryBeaver 1.0 -# BoxTurtle 1.0 -# NightOwl 1.0 -# 3MS 1.0 -# Prusa 3.0 NOT YET SUPPORTED - COMMING SOON -# Other Generic setup that may require further customization of 'cad' parameters. See doc in mmu_parameters.cfg -# -mmu_vendor: BoxTurtle # MMU family -mmu_version: 1.0 # MMU hardware version number (add mod suffix documented above) - -# These are set automatically from vendor/version above. Only uncomment and set for custom designs ("Other") -#selector_type: VirtualSelector # LinearSelector (type-A) or VirtualSelector (type-B) -#variable_bowden_lengths: 0 # 1 = If MMU design has different bowden lengths per gate, 0 = bowden length is the same -#variable_rotation_distances: 1 # 1 = If MMU design has disimilar drive/BMG gears, thus rotation distance, 0 = One drive gear (e.g. Tradrack) -#require_bowden_move: 1 # 1 = If MMU design has bowden move that is included in load/unload, 0 = zero length bowden (skip bowden move) -#filament_always_gripped: 1 # 1 = Filament is always trapped by MMU (most type-B designs), 0 = MMU can release filament - - -# FILAMENT DRIVE GEAR STEPPER(S) -------------------------------------------------------------------------------------- -# ██████╗ ███████╗ █████╗ ██████╗ -# ██╔════╝ ██╔════╝██╔══██╗██╔══██╗ -# ██║ ███╗█████╗ ███████║██████╔╝ -# ██║ ██║██╔══╝ ██╔══██║██╔══██╗ -# ╚██████╔╝███████╗██║ ██║██║ ██║ -# ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ -# Note that 'toolhead' & 'mmu_gear' endstops will automatically be added if a toolhead sensor or gate sensor is defined -# -# The default values are tested with the ERCF BOM NEMA14 motor. Please adapt these values to the motor you are using -# Example : for NEMA17 motors, you'll usually use higher current -# -[tmc2209 stepper_mmu_gear] -uart_pin: mmu:MMU_GEAR_UART -run_current: 0.7 # ERCF BOM NEMA14 motor -hold_current: 0.1 # Recommend to be small if not using "touch" or move (TMC stallguard) -interpolate: True -sense_resistor: 0.110 # Usually 0.11, 0.15 for BTT TMC2226 -stealthchop_threshold: 0 # Spreadcycle has more torque and better at speed -# -# Uncomment two lines below if you have TMC and want the ability to use filament "touch" homing with gear stepper -#diag_pin: ^mmu:MMU_GEAR_DIAG # Set to MCU pin connected to TMC DIAG pin for gear stepper -#driver_SGTHRS: 60 # 255 is most sensitive value, 0 is least sensitive - -[stepper_mmu_gear] -step_pin: mmu:MMU_GEAR_STEP -dir_pin: !mmu:MMU_GEAR_DIR -enable_pin: !mmu:MMU_GEAR_ENABLE -rotation_distance: 22.7316868 # Bondtech 5mm Drive Gears. Overriden by 'mmu_gear_rotation_distance' in mmu_vars.cfg -gear_ratio: 1:1 # E.g. ERCF 80:20, Tradrack 50:17 -microsteps: 16 # Recommend 16. Increase only if you "step compress" issues when syncing -full_steps_per_rotation: 200 # 200 for 1.8 degree, 400 for 0.9 degree -# -# Uncomment the two lines below to enable filament "touch" homing option with gear motor -#extra_endstop_pins: tmc2209_stepper_mmu_gear:virtual_endstop -#extra_endstop_names: mmu_gear_touch - -# ADDITIONAL FILAMENT DRIVE GEAR STEPPERS FOR TYPE-B MMU's ------------------------------------------------------------- -# Note that common parameters are inherited from base stepper_mmu_gear, but can be uniquely specified here too -# -# Filament Drive Gear_1 -------------------------- -[tmc2209 stepper_mmu_gear_1] -uart_pin: mmu:MMU_GEAR_UART_1 - -[stepper_mmu_gear_1] -step_pin: mmu:MMU_GEAR_STEP_1 -dir_pin: !mmu:MMU_GEAR_DIR_1 -enable_pin: !mmu:MMU_GEAR_ENABLE_1 - -# Filament Drive Gear_2 -------------------------- -[tmc2209 stepper_mmu_gear_2] -uart_pin: mmu:MMU_GEAR_UART_2 - -[stepper_mmu_gear_2] -step_pin: mmu:MMU_GEAR_STEP_2 -dir_pin: !mmu:MMU_GEAR_DIR_2 -enable_pin: !mmu:MMU_GEAR_ENABLE_2 - -# Filament Drive Gear_3 -------------------------- -[tmc2209 stepper_mmu_gear_3] -uart_pin: mmu:MMU_GEAR_UART_3 - -[stepper_mmu_gear_3] -step_pin: mmu:MMU_GEAR_STEP_3 -dir_pin: !mmu:MMU_GEAR_DIR_3 -enable_pin: !mmu:MMU_GEAR_ENABLE_3 - - -# SERVOS --------------------------------------------------------------------------------------------------------------- -# ███████╗███████╗██████╗ ██╗ ██╗ ██████╗ ███████╗ -# ██╔════╝██╔════╝██╔══██╗██║ ██║██╔═══██╗██╔════╝ -# ███████╗█████╗ ██████╔╝██║ ██║██║ ██║███████╗ -# ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║ ██║╚════██║ -# ███████║███████╗██║ ██║ ╚████╔╝ ╚██████╔╝███████║ -# ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ -# Basic servo PWM setup. If these values are changed then the angles defined for different positions will also change -# -# OPTIONAL GANTRY SERVO FOR TOOLHEAD FILAMENT CUTTER ------------------------------------------------------------------ -# -# (uncomment this section if you have a ganty servo for toolhead cutter pin) -#[mmu_servo mmu_gantry_servo] -#pin: -#maximum_servo_angle:180 -#minimum_pulse_width: 0.00075 -#maximum_pulse_width: 0.00225 -#initial_angle: 180 - - -# FILAMENT SENSORS ----------------------------------------------------------------------------------------------------- -# ███████╗███████╗███╗ ██╗███████╗ ██████╗ ██████╗ ███████╗ -# ██╔════╝██╔════╝████╗ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝ -# ███████╗█████╗ ██╔██╗ ██║███████╗██║ ██║██████╔╝███████╗ -# ╚════██║██╔══╝ ██║╚██╗██║╚════██║██║ ██║██╔══██╗╚════██║ -# ███████║███████╗██║ ╚████║███████║╚██████╔╝██║ ██║███████║ -# ╚══════╝╚══════╝╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ -# Define the pins for optional sensors in the filament path. All but the pre-gate sensors will be automatically setup as -# both endstops (for homing) and sensors for visibility purposes. -# -# 'pre_gate_switch_pin_X' .. 'mmu_pre_gate_X' sensor detects filament at entry to MMU. X=gate number (0..N) -# 'gate_switch_pin' .. 'mmu_gate' shared sensor detects filament past the gate of the MMU -# or -# 'post_gear_switch_pin_X' .. 'mmu_gear_X' post gear sensor for each filament -# 'extruder_switch_pin' .. 'extruder' sensor detects filament just before the extruder entry -# 'toolhead_switch_pin' .. 'toolhead' sensor detects filament after extruder entry -# -# Sync motor feedback will typically have a tension switch (more important) or both tension and compression -# 'sync_feedback_tension_pin' .. pin for switch activated when filament is under tension -# 'sync_feedback_compression_pin' .. pin for switch activated when filament is under compression -# -# Configuration is flexable: Simply define pins for any sensor you want to enable, if pin is not set (or the alias is empty) -# it will be ignored. You can also just comment out what you are not using. -# -[mmu_sensors] -pre_gate_switch_pin_0: ^mmu:MMU_PRE_GATE_0 -pre_gate_switch_pin_1: ^mmu:MMU_PRE_GATE_1 -pre_gate_switch_pin_2: ^mmu:MMU_PRE_GATE_2 -pre_gate_switch_pin_3: ^mmu:MMU_PRE_GATE_3 -pre_gate_switch_pin_4: ^mmu:MMU_PRE_GATE_4 -pre_gate_switch_pin_5: ^mmu:MMU_PRE_GATE_5 -pre_gate_switch_pin_6: ^mmu:MMU_PRE_GATE_6 -pre_gate_switch_pin_7: ^mmu:MMU_PRE_GATE_7 -pre_gate_switch_pin_8: ^mmu:MMU_PRE_GATE_8 -pre_gate_switch_pin_9: ^mmu:MMU_PRE_GATE_9 -pre_gate_switch_pin_10: ^mmu:MMU_PRE_GATE_10 -pre_gate_switch_pin_11: ^mmu:MMU_PRE_GATE_11 - -post_gear_switch_pin_0: ^mmu:MMU_POST_GEAR_0 -post_gear_switch_pin_1: ^mmu:MMU_POST_GEAR_1 -post_gear_switch_pin_2: ^mmu:MMU_POST_GEAR_2 -post_gear_switch_pin_3: ^mmu:MMU_POST_GEAR_3 -post_gear_switch_pin_4: ^mmu:MMU_POST_GEAR_4 -post_gear_switch_pin_5: ^mmu:MMU_POST_GEAR_5 -post_gear_switch_pin_6: ^mmu:MMU_POST_GEAR_6 -post_gear_switch_pin_7: ^mmu:MMU_POST_GEAR_7 -post_gear_switch_pin_8: ^mmu:MMU_POST_GEAR_8 -post_gear_switch_pin_9: ^mmu:MMU_POST_GEAR_9 -post_gear_switch_pin_10: ^mmu:MMU_POST_GEAR_10 -post_gear_switch_pin_11: ^mmu:MMU_POST_GEAR_11 - -gate_switch_pin: ^mmu:MMU_GATE_SENSOR - -extruder_switch_pin: -toolhead_switch_pin: - -sync_feedback_tension_pin: -sync_feedback_compression_pin: - - -# MMU OPTIONAL NEOPIXEL LED SUPPORT ------------------------------------------------------------------------------------ -# ██╗ ███████╗██████╗ ███████╗ -# ██║ ██╔════╝██╔══██╗██╔════╝ -# ██║ █████╗ ██║ ██║███████╗ -# ██║ ██╔══╝ ██║ ██║╚════██║ -# ███████╗███████╗██████╔╝███████║ -# ╚══════╝╚══════╝╚═════╝ ╚══════╝ -# Define the led connection, type and length -# -# (comment out this section if you don't have leds) -[neopixel mmu_leds] -pin: mmu:MMU_NEOPIXEL -chain_count: 9 # Number gates x1 or x2 + 1 (if you want status) -color_order: GRBW # Set based on your particular neopixel specification - -# MMU LED EFFECT SEGMENTS ---------------------------------------------------------------------------------------------- -# Define neopixel LEDs for your MMU. The chain_count must be large enough for your desired ranges: -# exit .. this set of LEDs, one for every gate, usually would be mounted at the exit point of the gate -# entry .. this set of LEDs, one for every gate, could be mounted at the entry point of filament into the MMU/buffer -# status .. this single LED represents the status of the currently selected filament -# -# Note that all sets are optional. You can opt simple to have just the 'exit' set for example. The advantage to having -# both entry and exit LEDs is, for example, so that 'entry' can display gate status while 'exit' displays the color -# -# The animation effects requires the installation of Julian Schill's awesome LED effect module otherwise the LEDs -# will be static: -# https://github.com/julianschill/klipper-led_effect -# LED's are indexed in the chain from 1..N. Thus to set up LED's on 'exit' and a single 'status' LED on a 4 gate MMU: -# exit_range: 1-4 -# status_index: 5 -# In this example no 'entry' set is configured. -# -# Note the range order is important and depends on your wiring. Thus 1-4 and 4-1 both represent the same LED range -# but mapped to increasing or decreasing gates respectively -# -# Note that Happy Hare provides a convenience wrapper [mmu_led_effect] that not only creates an effect on each of the -# [mmu_leds] specified segments but also each individual LED for atomic control. See mmu_leds.cfg for examples -# -# (this section is harmless and ignored if the 'led_strip' obove doesn't exist - LED support will simply be disabled) -[mmu_leds] -led_strip: neopixel:mmu_leds -exit_range: 1-4 -entry_range: 8-5 -status_index: 9 -frame_rate: 24 - diff --git a/printer_data/config/mmu-20241127_231535/base/mmu_macro_vars.cfg b/printer_data/config/mmu-20241127_231535/base/mmu_macro_vars.cfg deleted file mode 100644 index 22370c7..0000000 --- a/printer_data/config/mmu-20241127_231535/base/mmu_macro_vars.cfg +++ /dev/null @@ -1,491 +0,0 @@ -######################################################################################################################## -# Happy Hare MMU Software -# -# EDIT THIS FILE BASED ON YOUR SETUP -# -# Copyright (C) 2022 moggieuk#6538 (discord) moggieuk@hotmail.com -# This file may be distributed under the terms of the GNU GPLv3 license. -# -# Goal: Happy Hare supporting MACRO configuration -# -# (\_/) -# ( *,*) -# (")_(") Happy Hare Ready -# -# -# Supporting set of macros supplied with Happy Hare can be customized by editing the macro "variables" declared here. -# -# This configuration will automatically retained and upgraded between releases (a backup of previous config files will -# always be made for your reference). If you want to customize macros beyond what is possible through these variables -# it is highly recommended you copy the macro to a new name and change the callback macro name in 'mmu_parameters.cfg' -# That way the default macros can still be upgraded but your customization will be left intact -# - - -# PERSISTED STATE --------------------------------------------------------- -# Happy Hare stores configuration and state in the klipper variables file. -# Since klipper can only be a single 'save_variables' file, if you already -# have one you will need to merge the two and point this appropriately. -# -[save_variables] -filename: ~/printer_data/config/mmu/mmu_vars.cfg - - -# NECESSARY KLIPPER OVERRIDES --------------------------------------------- -# ██╗ ██╗██╗ ██╗██████╗ ██████╗ ███████╗██████╗ -# ██║ ██╔╝██║ ██║██╔══██╗██╔══██╗██╔════╝██╔══██╗ -# █████╔╝ ██║ ██║██████╔╝██████╔╝█████╗ ██████╔╝ -# ██╔═██╗ ██║ ██║██╔═══╝ ██╔═══╝ ██╔══╝ ██╔══██╗ -# ██║ ██╗███████╗██║██║ ██║ ███████╗██║ ██║ -# ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ -# -# These supplemental settings essentially disable klipper's built in -# extrusion limits and is necessary when using an MMU -[extruder] -max_extrude_only_distance: 200 -max_extrude_cross_section: 50 - -# For dialog prompts and progress in Mainsail. Requires Mainsail version >= v2.9.0 -[respond] - -# Other Happy Hare prerequisites. Harmless if already defined elsewhere in user config -[display_status] -[pause_resume] -[virtual_sdcard] -path: ~/printer_data/gcodes -#on_error_gcode: CANCEL_PRINT - - -# PRINT START/END --------------------------------------------------------- -# ██████╗ ██████╗ ██╗███╗ ██╗████████╗ ███████╗████████╗ █████╗ ██████╗ ████████╗ -# ██╔══██╗██╔══██╗██║████╗ ██║╚══██╔══╝ ██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝ -# ██████╔╝██████╔╝██║██╔██╗ ██║ ██║ ███████╗ ██║ ███████║██████╔╝ ██║ -# ██╔═══╝ ██╔══██╗██║██║╚██╗██║ ██║ ╚════██║ ██║ ██╔══██║██╔══██╗ ██║ -# ██║ ██║ ██║██║██║ ╚████║ ██║ ███████║ ██║ ██║ ██║██║ ██║ ██║ -# ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ -# (base/mmu_software.cfg) -# -[gcode_macro _MMU_SOFTWARE_VARS] -description: Happy Hare optional configuration for print start/end checks -gcode: # Leave empty - -# These variables control the behavor of the MMU_START_SETUP and MMU_START_LOAD_INITIAL_TOOL macros -variable_user_pre_initialize_extension : '' ; Executed at start of MMU_START_SETUP. Commonly G28 to home -variable_home_mmu : False ; True/False, Whether to home mmu before print starts -variable_check_gates : True ; True/False, Whether to check filament is loaded in all gates used -variable_load_initial_tool : True ; True/False, Whether to automatically load initial tool -# -# Automapping strategy to apply slicer tool map to find matching MMU gate (will adjust tool-to-gate map). Options are: -# 'none' - don't automap (i.e. don't update tool-to-gate map) -# 'filament_name' - exactly match on case insensitive filament name -# 'material' - exactly match on material -# 'color' - exactly match on color (with same material) -# 'closest_color' - match to closest available filament color (with same material) -# 'spool_id' - exactly match on spool_id [FUTURE] -variable_automap_strategy : "none" ; none|filament_name|material|color|closest_color|spool_id - -# These variables control the behavior of the MMU_END macro -variable_user_print_end_extension : '' ; Executed at start of MMU_END. Good place to move off print -variable_unload_tool : True ; True/False, Whether to unload the tool at the end of the print -variable_reset_ttg : False ; True/False, Whether reset TTG map at end of print -variable_dump_stats : True ; True/False, Whether to display print stats at end of print - - -# STATE MACHINE CHANGES --------------------------------------------------- -# ███████╗████████╗ █████╗ ████████╗███████╗ ██████╗██╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗ -# ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝ ██╔════╝██║ ██║██╔══██╗████╗ ██║██╔════╝ ██╔════╝ -# ███████╗ ██║ ███████║ ██║ █████╗ ██║ ███████║███████║██╔██╗ ██║██║ ███╗█████╗ -# ╚════██║ ██║ ██╔══██║ ██║ ██╔══╝ ██║ ██╔══██║██╔══██║██║╚██╗██║██║ ██║██╔══╝ -# ███████║ ██║ ██║ ██║ ██║ ███████╗ ╚██████╗██║ ██║██║ ██║██║ ╚████║╚██████╔╝███████╗ -# ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ -# (base/mmu_state.cfg) -# -[gcode_macro _MMU_STATE_VARS] -description: Happy Hare configuration for state change hooks -gcode: # Leave empty - -# You can extend functionality to all Happy Hare state change or event -# macros by adding a command (or call to your gcode macro). -# E.g for additional LED logic or consumption counters -variable_user_action_changed_extension : '' ; Executed after default logic with duplicate params -variable_user_print_state_changed_extension : '' ; Executed after default logic with duplicate params -variable_user_mmu_event_extension : '' ; Executed after default logic with duplicate params - -# Maintenance warning limits (consumption counters) -variable_servo_down_limit : 5000 ; Set to -1 for no limit / disable warning -variable_cutter_blade_limit : 3000 ; Set to -1 for no limit / disable warning - - -# LED CONTROL ------------------------------------------------------------- -# ██╗ ███████╗██████╗ ███████╗ -# ██║ ██╔════╝██╔══██╗██╔════╝ -# ██║ █████╗ ██║ ██║███████╗ -# ██║ ██╔══╝ ██║ ██║╚════██║ -# ███████╗███████╗██████╔╝███████║ -# ╚══════╝╚══════╝╚═════╝ ╚══════╝ -# Only configure if you have LEDs installed. The led_effects option is -# automatically ignored if led-effects klipper module is not installed -# (base/mmu_led.cfg) -# -[gcode_macro _MMU_LED_VARS] -description: Happy Hare led macro configuration variables -gcode: # Leave empty - -# Default effects for LED segments when not providing action status -# This can be any effect name, 'r,g,b' color, or built-in functional effects: -# 'off' - LED's off -# 'on' - LED's white -# 'gate_status' - indicate gate availability -# 'filament_color' - indicate filament color -# 'slicer_color' - display slicer defined set color for each gate (printer.mmu.slicer_color_rgb) -variable_led_enable : True ; True = LEDs are enabled at startup (MMU_LED can control), False = Disabled -variable_led_animation : True ; True = Use led-animation-effects, False = Static LEDs -variable_default_exit_effect : "gate_status" ; off|gate_status|filament_color|slicer_color -variable_default_entry_effect : "filament_color" ; off|gate_status|filament_color|slicer_color -variable_default_status_effect : "filament_color" ; on|off|gate_status|filament_color|slicer_color -variable_white_light : (1, 1, 1) ; RGB color for static white light -variable_black_light : (.01, 0, .02) ; RGB color used to represent "black" (filament) -variable_empty_light : (0, 0, 0) ; RGB color used to represent empty gate - - -# SEQUENCE MACRO - PARKING MOVEMENT AND TOOLCHANGE CONTROL ---------------- -# ███╗ ███╗ ██████╗ ██╗ ██╗███████╗███╗ ███╗███████╗███╗ ██╗████████╗ -# ████╗ ████║██╔═══██╗██║ ██║██╔════╝████╗ ████║██╔════╝████╗ ██║╚══██╔══╝ -# ██╔████╔██║██║ ██║██║ ██║█████╗ ██╔████╔██║█████╗ ██╔██╗ ██║ ██║ -# ██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██╔══╝ ██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ -# ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ███████╗██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ -# ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ -# Configure carefully if you 'enable_park: True' -# (base/mmu_sequence.cfg) -# -[gcode_macro _MMU_SEQUENCE_VARS] -description: Happy Hare sequence macro configuration variables -gcode: # Leave empty - -# Parking and movement controls: -# Happy Hare defines 7 operations that may require parking. You can specifiy -# whether to park for each of those operations both during a print and -# standalone (not printing) with Happy Hare or when HH is disabled: -# -# enable_park_printing -# This is a list of the operations that should result in toolhead parking -# while in a print. There are really two main starting points from which -# you can customize. If using the slicer to form tips (and toolchange is -# over the wipetower) you don't want to park on "toolchange" but you would -# want to on "runout" which is a forced toolchange unknown by the slicer. -# Typically you would also want to park at least on pause, cancel and -# complete if not done elsewhere -# -# enabled_park_standalone -# List of the operations that should result in toolhead parking when not -# printing, for example, just manipulating the MMU manually or via -# Klipperscreen. Really it is up to you to choose based on personal -# workflow preferences but this defaults to just 'pause,cancel' -# (i.e. disabled for toolchange) -# -# enabled_park_disabled -# List of the operations that should result in toolhead parking when MMU is -# disabled (MMU ENABLE=0) and using Happy Hare client macros. Note that only -# pause and cancel can occur in this mode and would typically be enabled -# -# The operations are as follows: -# toolchange - normal toolchange initiated with Tx or MMU_CHANGE_TOOL command -# runout - when a forced toolchange occurs as a result of runout -# load - individual MMU_LOAD operation -# unload - individual MMU_UNLOAD/MMU_EJECT operation -# complete - when print is complete (Happy Hare enabled) -# pause - a regular klipper PAUSE -# cancel - a regular klipper CANCEL_PRINT -# -# It is possible to call the parking macro manually in this form should you wish -# to include in your macros. -# -# _MMU_PARK FORCE_PARK=1 X=10 Y=10 Z_HOP=5 -# -# restore_xy_pos -# Controls where the toolhead (x,y) is returned to after an operation that -# invokes a parking move: -# last - return to original position before park (frequently the default) -# next - return to next print position if possible else last logic will be applied. -# In print this reduces dwell time at the last position reducing blobbing -# and unecessary movement. Only applied to "toolchange" operation -# none - the toolhead is left wherever it ends up after change. In a print the -# next gcode command will restore toolhead x,y position -# -# Notes: -# - The starting z-height will always be restored, thus the different between 'next' -# and 'none' is the z-height at which the (x,y) move occurs and the location of -# of any un-retract -# - The default parking logic is a straight line move to the 'park_*' position. -# To implement fancy movement and control you can specify your own -# 'user_park_move_macro' to use instead of default straight line move -# -# Retraction can be used to optimize stringing and blobs that can occur when -# changing tools and are active only during a print. -# IMPORTANT: For toolchanging the config order would be: -# 1. In mmu_parameters.cfg configure extruder dimensions like -# 'toolhead_extruder_to_nozzle',etc. These are based on geometry. -# 2. In mmu_parameters.cfg tweak 'toolhead_ooze_reduction' only if necessary -# so that filament _just_ appears at the nozzle on load -# 3. Only then, adjust retraction to control stringing and blobs when -# changing tool in a print -variable_enable_park_printing : 'toolchange,runout,load,unload,complete,pause,cancel' ; Empty '' to disable parking -variable_enable_park_standalone : 'toolchange,load,unload,pause,cancel' ; Empty '' to disable parking -variable_enable_park_disabled : 'pause,cancel' ; Empty '' to disable parking - -variable_min_toolchange_z : 1.0 ; The absolute minimum saftey floor (z-height) for ALL parking moves - -# These specify the parking location, z_hop and retraction for all enabled operation -# types. Each must be 5 values: -# x_coord, y_coord, z_hop(delta), z_hop_ramp, retraction length -# Use -1,-1 for no x,y move (you can just have z_hop). Use 0 for no z_hop -# The z_hop ramp is the horizontal distance in mm to travel during the lift. The -# direction is automatic any only applied if lifting the first time from print. -# This move is useful to help break the filament "string" -variable_park_toolchange : -1, -1, 1, 5, 2 ; x,y,z-hop,z_hop_ramp,retract for "toolchange" operations (toolchange,load,unload) -variable_park_runout : -1, -1, 1, 5, 2 ; x,y,z-hop,z_hop_ramp,retract -variable_park_pause : 50, 50, 5, 0, 2 ; x,y,z-hop,z_hop_ramp,retract (park position when mmu error occurs) -variable_park_cancel : -1, -1, 10, 0, 5 ; x,y,z-hop,z_hop_ramp,retract -variable_park_complete : 50, 50, 10, 0, 5 ; x,y,z-hop,z_hop_ramp,retract - -# For toolchange operations, this allows to you to specify additional parking moves -# at various stages of the toolchange. Each must have 3 values: -# x_coord, y_coord, z_hop(delta) -# Use -1,-1,0 for no movement at that stage (no-op). -# All movement will be at the established movement plane (z-height) -variable_pre_unload_position : -1, -1, 0 ; x,y,z-hop position before unloading starts -variable_post_form_tip_position : -1, -1, 0 ; x,y,z-hop position after form/cut tip on unload -variable_pre_load_position : -1, -1, 0 ; x,y,z-hop position before loading starts - -variable_restore_xy_pos : "last" ; last|next|none - What x,y position the toolhead should travel to after a "toolchange" - -variable_park_travel_speed : 200 ; Speed for any travel movement XY(Z) in mm/s -variable_park_lift_speed : 15 ; Z-only travel speed in mm/s -variable_retract_speed : 30 ; Speed of the retract move in mm/s -variable_unretract_speed : 30 ; Speed of the unretract move in mm/s - -# ADVANCED: Normally x,y moves default to 'G1 X Y' to park position. This allows -# you to create exotic movements. Macro will be provided the following parameters: -# YOUR_MOVE_MACRO X= Y= F= -variable_user_park_move_macro : '' ; Executed instead of default 'G1 X Y move' to park position - -variable_auto_home : True ; True = automatically home if necessary, False = disable -variable_timelapse : False ; True = take frame snapshot after load, False = disable - -# Instead of completely defining your your own macros you can can extend functionality -# of default sequence macros by adding a command (or call to your gcode macro) -variable_user_mmu_error_extension : '' ; Executed after default logic when mmu error condition occurs -variable_user_pre_unload_extension : '' ; Executed after default logic -variable_user_post_form_tip_extension : '' ; Executed after default logic -variable_user_post_unload_extension : '' ; Executed after default logic -variable_user_pre_load_extension : '' ; Executed after default logic -variable_user_post_load_extension : '' ; Executed after default logic but before restoring toolhead position - - -# CUT_TIP ----------------------------------------------------------------- -# ██████╗██╗ ██╗████████╗ ████████╗██╗██████╗ -# ██╔════╝██║ ██║╚══██╔══╝ ╚══██╔══╝██║██╔══██╗ -# ██║ ██║ ██║ ██║ ██║ ██║██████╔╝ -# ██║ ██║ ██║ ██║ ██║ ██║██╔═══╝ -# ╚██████╗╚██████╔╝ ██║ ██║ ██║██║ -# ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ -# Don't need to configure if using tip forming -# (base/mmu_cut_tip.cfg) -# -[gcode_macro _MMU_CUT_TIP_VARS] -description: Happy Hare toolhead tip cutting macro configuration variables -gcode: # Leave empty - -# Whether the toolhead tip cutting macro will return toolhead to initial postion -# after the cut is complete. If using parking logic it is better to disable this -variable_restore_position : False ; True = return to initial position, False = don't return - -# Distance from the internal nozzle tip to the cutting blade. This dimension -# is based on your toolhead and should not be used for tuning -# Note: If you have a toolhead sensor this variable can be automatically determined! -# Read https://github.com/moggieuk/Happy-Hare/wiki/Blobing-and-Stringing -variable_blade_pos : 37.5 ; TUNE ME: Distance in mm from internal nozzle tip - -# Distance to retract prior to making the cut, measured from the internal nozzle -# tip. This reduces wasted filament (left behind in extruder) but might cause a -# clog if set too large. This must be less than 'blade_pos' -# Note: the residual filament left in nozzle ('toolhead_ooze_reduction') is -# subtracted from this value so make sure toolhead is calibrated -variable_retract_length : 32.5 ; TUNE ME: 5mm less than 'blade_pos' is a good starting point - -# Whether to perform a simple tip forming move after the initial retraction -# Enabling this adds gives some additional cooling time of molten filament and -# may help avoid potential clogging on some hotends -variable_simple_tip_forming : True ; True = Perform simple tip forming, False = skip - -# This should be the position of the toolhead where the cutter arm just -# lightly touches the depressor pin -variable_cutting_axis : "x" ; "x" or "y". Determines cut direction (axis) during cut motion -variable_pin_loc_xy : 14, 250 ; x,y coordinates of depressor pin - -# This distance is added to "pin_loc_x" or "pin_loc_y" depending on the 'cutting_axis' -# to determine the starting position and to create a small saftely distance that aids -# in generating momentum -variable_pin_park_dist : 5.0 ; Distance in mm - -# Position of the toolhead when the cutter is fully compressed. This value is on the x or y axis depending on the value of -# 'cutting_axis'. Should leave a small headroom (should be a bit larger than 0, or whatever xmin is) to -# avoid banging the toolhead or gantry -variable_pin_loc_compressed : 0.5 ; Distance. Coordinate in x or y direction depending on 'cutting_axis' - -# Retract length and speed after the cut so that the cutter blade doesn't -# get stuck on return to origin position -variable_rip_length : 1.0 ; Distance in mm to retract to aid lever decompression (>= 0) -variable_rip_speed : 3 ; Speed mm/s - -# Pushback of the remaining tip from the cold end into the hotend. This does -# not have to push back all the way, just sufficient to ensure filament fragment -# stays in hot end and the "nail head" of the cut is pushed back past the -# PTFE/metal junction so it cannot cause clogging problems on future loads. -# Cannot be larger than 'retract_length' - `toolhead_ooze_reduction` -variable_pushback_length : 15.0 ; TUNE ME: PTFE tube length + 3mm is good starting point -variable_pushback_dwell_time : 0 ; Time in ms to dwell after the pushback - -# Speed related settings for tip cutting -# Note that if the cut speed is too fast, the steppers can lose steps. -# Therefore, for a cut: -# - We first make a fast move to accumulate some momentum and get the cut -# blade to the initial contact with the filament -# - We then make a slow move for the actual cut to happen -variable_travel_speed : 150 ; Speed mm/s -variable_cut_fast_move_speed : 32 ; Speed mm/s -variable_cut_slow_move_speed : 8 ; Speed mm/s -variable_evacuate_speed : 150 ; Speed mm/s -variable_cut_dwell_time : 50 ; Time in ms to dwell at the cut point -variable_cut_fast_move_fraction : 1.0 ; Fraction of the move that uses fast move -variable_extruder_move_speed : 25 ; Speed mm/s for all extruder movement - -# Safety margin for fast vs slow travel. When traveling to the pin location -# we make a safer but longer move if we are closer to the pin than this -# specified margin. Usually setting these to the size of the toolhead -# (plus a small margin) should be good enough -variable_safe_margin_xy : 30, 30 ; Approx toolhead width +5mm, height +5mm) - -# If gantry servo option is installed, enable the servo and set up and down -# angle positions -variable_gantry_servo_enabled : True ; True = enabled, False = disabled -variable_gantry_servo_down_angle: 55 ; Angle for when pin is deployed -variable_gantry_servo_up_angle : 180 ; Angle for when pin is retracted - - -# FORM_TIP ---------------------------------------------------------------- -# ███████╗ ██████╗ ██████╗ ███╗ ███╗ ████████╗██╗██████╗ -# ██╔════╝██╔═══██╗██╔══██╗████╗ ████║ ╚══██╔══╝██║██╔══██╗ -# █████╗ ██║ ██║██████╔╝██╔████╔██║ ██║ ██║██████╔╝ -# ██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║ ██║ ██║██╔═══╝ -# ██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║ ██║ ██║██║ -# ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ -# Don't need to configure if using tip cutting -# (base/mmu_form_tip.cfg) -# -[gcode_macro _MMU_FORM_TIP_VARS] -description: Happy Hare tip forming macro configuration variables -gcode: # Leave empty - -# Step 1 - Ramming -# Ramming is the initial squeeze of filament prior to cooling moves and is -# described in terms of total volume and progression of squeeze intensity -# printing/standalone. This can be separately controlled when printing or -# standalone -variable_ramming_volume : 0 ; Volume in mm^3, 0 = disabled (optionally let slicer do it) -variable_ramming_volume_standalone : 0 ; Volume in mm^3, 0 = disabled - -# Optionally set for temperature change (reduction). The wait will occur -# before nozzle separation if 'use_fast_skinnydip: False' else after cooling -# moves. Temperature will be restored after tip creation is complete -variable_toolchange_temp : 0 ; 0 = don't change temp, else temp to set -variable_toolchange_fan_assist : False ; Whether to use part cooling fan for quicker temp change -variable_toolchange_fan_speed : 50 ; Fan speed % if using fan_assist enabled - -# Step 2 - Nozzle Separation -# The filament is then quickly separated from the meltzone by a fast movement -# before then slowing to travel the remaining distance to cooling tube. The -# initial fast movement should be as fast as extruder can comfortably perform. -# A good starting point# for slower move is unloading_speed_start/cooling_moves. -# Too fast a slower movement can lead to excessively long tips or hairs -variable_unloading_speed_start : 80 ; Speed in mm/s for initial fast movement -variable_unloading_speed : 18 ; Speed in mm/s for slow move to cooling zone - -# Step 3 - Cooling Moves -# The cooling move allows the filament to harden while constantly moving back -# and forth in the cooling tube portion of the extruder to prevent a bulbous -# tip forming. The cooling tube position is measured from the internal nozzle -# to just past the top of the heater block (often it is beneficial to add a -# couple of mm to ensure the tip is in the cooling section. The cooling tube -# length is then the distance from here to top of heatsink (this is the length -# length of the cooling moves). The final cooling move is a fast movement to -# break the string formed. -variable_cooling_tube_position : 35 ; Start of cooling tube. DragonST:35, DragonHF:30, Mosquito:30, Revo:35, RapidoHF:27 -variable_cooling_tube_length : 10 ; Movement length. DragonST:15, DragonHF:10, Mosquito:20, Revo:10, RapidoHF:10 -variable_initial_cooling_speed : 10 ; Inital slow movement (mm/s) to solidify tip and cool string if formed -variable_final_cooling_speed : 50 ; Fast movement (mm/s) Too fast: tip deformation on eject, Too Slow: long string/no seperation -variable_cooling_moves : 4 ; Number of back and forth cooling moves to make (2-4 is a good start) - -# Step 4 - Skinnydip -# Skinnydip is an advanced final move that may have benefit with some -# material like PLA to burn off persistent very fine hairs. To work the -# depth of insertion is critical (start with it disabled and tune last) -# For reference the internal nozzle would be at a distance of -# cooling_tube_position + cooling_tube_length, the top of the heater -# block would be cooling_tube_length away. -variable_use_skinnydip : False ; True = enable skinnydip, False = skinnydip move disabled -variable_skinnydip_distance : 30 ; Distance to reinsert filament into hotend starting from end of cooling tube -variable_dip_insertion_speed : 30 ; Medium/Slow insertion speed mm/s - Just long enough to melt the fine hairs, too slow will pull up molten filament -variable_dip_extraction_speed : 70 ; Speed mm/s - Around 2x Insertion speed to prevents forming new hairs -variable_melt_zone_pause : 0 ; Pause if melt zone in ms. Default 0 -variable_cooling_zone_pause : 0 ; Pause if cooling zone after dip in ms. Default 0 -variable_use_fast_skinnydip : False ; False = Skip the toolhead temp change wait during skinnydip move - -# Step 5 - Parking -# Park filament ready to eject -variable_parking_distance : 0 ; Position mm to park the filament at end of tip forming, 0 = leave where filament ends up after tip forming -variable_extruder_eject_speed : 25 ; Speed mm/s used for parking_distance (and final_eject when testing) - - -# CLIENT MACROS ----------------------------------------------------------- -# ██████╗ █████╗ ██╗ ██╗███████╗███████╗ ██████╗ ███████╗███████╗██╗ ██╗███╗ ███╗███████╗ -# ██╔══██╗██╔══██╗██║ ██║██╔════╝██╔════╝ ██╔══██╗██╔════╝██╔════╝██║ ██║████╗ ████║██╔════╝ -# ██████╔╝███████║██║ ██║███████╗█████╗ ██████╔╝█████╗ ███████╗██║ ██║██╔████╔██║█████╗ -# ██╔═══╝ ██╔══██║██║ ██║╚════██║██╔══╝ ██╔══██╗██╔══╝ ╚════██║██║ ██║██║╚██╔╝██║██╔══╝ -# ██║ ██║ ██║╚██████╔╝███████║███████╗ ██║ ██║███████╗███████║╚██████╔╝██║ ╚═╝ ██║███████╗ -# ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ -# If using the recommended PAUSE/RESUME/CANCEL_PRINT macros shipped with -# Happy Hare these variables allow for customization and basic extension -# Note that most parameters are pulled from the "movement" (sequence) -# macro above and thus these are supplemental a -# (optional/client_macros.cfg) -# -[gcode_macro _MMU_CLIENT_VARS] -description: Happy Hare client macro configuration variables -gcode: # Leave empty - -variable_reset_ttg_on_cancel : False ; True/False, Whether reset TTG map if print is canceled -variable_unload_tool_on_cancel : False ; True/False, Whether to unload the tool on cancel - -# You can extend functionality by adding a command (or call to your gcode macro) -variable_user_pause_extension : '' ; Executed after the klipper base pause -variable_user_resume_extension : '' ; Executed before the klipper base resume -variable_user_cancel_extension : '' ; Executed before the klipper base cancel_print - - -########################################################################### -# Tool change macros -# This is automatically created on installation but you can increase or -# reduce this list to match your number of tools in operation -# Note: it is annoying to have to do this but interfaces like Mainsail rely -# on real macro definitions for tools to be visible in the UI -# -[gcode_macro T0] -gcode: MMU_CHANGE_TOOL TOOL=0 -[gcode_macro T1] -gcode: MMU_CHANGE_TOOL TOOL=1 -[gcode_macro T2] -gcode: MMU_CHANGE_TOOL TOOL=2 -[gcode_macro T3] -gcode: MMU_CHANGE_TOOL TOOL=3 - diff --git a/printer_data/config/mmu-20241127_231535/base/mmu_parameters.cfg b/printer_data/config/mmu-20241127_231535/base/mmu_parameters.cfg deleted file mode 100644 index a278f7f..0000000 --- a/printer_data/config/mmu-20241127_231535/base/mmu_parameters.cfg +++ /dev/null @@ -1,526 +0,0 @@ -######################################################################################################################## -# Happy Hare MMU Software -# -# EDIT THIS FILE BASED ON YOUR SETUP -# -# Copyright (C) 2022 moggieuk#6538 (discord) moggieuk@hotmail.com -# This file may be distributed under the terms of the GNU GPLv3 license. -# -# Goal: Main configuration parameters for the klipper module -# -# (\_/) -# ( *,*) -# (")_(") Happy Hare Ready -# -# Notes: -# Macro configuration is specifed separately in 'mmu_macro_vars.cfg'. -# Full details in https://github.com/moggieuk/Happy-Hare/tree/main/doc/configuration.md -# -[mmu] -happy_hare_version: 3.00 # Don't mess, used for upgrade detection - -# MMU Hardware Limits -------------------------------------------------------------------------------------------------- -# ██╗ ██╗███╗ ███╗██╗████████╗███████╗ -# ██║ ██║████╗ ████║██║╚══██╔══╝██╔════╝ -# ██║ ██║██╔████╔██║██║ ██║ ███████╗ -# ██║ ██║██║╚██╔╝██║██║ ██║ ╚════██║ -# ███████╗██║██║ ╚═╝ ██║██║ ██║ ███████║ -# ╚══════╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝ -# -# Define the physical limits of your MMU. These setings will be respected regardless of individual speed settings. -# -gear_max_velocity: 300 # Never to be exceeded gear velocity regardless of specific parameters -gear_max_accel: 1500 # Never to be exceeded gear accelaration regardless of specific parameters - - -# Logging -------------------------------------------------------------------------------------------------------------- -# ██╗ ██████╗ ██████╗ ██████╗ ██╗███╗ ██╗ ██████╗ -# ██║ ██╔═══██╗██╔════╝ ██╔════╝ ██║████╗ ██║██╔════╝ -# ██║ ██║ ██║██║ ███╗██║ ███╗██║██╔██╗ ██║██║ ███╗ -# ██║ ██║ ██║██║ ██║██║ ██║██║██║╚██╗██║██║ ██║ -# ███████╗╚██████╔╝╚██████╔╝╚██████╔╝██║██║ ╚████║╚██████╔╝ -# ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ -# -# log_level & logfile_level can be set to one of (0 = essential, 1 = info, 2 = debug, 3 = trace, 4 = stepper moves) -# Generally you can keep console logging to a minimal whilst still sending debug output to the mmu.log file -# Increasing the console log level is only really useful during initial setup to save having to constantly open the log file -# Note: that it is not recommended to keep logging at level greater that 2 (debug) if not debugging an issue because -# of the additional overhead -# -log_level: 1 -log_file_level: 2 # Can also be set to -1 to disable log file completely -log_statistics: 1 # 1 to log statistics on every toolchange (default), 0 to disable (but still recorded) -log_visual: 1 # 1 log visual representation of filament, 0 = disable -log_startup_status: 1 # Whether to log tool to gate status on startup, 1 = summary (default), 0 = disable - - -# Movement speeds ------------------------------------------------------------------------------------------------------ -# ███████╗██████╗ ███████╗███████╗██████╗ ███████╗ -# ██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗██╔════╝ -# ███████╗██████╔╝█████╗ █████╗ ██║ ██║███████╗ -# ╚════██║██╔═══╝ ██╔══╝ ██╔══╝ ██║ ██║╚════██║ -# ███████║██║ ███████╗███████╗██████╔╝███████║ -# ╚══════╝╚═╝ ╚══════╝╚══════╝╚═════╝ ╚══════╝ -# -# Long moves are faster than the small ones and used for the bulk of the bowden movement. Note that you can set two fast -# load speeds depending on whether MMU thinks it is pulling from the buffer or from the spool. It is often helpful to -# use a lower speed when pulling from the spool because more force is required to overcome friction and this prevents -# loosing steps. 100mm/s should be "quiet" with the NEMA14 motor but you can go lower for really low noise -# -# NOTE: Encoder cannot keep up much above 350mm/s so make sure 'bowden_apply_correction' is off at very high speeds! -# -gear_from_buffer_speed: 150 # mm/s Normal speed when loading filament. Conservative is 100mm/s, Max around 300mm/s -gear_from_buffer_accel: 400 # Normal accelaration when loading filament -gear_from_spool_speed: 80 # mm/s Use (lower) speed when loading for the first time (i.e. pulling from spool) -gear_from_spool_accel: 100 # Accelaration when loading from spool -# -gear_short_move_speed: 80 # mm/s Speed when making short moves (like incremental retracts with encoder) -gear_short_move_accel: 600 # Usually the same as gear_from_buffer_accel (for short movements) -gear_short_move_threshold: 70 # Move distance that controls application of 'short_move' speed/accel -gear_homing_speed: 50 # mm/s Speed of gear stepper only homing moves (e.g. homing to gate or extruder) - -# Speeds of extruder movement. The 'sync' speeds will be used when gear and extruder steppers are moving in sync -# -extruder_load_speed: 16 # mm/s speed of load move inside extruder from homing position to meltzone -extruder_unload_speed: 16 # mm/s speed of unload moves inside of extruder (very initial move from meltzone is 50% of this) -extruder_sync_load_speed: 18 # mm/s speed of synchronized extruder load moves -extruder_sync_unload_speed: 18 # mm/s speed of synchronized extruder unload moves -extruder_homing_speed: 18 # mm/s speed of extruder only homing moves (e.g. to toolhead sensor) - - -# Gate loading/unloading ----------------------------------------------------------------------------------------------- -# ██████╗ █████╗ ████████╗███████╗ ██╗ ██████╗ █████╗ ██████╗ -# ██╔════╝ ██╔══██╗╚══██╔══╝██╔════╝ ██║ ██╔═══██╗██╔══██╗██╔══██╗ -# ██║ ███╗███████║ ██║ █████╗ ██║ ██║ ██║███████║██║ ██║ -# ██║ ██║██╔══██║ ██║ ██╔══╝ ██║ ██║ ██║██╔══██║██║ ██║ -# ╚██████╔╝██║ ██║ ██║ ███████╗ ███████╗╚██████╔╝██║ ██║██████╔╝ -# ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ -# -# These setttings control the loading and unloading filament at the gate. The primary options are you use a endstop switch -# at the gate (ala TradRack) or an encoder (ERCF default). You can even have both a gate sensor for loading/parking and -# still use the encoder for other move verification (see advanced 'gate_endstop_to_encoder' option). -# Note: the `encoder` method, due to the nature of its operation will overshoot a little. This is not a problem in practice -# because the overshoot will simply be compensated for in the subsequent fast bowden move. -# -# Possible gate_homing_endtop names: -# encoder - Detect filament position using movement of the encoder -# mmu_gate - Use gate endstop -# mmu_gear - Use individual per-gate endstop (type-B MMU's) -# extruder - Use extruder entry sensor (Only for some type-B designs, see [mmu_machine] require_bowden_move setting) -# -gate_homing_endstop: mmu_gate # Name of gate endstop, "encoder" forces use of encoder for parking -gate_homing_max: 300 # Maximum move distance to home to the gate (actual move distance for encoder parking) -gate_preload_homing_max: 70 # Maximum homing distance to the mmu_gear endstop (if MMU is fitted with one) -gate_unload_buffer: 50 # Amount to reduce the fast unload so that filament doesn't overshoot when parking -gate_parking_distance: 100 # Parking postion in the gate (distance back from gate endstop/encoder point) -gate_endstop_to_encoder: 10 # Distance between gate endstop and encoder (IF both fitted. +ve if encoder after endstop) -gate_autoload: 1 # If pre-gate sensor fitted this controls the automatic loading of the gate -gate_final_eject_distance: 100 # Distance to eject filament on EJECT rather than UNLOAD - - -# Bowden tube loading/unloading ---------------------------------------------------------------------------------------- -# ██████╗ ██████╗ ██╗ ██╗██████╗ ███████╗███╗ ██╗ ██╗ ██████╗ █████╗ ██████╗ -# ██╔══██╗██╔═══██╗██║ ██║██╔══██╗██╔════╝████╗ ██║ ██║ ██╔═══██╗██╔══██╗██╔══██╗ -# ██████╔╝██║ ██║██║ █╗ ██║██║ ██║█████╗ ██╔██╗ ██║ ██║ ██║ ██║███████║██║ ██║ -# ██╔══██╗██║ ██║██║███╗██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██║ ██║██╔══██║██║ ██║ -# ██████╔╝╚██████╔╝╚███╔███╔╝██████╔╝███████╗██║ ╚████║ ███████╗╚██████╔╝██║ ██║██████╔╝ -# ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ -# -# In addition to different bowden loading speeds for buffer and non-buffered filament it is possible to detect missed -# steps caused by "jerking" on a heavy spool. If bowden correction is enabled the driver with "believe" the encoder -# reading and make correction moves to bring the filament to within the 'bowden_allowable_load_delta' of the end of -# bowden position (this does require a reliable encoder and is not recommended for very high speed loading >350mm/s) -# -bowden_apply_correction: 0 # 1 to enable, 0 disabled. Requires Encoder -bowden_allowable_load_delta: 20.0 # How close in mm the correction moves will attempt to get to target. Requires Encoder - -# This test verifies the filament is free of extruder before the fast bowden movement to reduce possibility of grinding filament -bowden_pre_unload_test: 1 # 1 to check for bowden movement before full pull (slower), 0 don't check (faster). Requires Encoder - -# ADVANCED: If pre-unload test is enabled, this controls the detection of successful bowden pre-unload test and represents -# the fraction of allowable mismatch between actual movement and that seen by encoder. Setting to 50% tolerance usually -# works well. Increasing will make test more tolerent. Value of 100% essentially disables error detection -bowden_pre_unload_error_tolerance: 50 - - -# Extruder homing ----------------------------------------------------------------------------------------------------- -# ███████╗██╗ ██╗████████╗ ██╗ ██╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ██████╗ -# ██╔════╝╚██╗██╔╝╚══██╔══╝ ██║ ██║██╔═══██╗████╗ ████║██║████╗ ██║██╔════╝ -# █████╗ ╚███╔╝ ██║ ███████║██║ ██║██╔████╔██║██║██╔██╗ ██║██║ ███╗ -# ██╔══╝ ██╔██╗ ██║ ██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║██║ ██║ -# ███████╗██╔╝ ██╗ ██║██╗ ██║ ██║╚██████╔╝██║ ╚═╝ ██║██║██║ ╚████║╚██████╔╝ -# ╚══════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ -# -# Happy Hare needs a reference "homing point" close to the extruder from which to accurately complete the loading of -# the toolhead. This homing operation takes place after the fast bowden load and it is anticipated that that load -# operation will leave the filament just shy of the homing point. If using a toolhead sensor this initial extruder -# homing is unecessary (but can be forced) because the homing will occur inside the extruder for the optimum in accuracy. -# -# In addition to an entry sensor "mmu_extruder" it is possbile for Happy Hare to "feel" for the extruder gear entry -# by colliding with it. Because this method is not completely deterministic you might find have to find the sweetspot -# for your setup by adjusting the TMC current reduction. Also, touch (stallguard) sensing is possible to configure but -# unfortunately doesn't work well with some external mcu's. Note that reduced current during collision detection can -# also prevent unecessary filament griding -# -# Possible homing_endtop names: -# collision - Detect the collision with the extruder gear by monitoring encoder movement (Requires encoder) -# Fast bowden load will move to the extruder gears -# mmu_gear_touch - Use touch detection when the gear stepper hits the extruder (Requires stallguard) -# Fast bowden load will move to extruder_homing_buffer distance before extruder gear -# extruder - If you have a "filament entry" endstop configured (Requires 'extruder' endstop) -# Fast bowden load will move to extruder_homing_buffer distance before sensor -# none - Don't attempt to home. Only possibiliy if lacking all sensor options -# Fast bowden load will move to the extruder gears. Fine if using toolhead sensor -# Note: The homing_endstop will be ignored if a toolhead sensor is available unless `extruder_force_homing: 1` -# -extruder_homing_max: 80 # Maximum distance to advance in order to attempt to home the extruder -extruder_homing_endstop: none # Filament homing method/endstop name (fallback if toolhead sensor not available) -extruder_homing_buffer: 25 # Amount to reduce the fast bowden load so filament doesn't overshoot the extruder homing point -extruder_collision_homing_current: 30 # % gear_stepper current (10%-100%) to use when homing to extruder homing (100 to disable) - -# In the absence of a toolhead sensor Happy Hare will automatically default to extruder entrance detection regardless -# of this setting, however if you have a toolhead sensor you can still force the additional (unecessary) step of -# initially homing to extruder entrance then home to the toolhead sensor -# -extruder_force_homing: 0 - - -# Toolhead loading and unloading -------------------------------------------------------------------------------------- -# ████████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗███████╗ █████╗ ██████╗ ██╗ ██████╗ █████╗ ██████╗ -# ╚══██╔══╝██╔═══██╗██╔═══██╗██║ ██║ ██║██╔════╝██╔══██╗██╔══██╗ ██║ ██╔═══██╗██╔══██╗██╔══██╗ -# ██║ ██║ ██║██║ ██║██║ ███████║█████╗ ███████║██║ ██║ ██║ ██║ ██║███████║██║ ██║ -# ██║ ██║ ██║██║ ██║██║ ██╔══██║██╔══╝ ██╔══██║██║ ██║ ██║ ██║ ██║██╔══██║██║ ██║ -# ██║ ╚██████╔╝╚██████╔╝███████╗██║ ██║███████╗██║ ██║██████╔╝ ███████╗╚██████╔╝██║ ██║██████╔╝ -# ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ -# -# It is possible to define highly customized loading and unloading sequences, however, unless you have a specialized -# setup it is probably easier to opt for the built-in toolhead loading and unloading sequence which already offers a -# high degree of customization. If you need even more control then edit the _MMU_LOAD_SEQUENCE and _MMU_UNLOAD_SEQUENCE -# macros in mmu_sequence.cfg - but be careful! -# -# An MMU must have a known point at the end of the bowden from which it can precisely load the extruder. Generally this -# will either be the extruder extrance (which is controlled with settings above) or by homing to toolhead sensor. If -# you have toolhead sensor it is past the extruder gear and the driver needs to know the max distance (from end of -# bowden move) to attempt homing -# -toolhead_homing_max: 40 # Maximum distance to advance in order to attempt to home to defined homing endstop - -# IMPORTANT: These next three settings are based on the physical dimensions of your toolhead -# Once a homing position is determined, Happy Hare needs to know the final move distance to the nozzle. There is only -# one correct value for your setup - use 'toolhead_ooze_reduction' (which corresponds to the residual filament left in -# your nozzle) to control excessive oozing on load. See doc for table of proposed values for common configurations. -# -# NOTE: If you have a toolhead sensor you can automate the calculation of these parameters! Read about the -# `MMU_CALIBRATE_TOOLHEAD` command (https://github.com/moggieuk/Happy-Hare/wiki/Blobing-and-Stringing) -# -toolhead_extruder_to_nozzle: 72 # Distance from extruder gears (entrance) to nozzle -toolhead_sensor_to_nozzle: 62 # Distance from toolhead sensor to nozzle (ignored if not fitted) -toolhead_entry_to_extruder: 8 # Distance from extruder "entry" sensor to extruder gears (ignored if not fitted) - -# This setting represents how much residual filament is left behind in the nozzle when filament is removed, it is thus -# used to reduce the extruder loading length and prevent excessive blobing but also in the calculation of purge volume. -# Note that this value can also be measured with the `MMU_CALIBRATE_TOOLHEAD` procedure -# -toolhead_residual_filament: 0 # Reduction in extruder loading length because of residual filament left behind - -# TUNING: Finally, this is the last resort tuning value to fix blobbing. It is expected that this value is NEAR ZERO as -# it represents a further reduction in extruder load length to fix blobbing. If using a wipetower and you experience blobs -# on it, increase this value (reduce the quantity of filament loaded). If you experience gaps, decrease this value. If gaps -# and already at 0 then perhaps the 'toolhead_extruder_to_nozzle' or 'toolhead_residual_filament' settings are incorrect. -# Similarly a value >+5mm also suggests the four settings above are not correct. Also see 'retract' setting in -# 'mmu_macro_vars.cfg' for final in-print ooze tuning. -# -toolhead_ooze_reduction: 0 # Reduction in extruder loading length to prevent ooze (represents filament remaining) - -# Distance added to the extruder unload movement to ensure filament is free of extruder. This adds some degree of tolerance -# to slightly incorrect configuration or extruder slippage. However don't use as an excuse for incorrect toolhead settings -# -toolhead_unload_safety_margin: 10 # Extra movement saftey margin (default: 10mm) - -# If not synchronizing gear and extruder and you experience a "false" clog detection immediately after the tool change -# it might be because of a long bowden and/or large internal diameter that causes slack in the filament. This optional -# move will tighten the filament after a load by % of current clog detection length. Gear stepper will run at 50% current -# -toolhead_post_load_tighten: 60 # % of clog detection length, 0 to disable. Ignored if 'sync_to_extruder: 1' - -# ADVANCED: Controls the detection of successful extruder load/unload movement and represents the fraction of allowable -# mismatch between actual movement and that seen by encoder. Setting to 100% tolerance effectively turns off checking. -# Some designs of extruder have a short move distance that may not be picked up by encoder and cause false errors. This -# allows masking of those errors. However the error often indicates that your extruder load speed is too high or the -# friction is too high on the filament and in that case masking the error is not a good idea. Try reducing friction -# and lowering speed first! -# -toolhead_move_error_tolerance: 60 - - -# Tip forming --------------------------------------------------------------------------------------------------------- -# ████████╗██╗██████╗ ███████╗ ██████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ██████╗ -# ╚══██╔══╝██║██╔══██╗ ██╔════╝██╔═══██╗██╔══██╗████╗ ████║██║████╗ ██║██╔════╝ -# ██║ ██║██████╔╝ █████╗ ██║ ██║██████╔╝██╔████╔██║██║██╔██╗ ██║██║ ███╗ -# ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██║██║╚██╗██║██║ ██║ -# ██║ ██║██║ ██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██║██║ ╚████║╚██████╔╝ -# ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ -# -# Tip forming responsibity can be split between slicer (in-print) and standalone macro (not in-print) or forced to always -# be done by Happy Hare's standalone macro. Since you always need the option to form tips without the slicer so it is -# generally easier to completely turn off the slicer, force "standalone" tip forming and tune only in Happy Hare. -# -# When Happy Hare is asked to form a tip it will run the referenced macro. Two are reference examples are provided but -# you can implement your own: -# _MMU_FORM_TIP .. default tip forming similar to popular slicers like Superslicer and Prusaslicer -# _MMU_CUT_TIP .. for Filametrix (ERCFv2) or similar style toolhead filament cutting system -# -# Often it is useful to increase the extruder current for the rapid movement to ensure high torque and no skipped steps -# -# If opting for slicer tip forming you MUST configure where the slicer leaves the filament in the extruder since -# there is no way to determine this. This can be ignored if all tip forming is performed by Happy Hare -# -force_form_tip_standalone: 1 # 0 = Slicer in print else standalone, 1 = Always standalone tip forming (TURN SLICER OFF!) -form_tip_macro: _MMU_FORM_TIP # Name of macro to call to perform the tip forming (or cutting) operation -extruder_form_tip_current: 100 # % of extruder current (100%-150%) to use when forming tip (100 to disable) -slicer_tip_park_pos: 0 # This specifies the position of filament in extruder after slicer completes tip forming - - -# Synchronized gear/extruder movement ---------------------------------------------------------------------------------- -# ███╗ ███╗ ██████╗ ████████╗ ██████╗ ██████╗ ███████╗██╗ ██╗███╗ ██╗ ██████╗ -# ████╗ ████║██╔═══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ██╔════╝╚██╗ ██╔╝████╗ ██║██╔════╝ -# ██╔████╔██║██║ ██║ ██║ ██║ ██║██████╔╝ ███████╗ ╚████╔╝ ██╔██╗ ██║██║ -# ██║╚██╔╝██║██║ ██║ ██║ ██║ ██║██╔══██╗ ╚════██║ ╚██╔╝ ██║╚██╗██║██║ -# ██║ ╚═╝ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ██║ ███████║ ██║ ██║ ╚████║╚██████╗ -# ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ -# -# This controls whether the extruder and gear steppers are synchronized during printing operations -# If you normally run with maxed out gear stepper current consider reducing it with 'sync_gear_current' -# If equipped with TMC drivers the current of the gear and extruder motors can be controlled to optimize performance. -# This can be useful to control gear stepper temperature when printing with synchronized motor -# -sync_gear_current: 70 # % of gear_stepper current (10%-100%) to use when syncing with extruder during print - -# Optionally it is possible to leverage feedback for a "compression/expansion" sensor in the bowden path from MMU to -# extruder to ensure that the two motors are kept in sync as viewed by the filament (the signal feedback state can be -# binary supplied by one or two switches: -1 (expanded) and 1 (compressed) of proportional value between -1.0 and 1.0 -# Requires [mmu_sensors] setting -# -sync_feedback_enable: 0 # 0 = Turn off (even with fitted sensor), 1 = Turn on -sync_multiplier_high: 1.05 # Maximum factor to apply to gear stepper 'rotation_distance' -sync_multiplier_low: 0.95 # Minimum factor to apply - - -# Filament Management Options ---------------------------------------------------------------------------------------- -# ███████╗██╗██╗ ███╗ ███╗ ██████╗ ███╗ ███╗████████╗ -# ██╔════╝██║██║ ████╗ ████║██╔════╝ ████╗ ████║╚══██╔══╝ -# █████╗ ██║██║ ██╔████╔██║██║ ███╗██╔████╔██║ ██║ -# ██╔══╝ ██║██║ ██║╚██╔╝██║██║ ██║██║╚██╔╝██║ ██║ -# ██║ ██║███████╗██╗ ██║ ╚═╝ ██║╚██████╔╝██║ ╚═╝ ██║ ██║ -# ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ -# -# - Clog detection is available when encoder is fitted and it can detect when filament is not moving and pause the print -# - EndlessSpool feature allows detection of runout on one spool and the automatic mapping of tool to an alternative -# gate (spool). Set to '1', this feature requires clog detection or gate sensor or pre-gate sensors. EndlessSpool -# functionality can optionally be extended to attempt to load an empty gate with 'endless_spool_on_load'. On some MMU -# designs (with linear selector) it can also be configured to eject filament remains to a designated gate rather than -# defaulting to current gate. A custom gate will disable pre-gate runout detection for EndlessSpool because filament -# end must completely pass through the gate for selector to move -# -enable_clog_detection: 0 # 0 = disable, 1 = static length clog detection, 2 = automatic length clog detection -enable_endless_spool: 1 # 0 = disable, 1 = enable endless spool -endless_spool_on_load: 0 # 0 = don't apply endless spool on load, 1 = run endless spool if gate is empty -endless_spool_eject_gate: -1 # Which gate to eject the filament remains. -1 = current gate -#endless_spool_groups: # Default EndlessSpool groups (see later in file) -# -# Spoolman support requires you to correctly enable spoolman with moonraker first. If enabled, the gate SpoolId will -# be used to load filament details and color from the spoolman database and Happy Hare will activate/deactivate -# spools as they are used. The enabled variation allows for either the local map or the spoolman map to be the -# source of truth as well as just fetching filament attributes. See this table for explanation: -# -# | Activate/ | Fetch filament attributes | Filament gate | Filament gate | -# spoolman_support | Deactivate | attributes from spoolman | assignment shown | assignment pulled | -# | spool? | based on spool_id? | in spoolman db? | from spoolman db? | -# -----------------+------------+---------------------------+------------------+-------------------+ -# off | no | no | no | no | -# readonly | yes | yes | no | no | -# push | yes | yes | yes | no | -# pull | yes | yes | yes | yes | -# -spoolman_support: off # off = disabled, readonly = enabled, push = local gate map, pull = remote gate map -pending_spool_id_timeout: 20 # Seconds after which this pending spool_id (set with rfid) is voided -# -# Mainsail/Fluid UI can visualize the color of filaments next to the extruder/tool chooser. The color is dynamic and -# can be customized to your choice: -# -# slicer - Color from slicer tool map (what the slicer expects) -# allgates - Color from all the tools in the gate map after running through the TTG map -# gatemap - As per gatemap but hide empty tools -# -# Note: Happy Hare will also add the 'spool_id' variable to the Tx macro if spoolman is enabled -# -t_macro_color: slicer # 'slicer' = default | 'allgates' = mmu | 'gatemap' = mmu without empty gates - - -# Print Statistics --------------------------------------------------------------------------------------------------- -# ███████╗████████╗ █████╗ ████████╗███████╗ -# ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝ -# ███████╗ ██║ ███████║ ██║ ███████╗ -# ╚════██║ ██║ ██╔══██║ ██║ ╚════██║ -# ███████║ ██║ ██║ ██║ ██║ ███████║ -# ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ -# -# These parameters determine how print statistic data is shown in the console. This table can show a lot of data, -# probably more than you'd want to see. Below you can enable/disable options to your needs. -# -# +-----------+---------------------+----------------------+----------+ -# | 114(46) | unloading | loading | complete | -# | swaps | pre | - | post | pre | - | post | swap | -# +-----------+------+-------+------+------+-------+-------+----------+ -# | all time | 0:07 | 47:19 | 0:00 | 0:01 | 37:11 | 33:39 | 2:00:38 | -# | - avg | 0:00 | 0:24 | 0:00 | 0:00 | 0:19 | 0:17 | 1:03 | -# | this job | 0:00 | 10:27 | 0:00 | 0:00 | 8:29 | 8:30 | 28:02 | -# | - avg | 0:00 | 0:13 | 0:00 | 0:00 | 0:11 | 0:11 | 0:36 | -# | last | 0:00 | 0:12 | 0:00 | 0:00 | 0:10 | 0:14 | 0:39 | -# +-----------+------+-------+------+------+-------+-------+----------+ -# Note: Only formats correctly on Python3 -# -# Comma separated list of desired columns -# Options: pre_unload, unload, post_unload, pre_load, load, post_load, total -console_stat_columns: unload, load, post_load, total - -# Comma seperated list of rows. The order determines the order in which they're shown. -# Options: total, total_average, job, job_average, last -console_stat_rows: total, total_average, job, job_average, last - -# How you'd want to see the state of the gates and how they're performing -# string - poor, good, perfect, etc.. -# percentage - rate of success -# emoticon - fun sad to happy faces (python3 only) -console_gate_stat: emoticon - -# Always display the full statistics table -console_always_output_full: 1 # 1 = Show full table, 0 = Only show totals out of print - - -# Miscellaneous, but you should review ------------------------------------------------------------------------------- -# ███╗ ███╗██╗███████╗ ██████╗ -# ████╗ ████║██║██╔════╝██╔════╝ -# ██╔████╔██║██║███████╗██║ -# ██║╚██╔╝██║██║╚════██║██║ -# ██║ ╚═╝ ██║██║███████║╚██████╗ -# ╚═╝ ╚═╝╚═╝╚══════╝ ╚═════╝ -# -# Important you verify these work for you setup/workflow. Temperature and timeouts -# -timeout_pause: 72000 # Idle time out (printer shutsdown) in seconds used when in MMU pause state -disable_heater: 600 # Delay in seconds after which the hotend heater is disabled in the MMU_PAUSE state -default_extruder_temp: 200 # Default temperature for performing swaps and forming tips when not in print (overriden by gate map) -extruder_temp_variance: 2 # When waiting for extruder temperature this is the +/- permissible variance in degrees (>= 1) -# -# These are auto calibration/tuning settings. Once the gear rotation_distance and encoder are calibrated, enabling these options -# will lessen the initial calibration and will automatically tune bowden length and individual gate rotation_distance differences. -# Note: What can be tuned is based on "variable_rotation_distance" and "variable_bowden_lengths" settings in mmu_hardware.cfg -# E.g. with fixed bowden and multiple BMG gears and encoder like the ERCF, the bowden length is tuned on gate#0 and -# rotation_distance (MMU_CALIBRATE_GATE) is tuned for other gates. -# -autotune_bowden_length: 0 # Automated bowden length calibration/tuning. 1=automatic, 0=manual/off -autotune_rotation_distance: 0 # Automated gate calibration/tuning (requires encoder). 1=automatic, 0=manual/off -# -# Other workflow options -# -startup_home_if_unloaded: 0 # 1 = force homing of MMU on startup if unloaded, 0 = do nothing -startup_reset_ttg_map: 0 # 1 = reset TTG map on startup, 0 = do nothing -show_error_dialog: 0 # 1 = show pop-up dialog in addition to console message, 0 = show error in console -strict_filament_recovery: 0 # If enabled with MMU with toolhead sensor, this will cause filament position recovery to - # perform extra moves to look for filament trapped in the space after extruder but before sensor -filament_recovery_on_pause: 1 # 1 = Run a quick check to determine current filament position on pause/error, 0 = disable -retry_tool_change_on_error: 0 # Whether to automatically retry a failed tool change. If enabled Happy Hare will perform - # the equivalent of 'MMU_RECOVER' + 'Tx' commands which usually is all that is necessary - # to recover. Note that enabling this can mask problems with your MMU -bypass_autoload: 1 # If entruder sensor fitted this controls the automatic loading of extruder for bypass operation -# -# Advanced options. Don't mess unless you fully understand. Read documentation. -# -encoder_move_validation: 1 # ADVANCED: 1 = Normally Encoder validates move distances are within given tolerance - # 0 = Validation is disabled (eliminates slight pause between moves but less safe) -print_start_detection: 1 # ADVANCED: Enabled for Happy Hare to automatically detect start and end of print and call - # ADVANCED: MMU_START_PRINT and MMU_END_PRINT automatically. Harmles to leave enabled but can disable - # if you think it is causing problems and known START/END is covered in your macros -extruder: extruder # ADVANCED: Name of the toolhead extruder that MMU is using -gcode_load_sequence: 0 # VERY ADVANCED: Gcode loading sequence 1=enabled, 0=internal logic (default) -gcode_unload_sequence: 0 # VERY ADVANCED: Gcode unloading sequence, 1=enabled, 0=internal logic (default) -homing_extruder: 1 # CAUTION: Normally this should be 1. 0 will disable the homing extruder capability - - -# ADVANCED: Klipper tuning ------------------------------------------------------------------------------------------- -# ██╗ ██╗██╗ ██╗██████╗ ██████╗ ███████╗██████╗ -# ██║ ██╔╝██║ ██║██╔══██╗██╔══██╗██╔════╝██╔══██╗ -# █████╔╝ ██║ ██║██████╔╝██████╔╝█████╗ ██████╔╝ -# ██╔═██╗ ██║ ██║██╔═══╝ ██╔═══╝ ██╔══╝ ██╔══██╗ -# ██║ ██╗███████╗██║██║ ██║ ███████╗██║ ██║ -# ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ -# -# Timer too close is a catch all error, however it has been found to occur on some systems during homing and probing -# operations especially so with CANbus connected mcus. Happy Hare uses many homing moves for reliable extruder loading -# and unloading and enabling this option affords klipper more tolerance and avoids this dreaded error -# -update_trsync: 0 # 1 = Increase TRSYNC_TIMEOUT, 0 = Leave the klipper default -# -# Some CANbus boards are prone to this but it have been seen on regular USB boards where a comms timeout will kill -# the print. Since it seems to occur only on homing moves they can be safely retried to workaround. This has been -# working well in practice -canbus_comms_retries: 3 # Number of retries. Recommend the default of 3. -# -# Older neopixels have very finiky timing and can generate lots of "Unable to obtain 'neopixel_result' response" -# errors in klippy.log. An often cited workaround is to increase BIT_MAX_TIME in neopixel.py. This option does that -# automatically for you to save dirtying klipper -update_bit_max_time: 1 # 1 = Increase BIT_MAX_TIME, 0 = Leave the klipper default - - -# ADVANCED: MMU macro overrides --- ONLY SET IF YOU'RE COMFORTABLE WITH KLIPPER MACROS ------------------------------- -# ███╗ ███╗ █████╗ ██████╗██████╗ ██████╗ ███████╗ -# ████╗ ████║██╔══██╗██╔════╝██╔══██╗██╔═══██╗██╔════╝ -# ██╔████╔██║███████║██║ ██████╔╝██║ ██║███████╗ -# ██║╚██╔╝██║██╔══██║██║ ██╔══██╗██║ ██║╚════██║ -# ██║ ╚═╝ ██║██║ ██║╚██████╗██║ ██║╚██████╔╝███████║ -# ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ -# -# 'pause_macro' defines what macro to call on MMU error (must put printer in paused state) -# Other macros are detailed in 'mmu_sequence.cfg' -# Also see form_tip_macro in Tip Forming section -# -pause_macro: PAUSE # What macro to call to pause the print -action_changed_macro: _MMU_ACTION_CHANGED # Called when action (printer.mmu.action) changes -print_state_changed_macro: _MMU_PRINT_STATE_CHANGED # Called when print state (printer.mmu.print_state) changes -mmu_event_macro: _MMU_EVENT # Called on useful MMU events -pre_unload_macro: _MMU_PRE_UNLOAD # Called before starting the unload -post_form_tip_macro: _MMU_POST_FORM_TIP # Called immediately after tip forming -post_unload_macro: _MMU_POST_UNLOAD # Called after unload completes -pre_load_macro: _MMU_PRE_LOAD # Called before starting the load -post_load_macro: _MMU_POST_LOAD # Called after the load is complete -unload_sequence_macro: _MMU_UNLOAD_SEQUENCE # VERY ADVANCED: Optionally called based on 'gcode_unload_sequence' -load_sequence_macro: _MMU_LOAD_SEQUENCE # VERY ADVANCED: Optionally called based on 'gcode_load_sequence' -espooler_start_macro: MMU_ESPOOLER_START # Called to start eSpooler if fitted (params: GATE, STEP_SPEED, MAX_DISTANCE, HOMING) -espooler_stop_macro: MMU_ESPOOLER_STOP # Called to stop eSpooler if fitted (params: GATE, DISTANCE) - - -# ADVANCED: See documentation for use of these ----------------------------------------------------------------------- -# ██████╗ ███████╗███████╗███████╗████████╗ ██████╗ ███████╗███████╗███████╗ -# ██╔══██╗██╔════╝██╔════╝██╔════╝╚══██╔══╝ ██╔══██╗██╔════╝██╔════╝██╔════╝ -# ██████╔╝█████╗ ███████╗█████╗ ██║ ██║ ██║█████╗ █████╗ ███████╗ -# ██╔══██╗██╔══╝ ╚════██║██╔══╝ ██║ ██║ ██║██╔══╝ ██╔══╝ ╚════██║ -# ██║ ██║███████╗███████║███████╗ ██║ ██████╔╝███████╗██║ ███████║ -# ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚══════╝ -# -# Examples... -# Gate: #0 #1 #2 #3 #4 #5 #6 #7 #8 -#gate_status: 1, 0, 1, 2, 2, -1, -1, 0, 1 -#gate_filament_name: one, two, three, four, five, six, seven, eight, nine -#gate_material: PLA, ABS, ABS, ABS+, PLA, PLA, PETG, TPU, ABS -#gate_color: red, black, yellow, green, blue, indigo, ffffff, grey, black -#gate_temperature: 210, 240, 235, 245, 210, 200, 215, 240, 240 -#gate_spool_id: 3, 2, 1, 4, 5, 6, 7, -1, 9 -#gate_speed_override: 100, 100, 100, 100, 100, 100, 100, 50, 100 -#endless_spool_groups: 0, 1, 2, 1, 0, 0, 3, 4, 1 -# -# Tool: T0 T1 T2 T3 T4 T5 T6 T7 T8 -#tool_to_gate_map: 0, 1, 2, 3, 4, 5, 6, 7, 8 - -# SUPPLEMENTAL USER CONFIG retained after upgrade -------------------------------------------------------------------- -# diff --git a/printer_data/config/mmu-20241127_231535/mmu_vars.cfg b/printer_data/config/mmu-20241127_231535/mmu_vars.cfg deleted file mode 100644 index 0bd436a..0000000 --- a/printer_data/config/mmu-20241127_231535/mmu_vars.cfg +++ /dev/null @@ -1,8 +0,0 @@ -# This is the template file for storing Happy Hare state and calibration variables. It is pointed to -# with the [save_variables] block in 'mmu_macro_vars.cfg' -# -# If you want to use an existing "variables" file, then that is fine but make sure you copy the -# "mmu__revision" line to it because Happy Hare will look for this to validate correct setup -# -[Variables] -mmu__revision = 0 diff --git a/printer_data/config/mmu-20241207_235252/addons/blobifier.cfg b/printer_data/config/mmu-20241207_235252/addons/blobifier.cfg deleted file mode 100644 index 5e39e07..0000000 --- a/printer_data/config/mmu-20241207_235252/addons/blobifier.cfg +++ /dev/null @@ -1,546 +0,0 @@ -# Include servo hardware definition separately to allow for automatic upgrade - - -########################################################################################## - -# Sample config to be used in conjunction with Blobifier Purge Tray, Bucket & Nozzle -# Scrubber mod. Created by Dendrowen (dendrowen on Discord). The Macro is based on a -# version, and Nozzle Scrubber is made by Hernsl (hernsl#8860 on Discord). The device is -# designed around a Voron V2.4 300mm, but should work for 250mm and 350mm too. This -# version only supports the assembly on the rear-left of the bed. If you decide to change -# that, please consider contributing to the project by creating a pull request with the -# needed changes. - -# IMPORTANT: The rear-left part of your bed becomes unusable by this mod because the -# toolhead needs to lower down to 0. Be sure not to use the left-rear 130x35mm. - -# The goals of this combination of devices is to dispose of purged filament during a -# multicolored print without the need of a purge block and without the flurries of -# filament poops consuming your entire 3D printer room. The Blobifier achieves that by -# purging onto a retractable tray which causes the filament to turn into a tiny blob -# rather then a large spiral. This keeps the waste relativly small. The bucket should be -# able to account for up to 200 filament swaps (for the 300mm V2). - -# The Blobifier uses some room at the back-left side of your printer, depending on your -# printer limits and positions. (usually max_pos.y - toolhead_y and brush_start + -# brush_width + toolhead_x). If you do place objects within this region, Blobifier will -# skip purging automatically. It does this by extending the EXCLUDE_OBJECT_* macro's, so -# make sure you have exclude objects enabled in your slicer. - -# If your using Blobifier in conjunction with the filament cutter on the stealthburner -# toolhead, you can place the pin at max_pos.y - 7 (e.g., max pos y is 307, place it at -# 300). The pin will then poke through the cavity in your toolhead. (Be careful with -# manually moving the toolhead. I have broken many filament cutter pins) - -# It is advised to use the start_gcode from Happy Hare. Then you will be able to fully -# and efficiently use this mod. Check the Happy Hare document at gcode_preprocessing.md -# in the Happy Hare github for more details. - -###################################### DISCLAIMER ######################################## - -# You, and you alone, are responsible for the correct execution of these macros and -# gcodes. Any damage that may occur to your machine remains your responsibility. -# Especially when executing this macro for the first few times, keep an eye on your -# printer and the -# emergency stop. - -########################################################################################## - -########################################################################################## -# Main macro. Usually you should only need to call this one or place it in the Happy Hare -# _MMU_POST_LOAD macro using the variable_user_post_load_extension: -# -# variable_user_post_load_extension : `BLOBIFIER` -# -# Notes on parameters: -# PURGE_LENGTH=[float] (optional) The length to purge. If ommited (default) it will check -# the purge_volumes matrix or variable_purge_length. This can be used -# to override and for testing. -# -[gcode_macro BLOBIFIER] -# These parameters define your filament purging. -# Note that the control of retraction is set in 'mmu_macro_vars.cfg' which can be increased -# if you experience excessive oozing. -variable_purge_spd: 400 # Speed, in mm/min, of the purge. -variable_purge_temp_min: 200 # Minimum nozzle purge temperature. -variable_toolhead_x: 97 # From the nozzle to the left of your toolhead -variable_toolhead_y: 254 # From the nozzle to the front of your toolhead -variable_toolhead_x_entry: 97 # x entry location before going to the purge location -variable_toolhead_y_entry: 240 # y entry location before going to the purge location -variable_z_min: 30 # minimum height of Z during park -variable_travel_speed: 300 # how fast travel speeds will be performed -variable_entry_speed: 50 # how fast to move from the entry location to the purge location -variable_z_lift: 2 -# This macro will prevent a gcode movement downward while 'blobbing' if there might be a -# print in the way (e.g. You print something large and need the area where Blobifier does -# its... 'business'). However, at low heights (or at print start) this might not be -# desireable. You can force a 'safe descend' with this variable. Keep in mind that the -# height of the print is an estimation based on previous heights and certain assumptions -# so it might be wise to include a safety margin of 0.2mm -variable_force_safe_descend_height_until: 1.0 - -# Adjust this so that your nozzle scrubs within the brush. Be careful not to go too low! -# Start out with a high value (like, 6) and go -# down from there. -variable_brush_top: 0 - -# These parameters define your scrubbing, travel speeds, safe z clearance and how many -# times you want to wipe. Update as necessary. -variable_clearance_z: 0 # When traveling, but not cleaning, the - # clearance along the z-axis between nozzle - # and brush. -variable_wipe_qty: 2 # Number of complete (A complete wipe: left, - # right, left OR right, left, right) wipes. -variable_travel_spd_xy: 18000 # Travel (not cleaning) speed along x and - # y-axis in mm/min. -variable_travel_spd_z: 1000 # Travel (not cleaning) speed along z axis - # in mm/min. -variable_wipe_spd_xy: 6000 # Nozzle wipe speed in mm/min. - -# The acceleration to use when using the brush action. If set to 0, it uses the already -# set acceleration. However, in some cases this is not desirable for the last motion -# could be an 'outer contour' acceleration which is usually lower. -variable_brush_accel: 4000 - -# Blobifier sends the toolhead to the maximum y position during purge oeprations and -# minimum x position during shake operations. This can cause issues when skew correction -# is set up. If you have skew correction enabled and get 'move out of range' errors -# regarding blobifier while skew is enabled, try increasing this value. Keep the -# adjustments small though! (0.1mm - 0.5mm) and increase it until it works. -variable_skew_correction: 0.1 - -# These parameters define the size of the brush. Update as necessary. A visual reference -# is provided below. -# -# ← brush_width → -# _________________ -# | | ↑ Y position is acquired from your -# brush_start (x) | | brush_depth stepper_y position_max. Adjust -# |_________________| ↓ your brush physically in Y so -# (y) that the nozzle scrubs within the -# brush_front brush. -# __________________________________________________________ -# PRINTER FRONT -# -# -# Start location of the brush. Defaults for 250, 300 and 350mm are provided below. -# Uncomment as necessary -#variable_brush_start: 34 # For 250mm build -variable_brush_start: 96 # For 300mm build -#variable_brush_start: 84 # for 350mm build - -# width of the brush -variable_brush_width: -35 - -# Location of where to purge. The tray is 15mm in length, so if you assemble it against -# the side of the bed (default), 10mm is a good location -variable_purge_x: 97 - - - -# ======================================================================================== -# ==================== BLOB TUNING ======================================================= -# ======================================================================================== - -# The following section defines how the purging sequence is executed. This is where you -# tune the purging to create pretty blobs. Refer to the visual reference for a better -# understanding. The visual is populated with example values. Below are some guides -# provided to help with tuning. -# -# \_____________/ -# |___|___| -# \_/ ______________ < End of third iteration. -# / \ HEIGHT: 3 x iteration_z_raise - (2 + 1) x iteration_z_change (3 x 5 - 2 x 1.2 = 11.4) -# | | EXTRUDED: 3 x max_iteration_length (3 x 50 = 150) -# / \ ______________ < End of second iteration. -# | \ HEIGHT: 2 x iteration_z_raise - 1 x iteration_z_change (2 x 5 - 1 x 1.2 = 8.8) -# / | EXTRUDED: 2 x max_iteration_length (2 x 50 = 100) -# | \ ______________ < End of first iteration. -# / \ HEIGHT: 1 x iteration_z_raise (1 x 5 = 5) -# | | EXTRUDED: 1 x max_iteration_length (1 x 50 = 50) -#___________ \ / ______________ < Start height of the nozzle. default value: 1.5mm -# |_______________\___________/_ ______________ < Bottom of the tray -# |_____________________________| -# | -# -########################### BLOB TUNING ############################## -# +-------------------------------------+----------------------------+ -# | Filament sticks to the nozzle at | Incr. purge start | -# | initial purge (first few mm) | | -# +-------------------------------------+----------------------------+ -# | Filament scoots out from under | Incr. temperature | -# | the nozzle at the first iteration | Decr. z_raise | -# | | Incr. purge_length_maximum | -# +-------------------------------------+----------------------------+ -# | Filament scoots out from under the | Decr. purge_spd | -# | the nozzle at later iterations | Decr. z_raise_exp | -# | | Decr. z_raise | -# | | Incr. purge_length_maximum | -# +-------------------------------------+----------------------------+ -# | Filament sticks to the nozzle at | Incr. z_raise_exp | -# | later iterations | (Not above 1) | -# +-------------------------------------+----------------------------+ -# - - - -# Dwell time (ms) after purging and before cleaning to relieve pressure from the nozzle. -variable_pressure_release_time: 1000 - -# Set the part cooling fan speed. Disabling can help prevent the nozzle from cooling down -# and stimulate flow, Enabling it can prevent blobs from sticking together. Values range -# from 0 .. 1, or -1 if you don't want it changed. -#variable_part_cooling_fan: -1 # Leave it unchanged -#variable_part_cooling_fan: 0 # Disable the fan -variable_part_cooling_fan: 1 # Run it at full speed - - -# ======================================================================================== -# ==================== PURGE LENGTH TUNING =============================================== -# ======================================================================================== - -# The absolute minimum to purge, even if you don't changed tools. This is to prime the -# nozzle before printing -variable_purge_length_minimum: 30 - -# The maximum amount of filament (in mm¹) to purge in a single blob. Blobifier will -# automatically purge multiple blobs if the purge amount exeeds this. -variable_purge_length_maximum: 150 - -# Default purge length to fall back on when neither the tool map purge_volumes or -# parameter PURGE_LENGTH is set. -variable_purge_length: 150 - -# The slicer values often are a bit too wastefull. Tune it here to get optimal values. -# 0.6 (60%) is a good starting point. -variable_purge_length_modifier: 0.6 - -# Fixed length of filament to add after the purge volume calculation. Happy Hare already -# shares info on the extra amount of filament to purge based on known residual filament, -# tip cutting fragment and initial retraction setting. However this setting can add a fixed -# amount on top on that if necessary although it is recommended to start with 0 and tune -# slicer purge matrix first. -# When should you alter this value: -# INCREASE: When the dark to light swaps are good, but light to dark aren't. -# DECREASE: When the light to dark swaps are good, but dark to light aren't. Don't -# forget to increase the purge_length_modifier -variable_purge_length_addition: 0 - -# ======================================================================================== -# ==================== BUCKET ============================================================ -# ======================================================================================== - - - -gcode: - - # ====================================================================================== - # ==================== RECORD STATE (INCL. FANS, SPEEDS, ETC...) ======================= - # ====================================================================================== - - # General state - SAVE_GCODE_STATE NAME=BLOBIFIER_state - - - # ====================================================================================== - # ==================== CHECK HOMING STATUS ============================================= - # ====================================================================================== - - {% if "xyz" not in printer.toolhead.homed_axes %} - RESPOND MSG="BLOBIFIER: Not homed! Home xyz before blobbing" - {% elif printer.quad_gantry_level and printer.quad_gantry_level.applied == False %} - RESPOND MSG="BLOBIFIER: QGL not applied! run quad_gantry_level before blobbing" - {% else %} - - # Part cooling fan - {% if part_cooling_fan >= 0 %} - # Save the part cooling fan speed to be enabled again later - {% set backup_fan_speed = printer.fan.speed %} - # Set part cooling fan speed - M106 S{part_cooling_fan * 255} - {% endif %} - - # Set feedrate to 100% for correct speed purging - {% set backup_feedrate = printer.gcode_move.speed_factor %} - M220 S100 - - # ====================================================================================== - # ==================== DEFINE BASIC VARIABLES ========================================== - # ====================================================================================== - - {% set sequence_vars = printer['gcode_macro _MMU_SEQUENCE_VARS'] %} - {% set park_vars = printer['gcode_macro _MMU_PARK'] %} - {% set filament_diameter = printer.configfile.config.extruder.filament_diameter|float %} - {% set filament_cross_section = (filament_diameter/2) ** 2 * 3.1415 %} - {% set from_tool = printer.mmu.last_tool %} - {% set to_tool = printer.mmu.tool %} - {% set bl_count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - {% set pos = printer.gcode_move.gcode_position %} - {% set safe = printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'] %} - {% set ignore_safe = safe.print_height < force_safe_descend_height_until %} - {% set restore_z = [printer['gcode_macro BLOBIFIER_PARK'].restore_z,pos.z]|max %} - {% set pos_max = printer.toolhead.axis_maximum %} - {% set position_y = pos_max.y - skew_correction %} - - # Get purge volumes from the slicer (if set up right. see - # https://github.com/moggieuk/Happy-Hare/wiki/Gcode-Preprocessing) - {% set pv = printer.mmu.slicer_tool_map.purge_volumes %} - - # ====================================================================================== - # ==================== DETERMINE PURGE LENGTH ========================================== - # ====================================================================================== - - {% if params.PURGE_LENGTH %} # =============== PARAM PURGE LENGTH ====================== - {action_respond_info("BLOBIFIER: param PURGE_LENGTH provided")} - {% set purge_len = params.PURGE_LENGTH|float %} - {% elif from_tool == to_tool and to_tool >= 0 %} # ==== TOOL DIDN'T CHANGE ============= - {action_respond_info("BLOBIFIER: Tool didn't change (T%s > T%s), %s" % (from_tool, to_tool, "priming" if purge_length_minimum else "skipping"))} - {% set purge_len = 0 %} - - {% elif pv %} # ============== FETCH FROM HAPPY HARE (LIKELY FROM SLICER) ============== - {% if from_tool < 0 and to_tool >= 0%} - {action_respond_info("BLOBIFIER: from tool unknown. Finding largest value for T? > T%d" % to_tool)} - {% set purge_vol = pv|map(attribute=to_tool)|max %} - {% elif to_tool < 0 %} - {action_respond_info("BLOBIFIER: tool(s) unknown. Finding largest value")} - {% set purge_vol = pv|map('max')|max %} - {% else %} - {% set purge_vol = pv[from_tool][to_tool]|float * purge_length_modifier %} - {action_respond_info("BLOBIFIER: Swapped T%s > T%s" % (from_tool, to_tool))} - {% endif %} - {% set purge_len = purge_vol / filament_cross_section %} - - {% set purge_len = purge_len + printer.mmu.extruder_filament_remaining + park_vars.retracted_length + purge_length_addition %} - - {% else %} # ========================= USE CONFIG VARIABLE ============================= - {action_respond_info("BLOBIFIER: No toolmap or PURGE_LENGTH. Using default")} - {% set purge_len = purge_length|float + printer.mmu.extruder_filament_remaining + park_vars.retracted_length %} - {% endif %} - - # ==================================== APPLY PURGE MINIMUM ============================= - {% set purge_len = [purge_len,purge_length_minimum]|max|round(0, 'ceil')|int %} - {action_respond_info("BLOBIFIER: Purging %dmm of filament" % (purge_len))} - - # ====================================================================================== - # ==================== PURGING SEQUENCE ================================================ - # ====================================================================================== - - # Set to absolute positioning. - G90 - - # Check for purge length and purge if necessary. - {% if purge_len|float > 0 %} - - # ==================================================================================== - # ==================== POSITIONING =================================================== - # ==================================================================================== - - # Move to the assembly, first a bit more to the right (brush_start) to avoid a - # potential filametrix pin if it's not already on the same Y coordinate. - {% set Px = printer["gcode_macro BLOBIFIER"].toolhead_x %} - {% set Py = printer["gcode_macro BLOBIFIER"].toolhead_y %} - {% set Pxe = printer["gcode_macro BLOBIFIER"].toolhead_x_entry %} - {% set Pye = printer["gcode_macro BLOBIFIER"].toolhead_y_entry %} - {% set St = printer["gcode_macro BLOBIFIER"].travel_speed * 60 %} - {% set Se = printer["gcode_macro BLOBIFIER"].entry_speed * 60 %} - {% set max_z = printer.toolhead.axis_maximum.z - printer.gcode_move.homing_origin.z %} - {% set cur_z = printer.gcode_move.gcode_position.z %} - {% set z_min = printer["gcode_macro BLOBIFIER"].z_min %} - {% set z_lift = printer["gcode_macro BLOBIFIER"].z_lift %} - - {% if not (printer.toolhead.position.x == Px and printer.toolhead.position.y == Py) %} - {% set z_safe = [cur_z + z_lift]|float %} - {% if z_safe > max_z %} - {% set z_safe = max_z %} - {% endif %} - - {% if z_safe < z_min %} - {% set z_safe = z_min %} - {% endif %} - G1 Z{z_safe} F{St} - G1 X{Pxe} Y{Pye} F{St} - G1 X{Px} Y{Py} F{Se} - {% endif %} - - - - # ==================================================================================== - # ==================== BUCKET SHAKE ================================================== - # ==================================================================================== - - - - # ==================================================================================== - # ==================== POSITIONING ON TRAY =========================================== - # ==================================================================================== - - - # ==================================================================================== - # ==================== HEAT HOTEND =================================================== - # ==================================================================================== - - {% if printer.extruder.temperature < purge_temp_min %} - {% if printer.extruder.target < purge_temp_min %} - M109 S{purge_temp_min} - {% else %} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={purge_temp_min} - {% endif %} - {% endif %} - - # ==================================================================================== - # ==================== START ITERATING =============================================== - # ==================================================================================== - - # Calculate total number of iterations based on the purge length and the max_iteration - # length. - {% set blobs = (purge_len / purge_length_maximum)|round(0, 'ceil')|int %} - {% set purge_per_blob = purge_len|float / blobs %} - {% set retracts_per_blob = (purge_per_blob / 40)|round(0, 'ceil')|int %} - {% set purge_per_retract = (purge_per_blob / retracts_per_blob)|int %} - {% set pulses_per_retract = (purge_per_blob / retracts_per_blob / 5)|round(0, 'ceil')|int %} - {% set pulses_per_blob = (purge_per_blob / 5)|round(0, 'ceil')|int %} - {% set purge_per_pulse = purge_per_blob / pulses_per_blob %} - {% set pulse_time_constant = purge_per_pulse * 0.95 / purge_spd / (purge_per_pulse * 0.95 / purge_spd + purge_per_pulse * 0.05 / 50) %} - {% set pulse_duration = purge_per_pulse / purge_spd %} - - # Repeat the process until purge_len is reached - {% for blob in range(blobs) %} - RESPOND MSG={"'BLOBIFIER: Blob %d of %d (%.1fmm)'" % (blob + 1, blobs, purge_per_blob)} - - - - # relative positioning - G91 - # relative extrusion - M83 - - # Purge filament in a pulsating motion to purge the filament quicker and better - {% for pulse in range(pulses_per_blob) %} - # Calculations to determine z-speed - {% set purged_this_blob = pulse * purge_per_pulse %} - {% set speed = pulse_duration %} - - # Purge quickly - G1 E{purge_per_pulse * 0.95} F{speed} - # Purge a tiny bit slowly - G1 E{purge_per_pulse * 0.05} F{speed} - - # retract and unretract filament every now and then for thourough cleaning - {% if pulse % pulses_per_retract == 0 and pulse > 0 %} - G1 E-2 F1800 - G1 E2 F800 - {% endif %} - {% endfor %} - - # Retract to match what Happy Hare is expecting - G1 E-{park_vars.retracted_length} F{sequence_vars.retract_speed * 60} - - # ================================================================================== - # ==================== DEPOSIT BLOB ================================================ - # ================================================================================== - - G4 P{pressure_release_time} - - {% if safe.brush or ignore_safe %} - BLOBIFIER_CLEAN - {% endif %} - {% endfor %} - {% endif %} - - # ====================================================================================== - # ==================== RESTORE STATE =================================================== - # ====================================================================================== - - - {% if part_cooling_fan >= 0 %} - # Reset part cooling fan if it was changed - M106 S{(backup_fan_speed * 255)|int} - {% endif %} - - M220 S{(backup_feedrate * 100)|int} - {% endif %} - - RESTORE_GCODE_STATE NAME=BLOBIFIER_state - - -########################################################################################## -# Wipes the nozzle on the brass brush -# -[gcode_macro BLOBIFIER_CLEAN] -gcode: - {% set bb = printer['gcode_macro BLOBIFIER'] %} - {% set position_y = printer.configfile.config["stepper_y"]["position_max"]|float %} - {% set original_accel = printer.toolhead.max_accel %} - {% set original_minimum_cruise_ratio = printer.toolhead.minimum_cruise_ratio %} - {% set pos = printer.gcode_move.gcode_position %} - - SAVE_GCODE_STATE NAME=BLOBIFIER_CLEAN_state - - G90 - - {% if bb.brush_accel > 0 %} - SET_VELOCITY_LIMIT ACCEL={bb.brush_accel} MINIMUM_CRUISE_RATIO=0.1 - {% endif %} - - - G1 X{bb.brush_start} F{bb.travel_spd_xy} - - - - SET_VELOCITY_LIMIT ACCEL={original_accel} MINIMUM_CRUISE_RATIO={original_minimum_cruise_ratio} - - # Perform wipe. Wipe direction based off bucket_pos for cool random scrubby routine. - {% for wipes in range(1, (bb.wipe_qty + 1)) %} - G1 X{bb.brush_start + bb.brush_width} F{bb.wipe_spd_xy} - G1 X{bb.brush_start} F{bb.wipe_spd_xy} - {% endfor %} - - RESTORE_GCODE_STATE NAME=BLOBIFIER_CLEAN_state - - - -########################################################################################## -# Park the nozzle on the tray to prevent oozing during filament swaps. Place this -# extension in the post_form_tip extension in mmu_macro_vars.cfg: -# variable_user_post_form_tip_extension: "BLOBIFIER_PARK" -# -[gcode_macro BLOBIFIER_PARK] -gcode: - {% set Px = printer["gcode_macro BLOBIFIER"].toolhead_x %} - {% set Py = printer["gcode_macro BLOBIFIER"].toolhead_y %} - {% set Pxe = printer["gcode_macro BLOBIFIER"].toolhead_x_entry %} - {% set Pye = printer["gcode_macro BLOBIFIER"].toolhead_y_entry %} - {% set St = printer["gcode_macro BLOBIFIER"].travel_speed * 60 %} - {% set Se = printer["gcode_macro BLOBIFIER"].entry_speed * 60 %} - {% set max_z = printer.toolhead.axis_maximum.z - printer.gcode_move.homing_origin.z %} - {% set cur_z = printer.gcode_move.gcode_position.z %} - {% set z_min = printer["gcode_macro BLOBIFIER"].z_min %} - {% set z_lift = printer["gcode_macro BLOBIFIER"].z_lift %} - - SAVE_GCODE_STATE NAME=blobifier_park_state - - {% if not (printer.toolhead.position.x == Px and printer.toolhead.position.y == Py) %} - {% set z_safe = [cur_z + z_lift]|float %} - {% if z_safe > max_z %} - {% set z_safe = max_z %} - {% endif %} - - {% if z_safe < z_min %} - {% set z_safe = z_min %} - {% endif %} - G90 - G1 Z{z_safe} F{St} - G1 X{Pxe} Y{Pye} F{St} - G4 P1000 - G1 X{Px} Y{Py} F{Se} - {% endif %} - - RESTORE_GCODE_STATE NAME=blobifier_park_state - -########################################################################################## - - - -########################################################################################## - - diff --git a/printer_data/config/mmu-20241207_235252/addons/dc_espooler.cfg b/printer_data/config/mmu-20241207_235252/addons/dc_espooler.cfg deleted file mode 100644 index 5ec2e6c..0000000 --- a/printer_data/config/mmu-20241207_235252/addons/dc_espooler.cfg +++ /dev/null @@ -1,202 +0,0 @@ -#################################### -# Variables for the eSpooler macros -# -# Configure these for your setup. -# -[gcode_macro _MMU_ESPOOLER_VARS] -# Prefix of name of the `output_pin` for the eSpooler. -# The `output_pin` name must follow the pattern {prefix}_rwd_{gate} -# and {prefix}_en_{gate}. By default we prefix it with an underscore -# to prevent them from being shown in UI applications (like mainsail). -# -variable_pin_prefix: '_mmu_dc_espooler' - -# Default max number of seconds for eSpooler to run -# Note: Each time any eSpooler **starts** it will restart the timeout -# -variable_default_timeout: 60 - -# The step speed where you want to max out the eSpooler to run at full speed. -# -variable_max_step_speed: 200 - -# Minimum distance of a move required to activate the eSpooler -# The lowest valid value for this is 50 because eSpooler macros -# will not even be considered if the distance is less than 50. -# -variable_min_distance: 200 - -# Adjusts the speed conversion ratio -# For the following examples, let's assume max_step_speed = 50. -# And remember actual eSpooler speed values are between 0.0 (off) and 1.0 (full speed) (inclusive) -# -# The forumula looks like this: -# ({step_speed} / {max_step_speed}) ^ {step_speed_exponent} -# -# With step_speed_exponent of 1 would have a linear ratio: -# If I am running with a step speed of 50mm/s, the eSpooler would run at full speed (1.0) -# Calculated via (50/50)^1 -# If I am running with a step speed of 25mm/s, the eSpooler would run at half speed (0.5) -# Calculated via (25/50)^1 -# -# With step_speed_exponent of 0.2 would have a linear ratio: -# If I am running with a step speed of 50mm/s, the eSpooler would run at full speed (1.0) -# Calculated via (50/50)^0.2 -# If I am running with a step speed of 25mm/s, the eSpooler would run at half speed (0.87) -# Calculated via (25/50)^0.2 -# -variable_step_speed_exponent: 0.5 - -# Internal variable for tracking the gates with eSpoolers -variable_espooler_gates: '' -gcode: # Leave empty - -########################################################################### -# Include DC motor pin definitions -# -# This should be after the eSpooler vars macro to ensure the users -# custom vars override our default ones. -# -[include dc_espooler_hw.cfg] - -########################################################################### -# Macro to actuate the correct DC motor for the gate being unloaded -# -# Easiest integration is to set this in mmu_parameters.cfg: -# -# eSpooler_start_macro: MMU_ESPOOLER_START -# -[gcode_macro MMU_ESPOOLER_START] -gcode: - _MMU_ESPOOLER_CTL {rawparams} - - # Param hints UI - {% set dummy = None if True else " - {% set d = params.GATE|default(current_gate)|int %} - {% set d = params.SCALE|default(cfg_scale)|float %} - {% set d = params.TIMEOUT|default(default_timeout)|float %} - " %} # End param hints for UI - - -########################################################################### -# Macro to stop the DC eSpooler motor -# -# Easiest integration is to set this in mmu_macro_vars.cfg: -# -# eSpooler_stop_macro: MMU_ESPOOLER_STOP -# -[gcode_macro MMU_ESPOOLER_STOP] -gcode: - _MMU_ESPOOLER_CTL {rawparams} SPEED={0} - - # Param hints UI - {% set dummy = None if True else " - {% set d = params.GATE|default(current_gate)|int %} - " %} # End param hints for UI - -########################################################################### -# Macro to control the DC eSpooler motor -# -# Used by both the start and stop eSpooler macros -# -[gcode_macro _MMU_ESPOOLER_CTL] -gcode: - {% set vars = printer["gcode_macro _MMU_ESPOOLER_VARS"] %} - {% set current_gate = printer['mmu'].gate %} - {% set gate = params.GATE|default(current_gate)|int %} - {% set step_speed = params.STEP_SPEED|default(-1)|float %} - {% set expected_distance = params.MAX_DISTANCE|default(-1)|float %} - {% set homing_move = params.HOMING_MOVE|default(0)|int %} - {% set speed = params.SPEED|default(-1)|float %} - {% set pin_prefix = vars.pin_prefix %} - {% set pin = ('%s_rwd_%d' % (pin_prefix, gate)) if printer['output_pin %s_rwd_%d' % (pin_prefix, gate)] else None %} - {% set en_pin = ('%s_en_%d' % (pin_prefix, gate)) if printer['output_pin %s_en_%d' % (pin_prefix, gate)] else None %} - {% set pin_cfg = ('output_pin %s' % pin) if pin else None %} - {% set pwm = (printer.configfile.settings[pin_cfg].scale) if pin_cfg else False %} - {% set default_timeout = vars.default_timeout %} - {% set timeout = params.TIMEOUT|default(default_timeout)|float %} - - # Convert speed - {% if speed < 0 and step_speed >= 0 %} - # determine speed from step speed - {% if not pwm %} - # TODO: something special for long slow (tbd) moves? - # delayed start so it runs after the stepper has run for a little bit? - # or just don't run on long slow moves? - {% set speed = 1 %} - {% elif step_speed > vars.max_step_speed %} - {% set speed = 1 %} - {% else %} - {% set speed = (step_speed / vars.max_step_speed) ** vars.step_speed_exponent %} - {% endif %} - {% elif speed < 0 %} - {% set speed = 1 %} - {% endif %} - - {% if gate < 0 %} - RESPOND TYPE=error MSG="No active gate. Cannot start espooler." - {% elif not pin %} - RESPOND TYPE=error MSG="{pin_cfg} does not exist. Cannot start espooler." - {% elif expected_distance >= 0 and expected_distance < vars.min_distance %} - MMU_LOG DEBUG=1 MSG="Travel distance ({expected_distance}) is shorter than the configured min distance ({vars.min_distance}). Ignoring espooler activation." - {% else %} - MMU_LOG DEBUG=1 MSG="Setting espooler {pin} to {speed}" - {% set cfg_scale = printer.configfile.settings[pin_cfg].scale|default(1)|float %} - {% set scale = params.SCALE|default(cfg_scale)|float %} - {% if en_pin and speed > 0 %} - SET_PIN PIN="{en_pin}" value="{1}" - {% endif %} - - SET_PIN PIN="{pin}" value="{speed * cfg_scale * scale}" - - {% if timeout > 0 and speed > 0 and printer[pin_cfg].value == 0 %} - UPDATE_DELAYED_GCODE ID=mmu_espooler_timeout DURATION={timeout} - {% elif speed == 0 %} - # Cancel delayed gcode...if all are turned off - {% set values = [] %} - {% for igate in (vars.espooler_gates) %} - {% set value = printer['output_pin %s_rwd_%d' % (pin_prefix, igate)].value %} - {% set value = 0 if (igate == gate or value == 0) else value %} - {% set d = values.append(value) %} - {% endfor %} - {% if values|sum == 0 %} - UPDATE_DELAYED_GCODE ID=mmu_espooler_timeout DURATION=0 - {% endif %} - {% endif %} - - {% if en_pin and speed == 0 %} - SET_PIN PIN="{en_pin}" value="{0}" - {% endif %} - {% endif %} - -########################################################################### -# Delayed gcode to run on startup to identify all the eSpoolers which -# will be used after espooler timeout to ensure all eSpoolers have -# stopped. -# -[delayed_gcode mmu_espooler_startup] -initial_duration: 1. -gcode: - {% set vars = printer["gcode_macro _MMU_ESPOOLER_VARS"] %} - {% set pin_prefix = vars.pin_prefix %} - {% set pin_cfg_prefix = 'output_pin %s_rwd_' % pin_prefix %} - {% set espooler_gates = [] %} - {% for key in printer %} - {% if key.startswith(pin_cfg_prefix) %} - {% set gate = key | replace(pin_cfg_prefix, '') | int %} - {% set d = espooler_gates.append(gate | string) %} - {% endif %} - {% endfor %} - SET_GCODE_VARIABLE MACRO=_MMU_ESPOOLER_VARS VARIABLE=espooler_gates VALUE={espooler_gates|join(',')} - -########################################################################### -# Delayed gcode to stop all eSpooler after timeout. This is used as a -# failsafe (unless explicitly disabled by setting a timeout of 0) to ensure -# the eSpoolers do not run indefinitely. -# -[delayed_gcode mmu_espooler_timeout] -gcode: - {% set vars = printer["gcode_macro _MMU_ESPOOLER_VARS"] %} - {% for gate in (vars.espooler_gates) %} - MMU_ESPOOLER_STOP GATE={gate} - {% endfor %} diff --git a/printer_data/config/mmu-20241207_235252/addons/dc_espooler_hw.cfg b/printer_data/config/mmu-20241207_235252/addons/dc_espooler_hw.cfg deleted file mode 100644 index 037454e..0000000 --- a/printer_data/config/mmu-20241207_235252/addons/dc_espooler_hw.cfg +++ /dev/null @@ -1,75 +0,0 @@ -########################################################################################### -# Define the pins for DC motor based eSpooler. Create a section for each gate of your MMU. -# -# With pwm enabled, setting the scale parameter (between 0.0 and 1.0) to adjust the top -# speed of the eSpooler. -# -# Some setups may require an "enable" pin to activate the motor driver. Uncomment those -# pins as needed for each gate. -# -# See https://www.klipper3d.org/Config_Reference.html#output_pin -# - -################## -# Gate 0 eSpooler -# - -# Rewind pin -[output_pin _mmu_dc_espooler_rwd_0] -pin: mmu:MMU_DC_MOT_1_A -value: 0 -pwm: True -scale: 1 - -# Enable pin -[output_pin _mmu_dc_espooler_en_0] -pin: mmu:MMU_DC_MOT_1_EN -value: 0 - -################## -# Gate 1 eSpooler -# - -# Rewind pin -[output_pin _mmu_dc_espooler_rwd_1] -pin: mmu:MMU_DC_MOT_2_A -value: 0 -pwm: True -scale: 1 - -# Enable pin -[output_pin _mmu_dc_espooler_en_1] -pin: mmu:MMU_DC_MOT_2_EN -value: 0 - -################## -# Gate 2 eSpooler -# - -# Rewind pin -[output_pin _mmu_dc_espooler_rwd_2] -pin: mmu:MMU_DC_MOT_3_A -value: 0 -pwm: True -scale: 1 - -# Enable pin -[output_pin _mmu_dc_espooler_en_2] -pin: mmu:MMU_DC_MOT_3_EN -value: 0 - -################## -# Gate 3 eSpooler -# - -# Rewind pin -[output_pin _mmu_dc_espooler_rwd_3] -pin: mmu:MMU_DC_MOT_4_A -value: 0 -pwm: True -scale: 1 - -# Enable pin -[output_pin _mmu_dc_espooler_en_3] -pin: mmu:MMU_DC_MOT_4_EN -value: 0 diff --git a/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter.cfg b/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter.cfg deleted file mode 100644 index dadc1b4..0000000 --- a/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter.cfg +++ /dev/null @@ -1,89 +0,0 @@ -# Include servo hardware definition separately to allow for automatic upgrade -[include mmu_erec_cutter_hw.cfg] - -########################################################################### -# Optional EREC Filament Cutter Support -# -# https://github.com/kevinakasam/ERCF_Filament_Cutter -# -# This is the supplementary macro to support filament cutting at the MMU -# on a ERCF design. -# -# To configure: -# 1. Add this to your printer.cfg: -# -# [include mmu/addons/mmu_erec_cutter.cfg] -# -# 2. In mmu_macro_vars.cfg, change this line: -# -# variable_user_post_unload_extension : "EREC_CUTTER_ACTION" -# -# 3. Tune the servo configuration and macro "variables" below -# - -# EREC CUTTER CONFIGURATION ----------------------------------------------- -# (addons/mmu_erec_cutter.cfg) -# -[gcode_macro _EREC_VARS] -description: Empty macro to store the variables -gcode: # Leave empty - -# These variables control the servo movement -variable_servo_closed_angle : 70 ; Servo angle for closed postion with bowden aligned MMU -variable_servo_open_angle : 10 ; Servo angle to open up the cutter and move bowden away from MMU -variable_servo_duration : 1.5 ; Time (s) of PWM pulse train to activate servo -variable_servo_idle_time : 1.8 ; Time (s) to let the servo to reach it's position - -# Controls for feed and cut lengths -variable_feed_length : 48 ; Distance in mm from gate parking position to blade (ERCFv1.1: 58, v2/other: 48) -variable_cut_length : 10 ; Amount in mm of filament to cut -variable_cut_attempts : 1 ; Number of times the cutter tries to cut the filament - - -########################################################################### -# Macro to perform the cutting step. Designed to be included to the -# _MMU_POST_UNLOAD step -# -[gcode_macro EREC_CUTTER_ACTION] -description: Cut off the filament tip at the MMU after the unload sequence is complete -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - - _CUTTER_OPEN - _MMU_STEP_MOVE MOVE={vars.feed_length + vars.cut_length} - {% for i in range(vars.cut_attempts - 1) %} - _CUTTER_CLOSE - _CUTTER_OPEN - {% endfor %} - _MMU_STEP_MOVE MOVE=-1 - _CUTTER_CLOSE - _MMU_EVENT EVENT="filament_cut" # Count as one cut for consumption counter - - _MMU_STEP_SET_FILAMENT STATE=2 # FILAMENT_POS_START_BOWDEN - _MMU_STEP_UNLOAD_GATE # Repeat gate parking move - _MMU_M400 # Wait on both move queues - -[gcode_macro _CUTTER_ANGLE] -description: Helper macro to set cutter servo angle -gcode: - {% set angle = params.ANGLE|default(0)|int %} - SET_SERVO SERVO=cut_servo ANGLE={angle} - -[gcode_macro _CUTTER_CLOSE] -description: Helper macro to set cutting servo the closed position -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - SET_SERVO SERVO=cut_servo ANGLE={vars.servo_closed_angle} DURATION={vars.servo_duration} - G4 P{vars.servo_idle_time * 1000} - RESPOND MSG="EREC Cutter closed" - M400 - -[gcode_macro _CUTTER_OPEN] -description: Helper macro to set cutting servo the open position -gcode: - {% set vars = printer["gcode_macro _EREC_VARS"] %} - SET_SERVO SERVO=cut_servo ANGLE={vars.servo_open_angle} DURATION={vars.servo_duration} - G4 P{vars.servo_idle_time * 1000} - RESPOND MSG="EREC Cutter open" - M400 - diff --git a/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter_hw.cfg b/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter_hw.cfg deleted file mode 100644 index 4fec0c1..0000000 --- a/printer_data/config/mmu-20241207_235252/addons/mmu_erec_cutter_hw.cfg +++ /dev/null @@ -1,10 +0,0 @@ - -########################################################################################## -# The servo hardware configuration. Change the values to your needs. -# -[mmu_servo cut_servo] -pin: mmu:PA7 # Extra Pin on the ERCF easy Board -maximum_servo_angle: 180 # Set this to 60 for a 60° Servo -minimum_pulse_width: 0.0005 # Adapt these for your servo -maximum_pulse_width: 0.0025 # Adapt these for your servo - diff --git a/printer_data/config/mmu-20241207_235252/base/mmu.cfg b/printer_data/config/mmu-20241207_235252/base/mmu.cfg deleted file mode 100644 index 7e9cbec..0000000 --- a/printer_data/config/mmu-20241207_235252/base/mmu.cfg +++ /dev/null @@ -1,116 +0,0 @@ -######################################################################################################################## -# Happy Hare MMU Software -# -# EDIT THIS FILE BASED ON YOUR SETUP -# -# Copyright (C) 2022 moggieuk#6538 (discord) moggieuk@hotmail.com -# This file may be distributed under the terms of the GNU GPLv3 license. -# -# Goal: Happy Hare MMU hardware pin config -# -# (\_/) -# ( *,*) -# (")_(") Happy Hare Ready -# -# -# This contains aliases for pins for MCU type AFC_LITE_1 -# -[mcu mmu] -serial: /dev/serial/by-id/usb-Klipper_stm32h723xx_3D002E001151333038363231-if00 # Change to `canbus_uuid: 1234567890` for CANbus setups - - -# PIN ALIASES FOR MMU MCU BOARD ---------------------------------------------------------------------------------------- -# ██████╗ ██╗███╗ ██╗ █████╗ ██╗ ██╗ █████╗ ███████╗ -# ██╔══██╗██║████╗ ██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝ -# ██████╔╝██║██╔██╗ ██║ ███████║██║ ██║███████║███████╗ -# ██╔═══╝ ██║██║╚██╗██║ ██╔══██║██║ ██║██╔══██║╚════██║ -# ██║ ██║██║ ╚████║ ██║ ██║███████╗██║██║ ██║███████║ -# ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝╚══════╝ -# Section to create alias for pins used by MMU for easier integration into Klippain and RatOS. The names match those -# referenced in the mmu_hardware.cfg file. If you get into difficulty you can also comment out this aliases definition -# completely and configure the pin names directly into mmu_hardware.cfg. However, use of aliases is encouraged. - -# Note: that aliases are not created for TOOLHEAD_SENSOR, EXTRUDER_SENSOR or SYNC_FEEDBACK_SENSORS because those are -# most likely on the printer's main mcu. These should be set directly in mmu_hardware.cfg -# -[board_pins mmu] -mcu: mmu # Assumes using an external / extra mcu dedicated to MMU -aliases: - MMU_GEAR_UART=PD5, - MMU_GEAR_STEP=PD4, - MMU_GEAR_DIR=PD3, - MMU_GEAR_ENABLE=PD6, - MMU_GEAR_DIAG=PD2, - - MMU_GEAR_UART_1=PD0, - MMU_GEAR_STEP_1=PC12, - MMU_GEAR_DIR_1=PC11, - MMU_GEAR_ENABLE_1=PD1, - MMU_GEAR_DIAG_1=PC10, - - MMU_GEAR_UART_2=PE1, - MMU_GEAR_STEP_2=PE2, - MMU_GEAR_DIR_2=PE3, - MMU_GEAR_ENABLE_2=PE0, - MMU_GEAR_DIAG_2=PE4, - - MMU_GEAR_UART_3=PC6, - MMU_GEAR_STEP_3=PD15, - MMU_GEAR_DIR_3=PD14, - MMU_GEAR_ENABLE_3=PC7, - MMU_GEAR_DIAG_3=PC8, - - MMU_SEL_UART=, - MMU_SEL_STEP=, - MMU_SEL_DIR=, - MMU_SEL_ENABLE=, - MMU_SEL_DIAG=, - MMU_SEL_ENDSTOP=, - MMU_SEL_SERVO=, - - MMU_ENCODER=, - MMU_GATE_SENSOR=PC4, - MMU_NEOPIXEL=PE14, - - MMU_PRE_GATE_0=PC5, - MMU_PRE_GATE_1=PB0, - MMU_PRE_GATE_2=PB1, - MMU_PRE_GATE_3=PB2, - MMU_PRE_GATE_4=, - MMU_PRE_GATE_5=, - MMU_PRE_GATE_6=, - MMU_PRE_GATE_7=, - MMU_PRE_GATE_8=, - MMU_PRE_GATE_9=, - MMU_PRE_GATE_10=, - MMU_PRE_GATE_11=, - - MMU_POST_GEAR_0=PE8, - MMU_POST_GEAR_1=PE9, - MMU_POST_GEAR_2=PE10, - MMU_POST_GEAR_3=PE11, - MMU_POST_GEAR_4=, - MMU_POST_GEAR_5=, - MMU_POST_GEAR_6=, - MMU_POST_GEAR_7=, - MMU_POST_GEAR_8=, - MMU_POST_GEAR_9=, - MMU_POST_GEAR_10=, - MMU_POST_GEAR_11=, - - MMU_DC_MOT_1_EN=PA2, - MMU_DC_MOT_1_A=PA0, - MMU_DC_MOT_1_B=PA1, - - MMU_DC_MOT_2_EN=PA5, - MMU_DC_MOT_2_A=PA6, - MMU_DC_MOT_2_B=PA7, - - MMU_DC_MOT_3_EN=PB13, - MMU_DC_MOT_3_A=PB14, - MMU_DC_MOT_3_B=PB15, - - MMU_DC_MOT_4_EN=PD11, - MMU_DC_MOT_4_A=PD12, - MMU_DC_MOT_4_B=PD13, - diff --git a/printer_data/config/mmu-20241127_231535/addons/blobifier.cfg b/printer_data/config/mmu-20241209_214723/addons/blobifier.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/addons/blobifier.cfg rename to printer_data/config/mmu-20241209_214723/addons/blobifier.cfg diff --git a/printer_data/config/mmu-20241127_231535/addons/blobifier_hw.cfg b/printer_data/config/mmu-20241209_214723/addons/blobifier_hw.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/addons/blobifier_hw.cfg rename to printer_data/config/mmu-20241209_214723/addons/blobifier_hw.cfg diff --git a/printer_data/config/mmu-20241127_231535/addons/dc_espooler.cfg b/printer_data/config/mmu-20241209_214723/addons/dc_espooler.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/addons/dc_espooler.cfg rename to printer_data/config/mmu-20241209_214723/addons/dc_espooler.cfg diff --git a/printer_data/config/mmu-20241127_231535/addons/dc_espooler_hw.cfg b/printer_data/config/mmu-20241209_214723/addons/dc_espooler_hw.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/addons/dc_espooler_hw.cfg rename to printer_data/config/mmu-20241209_214723/addons/dc_espooler_hw.cfg diff --git a/printer_data/config/mmu/addons/mmu_erec_cutter.cfg b/printer_data/config/mmu-20241209_214723/addons/mmu_erec_cutter.cfg similarity index 100% rename from printer_data/config/mmu/addons/mmu_erec_cutter.cfg rename to printer_data/config/mmu-20241209_214723/addons/mmu_erec_cutter.cfg diff --git a/printer_data/config/mmu-20241127_231535/addons/mmu_erec_cutter_hw.cfg b/printer_data/config/mmu-20241209_214723/addons/mmu_erec_cutter_hw.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/addons/mmu_erec_cutter_hw.cfg rename to printer_data/config/mmu-20241209_214723/addons/mmu_erec_cutter_hw.cfg diff --git a/printer_data/config/mmu-20241207_235252/base/CUSTOM_MACROS/PARK_PURGE_WIPE.cfg b/printer_data/config/mmu-20241209_214723/base/CUSTOM_MACROS/PARK_PURGE_WIPE.cfg similarity index 100% rename from printer_data/config/mmu-20241207_235252/base/CUSTOM_MACROS/PARK_PURGE_WIPE.cfg rename to printer_data/config/mmu-20241209_214723/base/CUSTOM_MACROS/PARK_PURGE_WIPE.cfg diff --git a/printer_data/config/mmu-20241127_231535/base/mmu.cfg b/printer_data/config/mmu-20241209_214723/base/mmu.cfg similarity index 100% rename from printer_data/config/mmu-20241127_231535/base/mmu.cfg rename to printer_data/config/mmu-20241209_214723/base/mmu.cfg diff --git a/printer_data/config/mmu-20241207_235252/base/mmu_hardware.cfg b/printer_data/config/mmu-20241209_214723/base/mmu_hardware.cfg similarity index 100% rename from printer_data/config/mmu-20241207_235252/base/mmu_hardware.cfg rename to printer_data/config/mmu-20241209_214723/base/mmu_hardware.cfg diff --git a/printer_data/config/mmu-20241207_235252/base/mmu_macro_vars.cfg b/printer_data/config/mmu-20241209_214723/base/mmu_macro_vars.cfg similarity index 97% rename from printer_data/config/mmu-20241207_235252/base/mmu_macro_vars.cfg rename to printer_data/config/mmu-20241209_214723/base/mmu_macro_vars.cfg index 77d73c0..4c3b06a 100644 --- a/printer_data/config/mmu-20241207_235252/base/mmu_macro_vars.cfg +++ b/printer_data/config/mmu-20241209_214723/base/mmu_macro_vars.cfg @@ -229,7 +229,7 @@ gcode: # Leave empty # so that filament _just_ appears at the nozzle on load # 3. Only then, adjust retraction to control stringing and blobs when # changing tool in a print -variable_enable_park_printing : 'toolchange,runout,load,unload,complete,pause,cancel' ; Empty '' to disable parking +variable_enable_park_printing : 'toolchange,load,unload,pause,cancel' ; Empty '' to disable parking variable_enable_park_standalone : 'toolchange,load,unload,pause,cancel' ; Empty '' to disable parking variable_enable_park_disabled : 'pause,cancel' ; Empty '' to disable parking @@ -242,17 +242,12 @@ variable_min_toolchange_z : 30 ; The absolute minimum saftey floor (z-hei # The z_hop ramp is the horizontal distance in mm to travel during the lift. The # direction is automatic any only applied if lifting the first time from print. # This move is useful to help break the filament "string" -variable_park_toolchange : 97, 240, 1, 5, 0 ; x,y,z-hop,z_hop_ramp,retract for "toolchange" operations (toolchange,load,unload) -variable_park_runout : 97, 240, 1, 5, 0 ; x,y,z-hop,z_hop_ramp,retract -variable_park_pause : 97, 240, 5, 0, 2 ; x,y,z-hop,z_hop_ramp,retract (park position when mmu error occurs) +variable_park_toolchange : 97, 240, 1, 5, 0 ; x,y,z-hop,z_hop_ramp,retract for "toolchange" operations (toolchange,load,unload) +variable_park_runout : 97, 240, 1, 5, 0 ; x,y,z-hop,z_hop_ramp,retract +variable_park_pause : 97, 240, 5, 0, 2 ; x,y,z-hop,z_hop_ramp,retract (park position when mmu error occurs) variable_park_cancel : 97, 240, 10, 0, 2 ; x,y,z-hop,z_hop_ramp,retract variable_park_complete : 97, 240, 10, 0, 2 ; x,y,z-hop,z_hop_ramp,retract -variable_purge_x: 97 # x purge location -variable_purge_y: 254 # y purge location -variable_purge_x_entry: 97 # x entry location before going to the purge location -variable_purge_y_entry: 240 # y entry location before going to the purge location -variable_travel_speed: 300 # how fast travel speeds will be performed -variable_entry_speed: 25 # how fast to move from the entry location to the purge location + # For toolchange operations, this allows to you to specify additional parking moves # at various stages of the toolchange. Each must have 3 values: # x_coord, y_coord, z_hop(delta) @@ -357,7 +352,7 @@ variable_pushback_dwell_time : 0 ; Time in ms to dwell after the pushback # - We first make a fast move to accumulate some momentum and get the cut # blade to the initial contact with the filament # - We then make a slow move for the actual cut to happen -variable_travel_speed : 150 ; Speed mm/s +variable_travel_speed : 300 ; Speed mm/s variable_cut_fast_move_speed : 32 ; Speed mm/s variable_cut_slow_move_speed : 8 ; Speed mm/s variable_evacuate_speed : 150 ; Speed mm/s diff --git a/printer_data/config/mmu-20241207_235252/base/mmu_parameters.cfg b/printer_data/config/mmu-20241209_214723/base/mmu_parameters.cfg similarity index 98% rename from printer_data/config/mmu-20241207_235252/base/mmu_parameters.cfg rename to printer_data/config/mmu-20241209_214723/base/mmu_parameters.cfg index 4e89206..979b052 100644 --- a/printer_data/config/mmu-20241207_235252/base/mmu_parameters.cfg +++ b/printer_data/config/mmu-20241209_214723/base/mmu_parameters.cfg @@ -1,6 +1,9 @@ ######################################################################################################################## # Happy Hare MMU Software # +# Template file for MMU's with Virtual Selector (Type-B designs like Box Turtle, Night Owl, Angry Beaver, ...) +# This file omits selector and selector-servo configuration and a few other options that don't make sense +# # EDIT THIS FILE BASED ON YOUR SETUP # # Copyright (C) 2022 moggieuk#6538 (discord) moggieuk@hotmail.com @@ -17,7 +20,7 @@ # Full details in https://github.com/moggieuk/Happy-Hare/tree/main/doc/configuration.md # [mmu] -happy_hare_version: 3.00 # Don't mess, used for upgrade detection +happy_hare_version: 3.01 # Don't mess, used for upgrade detection # MMU Hardware Limits -------------------------------------------------------------------------------------------------- # ██╗ ██╗███╗ ███╗██╗████████╗███████╗ @@ -87,6 +90,12 @@ extruder_sync_load_speed: 18 # mm/s speed of synchronized extruder load moves extruder_sync_unload_speed: 18 # mm/s speed of synchronized extruder unload moves extruder_homing_speed: 18 # mm/s speed of extruder only homing moves (e.g. to toolhead sensor) +# When Happy Hare calls out to a macro for user customization and for parking moves these settings are applied and the previous +# values automatically restored afterwards. This allows for deterministic movement speed regardless of the starting state. +# +macro_toolhead_max_accel: 0 # Default printer toolhead accelaration applied when macros are run. 0 = use printer max +macro_toolhead_min_cruise_ratio: 0.5 # Default printer cruise ratio applied when macros are run + # Gate loading/unloading ----------------------------------------------------------------------------------------------- # ██████╗ █████╗ ████████╗███████╗ ██╗ ██████╗ █████╗ ██████╗ @@ -410,7 +419,7 @@ console_always_output_full: 1 # 1 = Show full table, 0 = Only show totals out of # timeout_pause: 72000 # Idle time out (printer shutsdown) in seconds used when in MMU pause state disable_heater: 600 # Delay in seconds after which the hotend heater is disabled in the MMU_PAUSE state -default_extruder_temp: 200 # Default temperature for performing swaps and forming tips when not in print (overriden by gate map) +default_extruder_temp: 250 # Default temperature for performing swaps and forming tips when not in print (overriden by gate map) extruder_temp_variance: 2 # When waiting for extruder temperature this is the +/- permissible variance in degrees (>= 1) # # These are auto calibration/tuning settings. Once the gear rotation_distance and encoder are calibrated, enabling these options diff --git a/printer_data/config/mmu-20241207_235252/mmu_vars.cfg b/printer_data/config/mmu-20241209_214723/mmu_vars.cfg similarity index 53% rename from printer_data/config/mmu-20241207_235252/mmu_vars.cfg rename to printer_data/config/mmu-20241209_214723/mmu_vars.cfg index f7d5d2d..8e1ef17 100644 --- a/printer_data/config/mmu-20241207_235252/mmu_vars.cfg +++ b/printer_data/config/mmu-20241209_214723/mmu_vars.cfg @@ -1,20 +1,20 @@ [Variables] -mmu__revision = 1264 +mmu__revision = 1330 mmu_calibration_bowden_home = 'mmu_gate' -mmu_calibration_bowden_lengths = [1770.4, 1770.4, 1770.4, 1770.4] +mmu_calibration_bowden_lengths = [1778.2, 1778.2, 1778.2, 1778.2] mmu_calibration_clog_length = 34.9 mmu_gear_rotation_distances = [4.65, 4.65, 4.65, 4.65] mmu_state_filament_pos = 0 mmu_state_filament_remaining = 0.0 -mmu_state_gate_selected = 3 -mmu_state_gate_status = [1, 1, 0, 1] +mmu_state_gate_selected = 1 +mmu_state_gate_status = [2, 2, 1, 1] mmu_state_last_tool = 1 -mmu_state_tool_selected = 3 +mmu_state_tool_selected = 1 mmu_state_tool_to_gate_map = [0, 1, 2, 3] -mmu_statistics_counters = {'mmu_restarts': {'count': 194, 'limit': -1, 'warning': ''}} -mmu_statistics_gate_0 = {'pauses': 1, 'loads': 34, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 36, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 2, 'unload_failures': 1, 'quality': -1.0} -mmu_statistics_gate_1 = {'pauses': 1, 'loads': 2, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 2, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} +mmu_statistics_counters = {'mmu_restarts': {'count': 202, 'limit': -1, 'warning': ''}} +mmu_statistics_gate_0 = {'pauses': 1, 'loads': 35, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 38, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 2, 'unload_failures': 1, 'quality': -1.0} +mmu_statistics_gate_1 = {'pauses': 1, 'loads': 3, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 3, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} mmu_statistics_gate_2 = {'pauses': 1, 'loads': 19, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 18, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 3, 'unload_failures': 0, 'quality': -1.0} mmu_statistics_gate_3 = {'pauses': 0, 'loads': 0, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 0, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} -mmu_statistics_swaps = {'pre_load': 23.2, 'load': 1327.86, 'post_load': 512.59, 'total_swaps': 50, 'swaps_since_pause': 29, 'swaps_since_pause_record': 29, 'total': 2498.73, 'pre_unload': 16.54, 'unload': 932.14, 'post_unload': 10.87, 'total_pauses': 3} +mmu_statistics_swaps = {'pre_load': 23.8, 'load': 1435.38, 'post_load': 530.62, 'total_swaps': 52, 'swaps_since_pause': 31, 'swaps_since_pause_record': 31, 'total': 2639.14, 'pre_unload': 17.14, 'unload': 963.38, 'post_unload': 11.47, 'total_pauses': 3} diff --git a/printer_data/config/mmu/addons/blobifier.cfg b/printer_data/config/mmu/addons/blobifier.cfg deleted file mode 100644 index ef66059..0000000 --- a/printer_data/config/mmu/addons/blobifier.cfg +++ /dev/null @@ -1,886 +0,0 @@ -# Include servo hardware definition separately to allow for automatic upgrade -[include blobifier_hw.cfg] - -########################################################################################## - -# Sample config to be used in conjunction with Blobifier Purge Tray, Bucket & Nozzle -# Scrubber mod. Created by Dendrowen (dendrowen on Discord). The Macro is based on a -# version, and Nozzle Scrubber is made by Hernsl (hernsl#8860 on Discord). The device is -# designed around a Voron V2.4 300mm, but should work for 250mm and 350mm too. This -# version only supports the assembly on the rear-left of the bed. If you decide to change -# that, please consider contributing to the project by creating a pull request with the -# needed changes. - -# IMPORTANT: The rear-left part of your bed becomes unusable by this mod because the -# toolhead needs to lower down to 0. Be sure not to use the left-rear 130x35mm. - -# The goals of this combination of devices is to dispose of purged filament during a -# multicolored print without the need of a purge block and without the flurries of -# filament poops consuming your entire 3D printer room. The Blobifier achieves that by -# purging onto a retractable tray which causes the filament to turn into a tiny blob -# rather then a large spiral. This keeps the waste relativly small. The bucket should be -# able to account for up to 200 filament swaps (for the 300mm V2). - -# The Blobifier uses some room at the back-left side of your printer, depending on your -# printer limits and positions. (usually max_pos.y - toolhead_y and brush_start + -# brush_width + toolhead_x). If you do place objects within this region, Blobifier will -# skip purging automatically. It does this by extending the EXCLUDE_OBJECT_* macro's, so -# make sure you have exclude objects enabled in your slicer. - -# If your using Blobifier in conjunction with the filament cutter on the stealthburner -# toolhead, you can place the pin at max_pos.y - 7 (e.g., max pos y is 307, place it at -# 300). The pin will then poke through the cavity in your toolhead. (Be careful with -# manually moving the toolhead. I have broken many filament cutter pins) - -# It is advised to use the start_gcode from Happy Hare. Then you will be able to fully -# and efficiently use this mod. Check the Happy Hare document at gcode_preprocessing.md -# in the Happy Hare github for more details. - -###################################### DISCLAIMER ######################################## - -# You, and you alone, are responsible for the correct execution of these macros and -# gcodes. Any damage that may occur to your machine remains your responsibility. -# Especially when executing this macro for the first few times, keep an eye on your -# printer and the -# emergency stop. - -########################################################################################## - -########################################################################################## -# Main macro. Usually you should only need to call this one or place it in the Happy Hare -# _MMU_POST_LOAD macro using the variable_user_post_load_extension: -# -# variable_user_post_load_extension : `BLOBIFIER` -# -# Notes on parameters: -# PURGE_LENGTH=[float] (optional) The length to purge. If ommited (default) it will check -# the purge_volumes matrix or variable_purge_length. This can be used -# to override and for testing. -# -[gcode_macro BLOBIFIER] -# These parameters define your filament purging. -# Note that the control of retraction is set in 'mmu_macro_vars.cfg' which can be increased -# if you experience excessive oozing. -variable_purge_spd: 400 # Speed, in mm/min, of the purge. -variable_purge_temp_min: 200 # Minimum nozzle purge temperature. -variable_toolhead_x: 97 # From the nozzle to the left of your toolhead -variable_toolhead_y: 254 # From the nozzle to the front of your toolhead - -# This macro will prevent a gcode movement downward while 'blobbing' if there might be a -# print in the way (e.g. You print something large and need the area where Blobifier does -# its... 'business'). However, at low heights (or at print start) this might not be -# desireable. You can force a 'safe descend' with this variable. Keep in mind that the -# height of the print is an estimation based on previous heights and certain assumptions -# so it might be wise to include a safety margin of 0.2mm -variable_force_safe_descend_height_until: 1.0 - -# Adjust this so that your nozzle scrubs within the brush. Be careful not to go too low! -# Start out with a high value (like, 6) and go -# down from there. -variable_brush_top: 0 - -# These parameters define your scrubbing, travel speeds, safe z clearance and how many -# times you want to wipe. Update as necessary. -variable_clearance_z: 0 # When traveling, but not cleaning, the - # clearance along the z-axis between nozzle - # and brush. -variable_wipe_qty: 2 # Number of complete (A complete wipe: left, - # right, left OR right, left, right) wipes. -variable_travel_spd_xy: 18000 # Travel (not cleaning) speed along x and - # y-axis in mm/min. -variable_travel_spd_z: 1000 # Travel (not cleaning) speed along z axis - # in mm/min. -variable_wipe_spd_xy: 6000 # Nozzle wipe speed in mm/min. - -# The acceleration to use when using the brush action. If set to 0, it uses the already -# set acceleration. However, in some cases this is not desirable for the last motion -# could be an 'outer contour' acceleration which is usually lower. -variable_brush_accel: 4000 - -# Blobifier sends the toolhead to the maximum y position during purge oeprations and -# minimum x position during shake operations. This can cause issues when skew correction -# is set up. If you have skew correction enabled and get 'move out of range' errors -# regarding blobifier while skew is enabled, try increasing this value. Keep the -# adjustments small though! (0.1mm - 0.5mm) and increase it until it works. -variable_skew_correction: 0.1 - -# These parameters define the size of the brush. Update as necessary. A visual reference -# is provided below. -# -# ← brush_width → -# _________________ -# | | ↑ Y position is acquired from your -# brush_start (x) | | brush_depth stepper_y position_max. Adjust -# |_________________| ↓ your brush physically in Y so -# (y) that the nozzle scrubs within the -# brush_front brush. -# __________________________________________________________ -# PRINTER FRONT -# -# -# Start location of the brush. Defaults for 250, 300 and 350mm are provided below. -# Uncomment as necessary -#variable_brush_start: 34 # For 250mm build -variable_brush_start: 96 # For 300mm build -#variable_brush_start: 84 # for 350mm build - -# width of the brush -variable_brush_width: -35 - -# Location of where to purge. The tray is 15mm in length, so if you assemble it against -# the side of the bed (default), 10mm is a good location -variable_purge_x: 97 - -# Height of the tray. If it's below your bed, give this a negative number equal to the -# difference. If it's above your bed, give it a positive number. You can find this number -# by homing, optional QGL or equivalent, and moving you toolhead above the tray, and -# lowering it with the paper method. -variable_tray_top: 0.7 - -# Servo angles for tray positions -variable_tray_angle_out: 0 -variable_tray_angle_in: 180 - -# ======================================================================================== -# ==================== BLOB TUNING ======================================================= -# ======================================================================================== - -# The following section defines how the purging sequence is executed. This is where you -# tune the purging to create pretty blobs. Refer to the visual reference for a better -# understanding. The visual is populated with example values. Below are some guides -# provided to help with tuning. -# -# \_____________/ -# |___|___| -# \_/ ______________ < End of third iteration. -# / \ HEIGHT: 3 x iteration_z_raise - (2 + 1) x iteration_z_change (3 x 5 - 2 x 1.2 = 11.4) -# | | EXTRUDED: 3 x max_iteration_length (3 x 50 = 150) -# / \ ______________ < End of second iteration. -# | \ HEIGHT: 2 x iteration_z_raise - 1 x iteration_z_change (2 x 5 - 1 x 1.2 = 8.8) -# / | EXTRUDED: 2 x max_iteration_length (2 x 50 = 100) -# | \ ______________ < End of first iteration. -# / \ HEIGHT: 1 x iteration_z_raise (1 x 5 = 5) -# | | EXTRUDED: 1 x max_iteration_length (1 x 50 = 50) -#___________ \ / ______________ < Start height of the nozzle. default value: 1.5mm -# |_______________\___________/_ ______________ < Bottom of the tray -# |_____________________________| -# | -# -########################### BLOB TUNING ############################## -# +-------------------------------------+----------------------------+ -# | Filament sticks to the nozzle at | Incr. purge start | -# | initial purge (first few mm) | | -# +-------------------------------------+----------------------------+ -# | Filament scoots out from under | Incr. temperature | -# | the nozzle at the first iteration | Decr. z_raise | -# | | Incr. purge_length_maximum | -# +-------------------------------------+----------------------------+ -# | Filament scoots out from under the | Decr. purge_spd | -# | the nozzle at later iterations | Decr. z_raise_exp | -# | | Decr. z_raise | -# | | Incr. purge_length_maximum | -# +-------------------------------------+----------------------------+ -# | Filament sticks to the nozzle at | Incr. z_raise_exp | -# | later iterations | (Not above 1) | -# +-------------------------------------+----------------------------+ -# - -# The height to raise the nozzle above the tray before purging. This allows any built up -# pressure to escape before the purge. -variable_purge_start: 0.2 - -# The amount to raise Z -variable_z_raise: 12 - -# As the nozzle gets higher and the blob wider, the Z raise needs to be reduced, this -# follows the following formula: -# (extruded_amount/max_purge_length)^z_raise_exp * z_raise -# 1 is linear, below 1 will cause z to raise less quickly over time, above 1 will make it -# raise quicker over time. 0.85 is a good starting point and you should not have it above 1 -variable_z_raise_exp: 0.85 - -# Lift the nozzle slightly after creating the blob te release pressure on the tray. -variable_eject_hop: 1.0 - -# Dwell time (ms) after purging and before cleaning to relieve pressure from the nozzle. -variable_pressure_release_time: 1000 - -# Set the part cooling fan speed. Disabling can help prevent the nozzle from cooling down -# and stimulate flow, Enabling it can prevent blobs from sticking together. Values range -# from 0 .. 1, or -1 if you don't want it changed. -#variable_part_cooling_fan: -1 # Leave it unchanged -#variable_part_cooling_fan: 0 # Disable the fan -variable_part_cooling_fan: 1 # Run it at full speed - - -# ======================================================================================== -# ==================== PURGE LENGTH TUNING =============================================== -# ======================================================================================== - -# The absolute minimum to purge, even if you don't changed tools. This is to prime the -# nozzle before printing -variable_purge_length_minimum: 30 - -# The maximum amount of filament (in mm¹) to purge in a single blob. Blobifier will -# automatically purge multiple blobs if the purge amount exeeds this. -variable_purge_length_maximum: 150 - -# Default purge length to fall back on when neither the tool map purge_volumes or -# parameter PURGE_LENGTH is set. -variable_purge_length: 150 - -# The slicer values often are a bit too wastefull. Tune it here to get optimal values. -# 0.6 (60%) is a good starting point. -variable_purge_length_modifier: 0.6 - -# Fixed length of filament to add after the purge volume calculation. Happy Hare already -# shares info on the extra amount of filament to purge based on known residual filament, -# tip cutting fragment and initial retraction setting. However this setting can add a fixed -# amount on top on that if necessary although it is recommended to start with 0 and tune -# slicer purge matrix first. -# When should you alter this value: -# INCREASE: When the dark to light swaps are good, but light to dark aren't. -# DECREASE: When the light to dark swaps are good, but dark to light aren't. Don't -# forget to increase the purge_length_modifier -variable_purge_length_addition: 0 - -# ======================================================================================== -# ==================== BUCKET ============================================================ -# ======================================================================================== - -# Maximum number of blobs that fit in the bucket. Pauses the print if it exceeds this -# number. -variable_max_blobs: 400 -# Enable the bucket shaker. You need to have the shaker.stl installed -variable_enable_shaker: 1 -# The number of back-and-forth motions of one shake -variable_bucket_shakes: 10 -# During shaking acceleration can often be higher because you don't neeed to keep print -# quality in mind. Higher acceleration helps better with dispersing the blobs. -variable_shake_accel: 10000 - -# The frequency at which to shake the bucket. A decimal value ranging from 0 to 1, where 0 -# is never, and 1 is every time. This way the shaking occurs more often as the bucket -# fills up. Sensible values range from 0.75 to 0.95 -variable_bucket_shake_frequency: 0.95 - -# Height of the shaker arm. If your hotend hits your tray during shaking, increase. -variable_shaker_arm_z: 2 - -gcode: - - # ====================================================================================== - # ==================== RECORD STATE (INCL. FANS, SPEEDS, ETC...) ======================= - # ====================================================================================== - - # General state - SAVE_GCODE_STATE NAME=BLOBIFIER_state - - - # ====================================================================================== - # ==================== CHECK HOMING STATUS ============================================= - # ====================================================================================== - - {% if "xyz" not in printer.toolhead.homed_axes %} - RESPOND MSG="BLOBIFIER: Not homed! Home xyz before blobbing" - {% elif printer.quad_gantry_level and printer.quad_gantry_level.applied == False %} - RESPOND MSG="BLOBIFIER: QGL not applied! run quad_gantry_level before blobbing" - {% else %} - - # Part cooling fan - {% if part_cooling_fan >= 0 %} - # Save the part cooling fan speed to be enabled again later - {% set backup_fan_speed = printer.fan.speed %} - # Set part cooling fan speed - M106 S{part_cooling_fan * 255} - {% endif %} - - # Set feedrate to 100% for correct speed purging - {% set backup_feedrate = printer.gcode_move.speed_factor %} - M220 S100 - - # ====================================================================================== - # ==================== DEFINE BASIC VARIABLES ========================================== - # ====================================================================================== - - {% set sequence_vars = printer['gcode_macro _MMU_SEQUENCE_VARS'] %} - {% set park_vars = printer['gcode_macro _MMU_PARK'] %} - {% set filament_diameter = printer.configfile.config.extruder.filament_diameter|float %} - {% set filament_cross_section = (filament_diameter/2) ** 2 * 3.1415 %} - {% set from_tool = printer.mmu.last_tool %} - {% set to_tool = printer.mmu.tool %} - {% set bl_count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - {% set pos = printer.gcode_move.gcode_position %} - {% set safe = printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'] %} - {% set ignore_safe = safe.print_height < force_safe_descend_height_until %} - {% set restore_z = [printer['gcode_macro BLOBIFIER_PARK'].restore_z,pos.z]|max %} - {% set pos_max = printer.toolhead.axis_maximum %} - {% set position_y = pos_max.y - skew_correction %} - - # Get purge volumes from the slicer (if set up right. see - # https://github.com/moggieuk/Happy-Hare/wiki/Gcode-Preprocessing) - {% set pv = printer.mmu.slicer_tool_map.purge_volumes %} - - # ====================================================================================== - # ==================== DETERMINE PURGE LENGTH ========================================== - # ====================================================================================== - - {% if params.PURGE_LENGTH %} # =============== PARAM PURGE LENGTH ====================== - {action_respond_info("BLOBIFIER: param PURGE_LENGTH provided")} - {% set purge_len = params.PURGE_LENGTH|float %} - {% elif from_tool == to_tool and to_tool >= 0 %} # ==== TOOL DIDN'T CHANGE ============= - {action_respond_info("BLOBIFIER: Tool didn't change (T%s > T%s), %s" % (from_tool, to_tool, "priming" if purge_length_minimum else "skipping"))} - {% set purge_len = 0 %} - - {% elif pv %} # ============== FETCH FROM HAPPY HARE (LIKELY FROM SLICER) ============== - {% if from_tool < 0 and to_tool >= 0%} - {action_respond_info("BLOBIFIER: from tool unknown. Finding largest value for T? > T%d" % to_tool)} - {% set purge_vol = pv|map(attribute=to_tool)|max %} - {% elif to_tool < 0 %} - {action_respond_info("BLOBIFIER: tool(s) unknown. Finding largest value")} - {% set purge_vol = pv|map('max')|max %} - {% else %} - {% set purge_vol = pv[from_tool][to_tool]|float * purge_length_modifier %} - {action_respond_info("BLOBIFIER: Swapped T%s > T%s" % (from_tool, to_tool))} - {% endif %} - {% set purge_len = purge_vol / filament_cross_section %} - - {% set purge_len = purge_len + printer.mmu.extruder_filament_remaining + park_vars.retracted_length + purge_length_addition %} - - {% else %} # ========================= USE CONFIG VARIABLE ============================= - {action_respond_info("BLOBIFIER: No toolmap or PURGE_LENGTH. Using default")} - {% set purge_len = purge_length|float + printer.mmu.extruder_filament_remaining + park_vars.retracted_length %} - {% endif %} - - # ==================================== APPLY PURGE MINIMUM ============================= - {% set purge_len = [purge_len,purge_length_minimum]|max|round(0, 'ceil')|int %} - {action_respond_info("BLOBIFIER: Purging %dmm of filament" % (purge_len))} - - # ====================================================================================== - # ==================== PURGING SEQUENCE ================================================ - # ====================================================================================== - - # Set to absolute positioning. - G90 - - # Check for purge length and purge if necessary. - {% if purge_len|float > 0 %} - - # ==================================================================================== - # ==================== POSITIONING =================================================== - # ==================================================================================== - - # Move to the assembly, first a bit more to the right (brush_start) to avoid a - # potential filametrix pin if it's not already on the same Y coordinate. - {% if printer.toolhead.position.y != position_y %} - G1 X{brush_start} Y{position_y} F{travel_spd_xy} - {% endif %} - # Move over to the tray - G1 X{purge_x} F{travel_spd_xy} - - # ==================================================================================== - # ==================== BUCKET SHAKE ================================================== - # ==================================================================================== - - {% if enable_shaker and (safe.shake or ignore_safe) %} - {% if (bl_count.current_blobs + 1) >= bl_count.next_shake %} - BLOBIFIER_SHAKE_BUCKET SHAKES={bucket_shakes} - _BLOBIFIER_CALCULATE_NEXT_SHAKE - {% endif %} - {% endif %} - - # ==================================================================================== - # ==================== POSITIONING ON TRAY =========================================== - # ==================================================================================== - {% if safe.tray or ignore_safe %} - G1 Z{tray_top + purge_start} F{travel_spd_z} - - # Extend the blobifier - BLOBIFIER_SERVO POS=out - {% endif %} - - # ==================================================================================== - # ==================== HEAT HOTEND =================================================== - # ==================================================================================== - - {% if printer.extruder.temperature < purge_temp_min %} - {% if printer.extruder.target < purge_temp_min %} - M109 S{purge_temp_min} - {% else %} - TEMPERATURE_WAIT SENSOR=extruder MINIMUM={purge_temp_min} - {% endif %} - {% endif %} - - # ==================================================================================== - # ==================== START ITERATING =============================================== - # ==================================================================================== - - # Calculate total number of iterations based on the purge length and the max_iteration - # length. - {% set blobs = (purge_len / purge_length_maximum)|round(0, 'ceil')|int %} - {% set purge_per_blob = purge_len|float / blobs %} - {% set retracts_per_blob = (purge_per_blob / 40)|round(0, 'ceil')|int %} - {% set purge_per_retract = (purge_per_blob / retracts_per_blob)|int %} - {% set pulses_per_retract = (purge_per_blob / retracts_per_blob / 5)|round(0, 'ceil')|int %} - {% set pulses_per_blob = (purge_per_blob / 5)|round(0, 'ceil')|int %} - {% set purge_per_pulse = purge_per_blob / pulses_per_blob %} - {% set pulse_time_constant = purge_per_pulse * 0.95 / purge_spd / (purge_per_pulse * 0.95 / purge_spd + purge_per_pulse * 0.05 / 50) %} - {% set pulse_duration = purge_per_pulse / purge_spd %} - - # Repeat the process until purge_len is reached - {% for blob in range(blobs) %} - RESPOND MSG={"'BLOBIFIER: Blob %d of %d (%.1fmm)'" % (blob + 1, blobs, purge_per_blob)} - - {% if safe.tray or ignore_safe %} - G1 Z{tray_top + purge_start} F{travel_spd_z} - {% endif %} - - # relative positioning - G91 - # relative extrusion - M83 - - # Purge filament in a pulsating motion to purge the filament quicker and better - {% for pulse in range(pulses_per_blob) %} - # Calculations to determine z-speed - {% set purged_this_blob = pulse * purge_per_pulse %} - {% set z_last_pos = purge_start + ((purged_this_blob)/purge_length_maximum)**z_raise_exp * z_raise %} - {% set z_pos = purge_start + ((purged_this_blob + purge_per_pulse)/purge_length_maximum)**z_raise_exp * z_raise %} - {% set z_up = z_pos - z_last_pos %} - {% set speed = z_up / pulse_duration %} - - # Purge quickly - G1 Z{z_up * pulse_time_constant} E{purge_per_pulse * 0.95} F{speed} - # Purge a tiny bit slowly - G1 Z{z_up * (1 - pulse_time_constant)} E{purge_per_pulse * 0.05} F{speed} - - # retract and unretract filament every now and then for thourough cleaning - {% if pulse % pulses_per_retract == 0 and pulse > 0 %} - G1 E-2 F1800 - G1 E2 F800 - {% endif %} - - {% endfor %} - - # Retract to match what Happy Hare is expecting - G1 E-{park_vars.retracted_length} F{sequence_vars.retract_speed * 60} - - # ================================================================================== - # ==================== DEPOSIT BLOB ================================================ - # ================================================================================== - {% if safe.tray or ignore_safe %} - # Raise z a bit to relieve pressure on the blob preventing it to go sideways - G1 Z{eject_hop} F{travel_spd_z} - # Retract the tray - BLOBIFIER_SERVO POS=in - # Move the toolhead down to purge_start height lowering the blob below the tray - G90 # absolute positioning - G1 Z{tray_top} F{travel_spd_z} - # Extend the tray to 'cut off' the blob and prepare for the next blob - BLOBIFIER_SERVO POS=out - BLOBIFIER_SERVO POS=in - BLOBIFIER_SERVO POS=out - # Keep track of the # of blobs - _BLOBIFIER_COUNT - {% endif %} - {% endfor %} - {% endif %} - {% if safe.tray or ignore_safe %} - G1 Z{tray_top + 1} F{travel_spd_z} - G4 P{pressure_release_time} - {% endif %} - {% if safe.brush or ignore_safe %} - BLOBIFIER_CLEAN - {% else %} - G1 X{brush_start} F{travel_spd_xy} - {% endif %} - - # ====================================================================================== - # ==================== RESTORE STATE =================================================== - # ====================================================================================== - - G1 Z{restore_z} F{travel_spd_z} - - {% if part_cooling_fan >= 0 %} - # Reset part cooling fan if it was changed - M106 S{(backup_fan_speed * 255)|int} - {% endif %} - - M220 S{(backup_feedrate * 100)|int} - {% endif %} - - RESTORE_GCODE_STATE NAME=BLOBIFIER_state - - -########################################################################################## -# Wipes the nozzle on the brass brush -# -[gcode_macro BLOBIFIER_CLEAN] -gcode: - {% set bb = printer['gcode_macro BLOBIFIER'] %} - {% set position_y = printer.configfile.config["stepper_y"]["position_max"]|float %} - {% set original_accel = printer.toolhead.max_accel %} - {% set original_minimum_cruise_ratio = printer.toolhead.minimum_cruise_ratio %} - {% set pos = printer.gcode_move.gcode_position %} - - SAVE_GCODE_STATE NAME=BLOBIFIER_CLEAN_state - - G90 - - {% if bb.brush_accel > 0 %} - SET_VELOCITY_LIMIT ACCEL={bb.brush_accel} MINIMUM_CRUISE_RATIO=0.1 - {% endif %} - - {% if pos.z < bb.brush_top + bb.clearance_z %} - G1 Z{bb.brush_top + bb.clearance_z} F{bb.travel_spd_z} - {% endif %} - G1 X{bb.brush_start} F{bb.travel_spd_xy} - G1 Y{position_y} - G1 Z{bb.brush_top + bb.clearance_z} F{bb.travel_spd_z} - - # Move nozzle down into brush. - G1 Z{bb.brush_top} F{bb.travel_spd_z} - - SET_VELOCITY_LIMIT ACCEL={original_accel} MINIMUM_CRUISE_RATIO={original_minimum_cruise_ratio} - - # Perform wipe. Wipe direction based off bucket_pos for cool random scrubby routine. - {% for wipes in range(1, (bb.wipe_qty + 1)) %} - G1 X{bb.brush_start + bb.brush_width} F{bb.wipe_spd_xy} - G1 X{bb.brush_start} F{bb.wipe_spd_xy} - {% endfor %} - - RESTORE_GCODE_STATE NAME=BLOBIFIER_CLEAN_state - - - -########################################################################################## -# Park the nozzle on the tray to prevent oozing during filament swaps. Place this -# extension in the post_form_tip extension in mmu_macro_vars.cfg: -# variable_user_post_form_tip_extension: "BLOBIFIER_PARK" -# -[gcode_macro BLOBIFIER_PARK] -variable_restore_z: 0 -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set pos = printer.gcode_move.gcode_position %} - {% set safe = printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'] %} - {% set pos_max = printer.toolhead.axis_maximum %} - {% set position_y = pos_max.y - bl.skew_correction %} - - SET_GCODE_VARIABLE MACRO=BLOBIFIER_PARK VARIABLE=restore_z VALUE={pos.z} - - SAVE_GCODE_STATE NAME=blobifier_park_state - - {% if "xyz" in printer.toolhead.homed_axes and printer.quad_gantry_level and printer.quad_gantry_level.applied %} - G90 - - G1 X{bl.brush_start} Y{position_y} F{bl.travel_spd_xy} - G1 X{bl.purge_x} - {% if safe.tray or ignore_safe %} - G1 Z{bl.tray_top} F{bl.travel_spd_z} - {% endif %} - {% else %} - RESPOND MSG="Please home (and QGL) before parking" - {% endif %} - - RESTORE_GCODE_STATE NAME=blobifier_park_state - -########################################################################################## -# Retract or extend the tray -# POS=[in|out] Retractor extend the tray -# -[gcode_macro BLOBIFIER_SERVO] -# Increase this value if the servo doesn't have enough time to fully retract or extend -variable_dwell_time: 200 -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set pos = params.POS %} - {% if pos == "in" %} - SET_SERVO SERVO=blobifier ANGLE={bl.tray_angle_in} - G4 P{dwell_time} - {% elif pos == "out" %} - SET_SERVO SERVO=blobifier ANGLE={bl.tray_angle_out} - G4 P{dwell_time} - {% else %} - {action_respond_info("BLOBIFIER: provide POS=[in|out]")} - {% endif %} - SET_SERVO SERVO=blobifier WIDTH=0 - -########################################################################################## -# Define exclude objects for those who haven't already -# -[exclude_object] - -########################################################################################## -# Overwrite the existing EXCLUDE_OBJECT_DEFINE to also check for safe descend. -# -[gcode_macro EXCLUDE_OBJECT_DEFINE] -rename_existing: _EXCLUDE_OBJECT_DEFINE -gcode: - # only reset on the first object at the beginning of a print - {% if printer.exclude_object.objects|length < 1 %} - _BLOBIFIER_RESET_SAFE_DESCEND - {% endif %} - _EXCLUDE_OBJECT_DEFINE {rawparams} - _BLOBIFIER_SAFE_DESCEND - UPDATE_DELAYED_GCODE ID=BLOBIFIER_SHOW_SAFE_DESCEND DURATION=1 - -[delayed_gcode BLOBIFIER_SHOW_SAFE_DESCEND] -gcode: - {% set safe = printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'] %} - {action_respond_info( - "BLOBIIER: Safe descend possible:\n - tray: %s\n - brush: %s\n - shake: %s" % - ( - "yes" if safe.tray else "no", - "yes" if safe.brush else "no", - "yes" if safe.shake else "no" - ) - )} - -########################################################################################## -# Use the EXCLUDE_OBJECT_START gcode macro to record the current height -# -[gcode_macro EXCLUDE_OBJECT_START] -rename_existing: _EXCLUDE_OBJECT_START -gcode: - _EXCLUDE_OBJECT_START {rawparams} - {% if printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'].first_layer %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=first_layer VALUE=False - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=print_height VALUE={printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'].print_layer_height} - {% else %} - {% set pos = printer.gcode_move.gcode_position %} - {% set last_height = printer['gcode_macro _BLOBIFIER_SAFE_DESCEND'].print_previous_height|float %} - {% if pos.z > last_height %} - {% set last_layer = (pos.z - last_height)|round(2) %} - {% set print_height = (pos.z + last_layer)|round(2) %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=print_previous_height VALUE={pos.z} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=print_height VALUE={print_height} - {% endif %} - {% endif %} - - -########################################################################################## -# Reset the safe descend variables. -# -[gcode_macro _BLOBIFIER_RESET_SAFE_DESCEND] -gcode: - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=tray VALUE=True - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=brush VALUE=True - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=shake VALUE=True - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=first_layer VALUE=True - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=print_height VALUE=0 - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=print_previous_height VALUE=0 - -########################################################################################## -# Determine if it is safe to drop the toolhead (e.g. not hit a print) -# -[gcode_macro _BLOBIFIER_SAFE_DESCEND] -variable_tray: True # Assume it is safe -variable_brush: True -variable_shake: True -variable_first_layer: True -variable_print_height: 0 -variable_print_previous_height: 0 -variable_print_layer_height: 0.3 -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set pos_max = printer.toolhead.axis_maximum %} - {% set position_y = pos_max.y - bl.skew_correction %} - {% set tray = [bl.purge_x + bl.toolhead_x, position_y - bl.toolhead_y] %} - {% set brush = [bl.brush_start + bl.brush_width + bl.toolhead_x, position_y - bl.toolhead_y] %} - {% set shake = [bl.purge_x + bl.toolhead_x, position_y - bl.toolhead_y - 4] %} - {% set objects = printer.exclude_object.objects | map(attribute='polygon') %} - - {% for polygon in objects %} - {% for point in polygon %} - {% if point[0] < tray[0] and point[1] > tray[1] %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=tray VALUE=False - {% endif %} - {% if point[0] < brush[0] and point[1] > brush[1] %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=brush VALUE=False - {% endif %} - {% if point[0] < shake[0] and point[1] > shake[1] %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_SAFE_DESCEND VARIABLE=shake VALUE=False - {% endif %} - {% endfor %} - {% endfor %} - -########################################################################################## -# Increment the blob count with 1 and check if the bucket is full. Pause -# the printer if it is. -# -[gcode_macro _BLOBIFIER_COUNT] -# Don't change these variables -variable_current_blobs: 0 -variable_last_shake: 0 -variable_next_shake: 0 -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - {% if current_blobs >= bl.max_blobs %} - {action_respond_info("BLOBIFIER: Empty purge bucket!")} - M117 Empty purge bucket! - PAUSE - {% else %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=current_blobs VALUE={current_blobs + 1} - _BLOBIFIER_SAVE_STATE - {action_respond_info( - "BLOBIFIER: Blobs in bucket: %s/%s. Next shake @ %s" - % (current_blobs + 1, bl.max_blobs, next_shake) - )} - {% endif %} - -########################################################################################## -# Reset the blob count to 0 -# -[gcode_macro _BLOBIFIER_COUNT_RESET] -gcode: - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=current_blobs VALUE=0 - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=last_shake VALUE=0 - _BLOBIFIER_SAVE_STATE - - _BLOBIFIER_CALCULATE_NEXT_SHAKE - -########################################################################################## -# Shake the blob bucket to disperse the blobs -# -[gcode_macro BLOBIFIER_SHAKE_BUCKET] -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - {% set original_accel = printer.toolhead.max_accel %} - {% set original_minimum_cruise_ratio = printer.toolhead.minimum_cruise_ratio %} - {% set position_x = bl.skew_correction %} - - {% if "xyz" not in printer.toolhead.homed_axes %} - {action_raise_error("BLOBIFIER: Not homed. Home xyz first")} - {% endif %} - - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=last_shake VALUE={count.current_blobs} - _BLOBIFIER_SAVE_STATE - SAVE_GCODE_STATE NAME=shake_bucket - - M400 - M117 (^_^) - - G90 - {% set shakes = params.SHAKES|default(10)|int %} - {% set position_y = printer.configfile.config["stepper_y"]["position_max"]|float %} - - # move to save y if not already there - {% if printer.toolhead.position.y != position_y %} - G1 X{bl.brush_start} Y{position_y} F{bl.travel_spd_xy} - {% endif %} - - # move up a bit to prevent oozing on base - G1 Z{bl.shaker_arm_z} F{bl.travel_spd_z} - # slide into the slot - G1 X{position_x} F{bl.travel_spd_xy} - - M400 - M117 (+(+_+)+) - - SET_VELOCITY_LIMIT ACCEL={bl.shake_accel} MINIMUM_CRUISE_RATIO=0.1 - - # Shake away! - {% for shake in range(1, shakes) %} - G1 Y{position_y - 4} - G1 Y{position_y} - {% endfor %} - - SET_VELOCITY_LIMIT ACCEL={original_accel} MINIMUM_CRUISE_RATIO={original_minimum_cruise_ratio} - # move out of slot - G1 X{bl.purge_x} - - M400 - M117 (X_x) - - RESTORE_GCODE_STATE NAME=shake_bucket - -########################################################################################## -# Calculate when the bucket should be shaken. -# -[gcode_macro _BLOBIFIER_CALCULATE_NEXT_SHAKE] -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - {% set count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - - {% set remaining_blobs = bl.max_blobs - count.last_shake %} - {% set next_shake = (1 - bl.bucket_shake_frequency) * remaining_blobs + count.last_shake %} - _BLOBIFIER_SAVE_STATE - _BLOBIFIER_SET_NEXT_SHAKE VALUE={next_shake|int} - -########################################################################################## -# Set when the bucket should be shaken next -# VALUE=[int] At what amount of blobs should it be shaken -# -[gcode_macro _BLOBIFIER_SET_NEXT_SHAKE] -gcode: - {% if params.VALUE %} - {% set next_shake = params.VALUE %} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=next_shake VALUE={next_shake} - _BLOBIFIER_SAVE_STATE - {% else %} - {action_respond_info("BLOBIFIER: Provide parameter VALUE=")} - {% endif %} - -########################################################################################## -# Some sanity checks -# -[delayed_gcode BLOBIFIER_INIT] -initial_duration: 5.0 -gcode: - _BLOBIFIER_INIT - BLOBIFIER_SERVO POS=out - -[gcode_macro _BLOBIFIER_INIT] -gcode: - {% set bl = printer['gcode_macro BLOBIFIER'] %} - - # Valid part cooling fan setting - {% if bl.part_cooling_fan != -1 and (bl.part_cooling_fan < 0 or bl.part_cooling_fan > 1) %} - {action_emergency_stop("BLOBIFIER: Value %f is invalid for variable part_cooling_fan. Either -1 or a value from 0 .. 1 is valid." % (bl.part_cooling_fan))} - {% endif %} - - # Valid bucket shake frequency - {% if bl.bucket_shake_frequency < 0 or bl.bucket_shake_frequency > 1 %} - {action_emergency_stop("BLOBIFIER: Value %f is invalid for variable bucket_shake_frequency. Change it to a value between 0 .. 1" % (bl.bucket_shake_frequency))} - {% endif %} - - # Check if position is on 'next' - {% if printer.mmu %} - {% if printer['gcode_macro _MMU_SEQUENCE_VARS'].restore_xy_pos != 'next' %} - {action_respond_info("BLOBIFIER: If not using a wipe tower, consider setting restore_xy_pos: 'next' in mmu_macro_vars.cfg")} - {% endif %} - {% endif %} - - # Check the z_raise variable for normal values - {% if bl.z_raise < 3 %} - {action_respond_info("BLOBIFIER: variable_z_raise: %f is very low. This is the value z raises in total on a single blob. Make sure the value is correct before continuing." % (bl.z_raise))} - {% endif %} - - # Z raise exponent - {% if bl.z_raise_exp > 1 or bl.z_raise_exp < 0.5 %} - {action_respond_info("BLOBIFIER: variable_z_raise_exp has value: %f. This value is out of spec (0.5 ... 1.0)." % (bl.z_raise))} - {% endif %} - - - -[delayed_gcode BLOBIFIER_LOAD_STATE] -initial_duration: 2.0 # Give it some time to boot up -gcode: - {% set sv = printer.save_variables.variables.blobifier %} - - {% if sv %} - # Restore state - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=last_shake VALUE={sv.last_shake} - SET_GCODE_VARIABLE MACRO=_BLOBIFIER_COUNT VARIABLE=current_blobs VALUE={sv.current_blobs} - {% endif %} - _BLOBIFIER_CALCULATE_NEXT_SHAKE - -[gcode_macro _BLOBIFIER_SAVE_STATE] -gcode: - {% set count = printer['gcode_macro _BLOBIFIER_COUNT'] %} - {% set sv = {'current_blobs': count.current_blobs, 'last_shake': count.last_shake} %} - SAVE_VARIABLE VARIABLE=blobifier VALUE="{sv}" - diff --git a/printer_data/config/mmu/addons/blobifier_hw.cfg b/printer_data/config/mmu/addons/blobifier_hw.cfg deleted file mode 100644 index 5f76ae8..0000000 --- a/printer_data/config/mmu/addons/blobifier_hw.cfg +++ /dev/null @@ -1,28 +0,0 @@ - -########################################################################################## -# The servo hardware configuration. Change the values to your needs. -# -[mmu_servo blobifier] -# Pin for the servo. -pin: PG14 -# Adjust this value until a 'BLOBIFIER_SERVO POS=out' extends the tray fully without a -# buzzing sound -minimum_pulse_width: 0.00053 -# Adjust this value until a 'BLOBIFIER_SERVO POS=in' retracts the tray fully without a -# buzzing sound -maximum_pulse_width: 0.0023 -# Leave this value at 180 -maximum_servo_angle: 180 - - -########################################################################################## -# The bucket hardware configuration. Change the pin to whatever pin you've connected the -# switch to. -# -[gcode_button bucket] -pin: ^PG15 # The pullup ( ^ ) is important here. -press_gcode: - M117 bucket installed -release_gcode: - M117 bucket removed - _BLOBIFIER_COUNT_RESET diff --git a/printer_data/config/mmu/addons/dc_espooler_hw.cfg b/printer_data/config/mmu/addons/dc_espooler_hw.cfg index 037454e..be7029d 100644 --- a/printer_data/config/mmu/addons/dc_espooler_hw.cfg +++ b/printer_data/config/mmu/addons/dc_espooler_hw.cfg @@ -22,9 +22,9 @@ pwm: True scale: 1 # Enable pin -[output_pin _mmu_dc_espooler_en_0] -pin: mmu:MMU_DC_MOT_1_EN -value: 0 +# [output_pin _mmu_dc_espooler_en_0] +# pin: mmu:MMU_DC_MOT_1_EN +# value: 0 ################## # Gate 1 eSpooler @@ -38,9 +38,9 @@ pwm: True scale: 1 # Enable pin -[output_pin _mmu_dc_espooler_en_1] -pin: mmu:MMU_DC_MOT_2_EN -value: 0 +# [output_pin _mmu_dc_espooler_en_1] +# pin: mmu:MMU_DC_MOT_2_EN +# value: 0 ################## # Gate 2 eSpooler @@ -54,9 +54,9 @@ pwm: True scale: 1 # Enable pin -[output_pin _mmu_dc_espooler_en_2] -pin: mmu:MMU_DC_MOT_3_EN -value: 0 +# [output_pin _mmu_dc_espooler_en_2] +# pin: mmu:MMU_DC_MOT_3_EN +# value: 0 ################## # Gate 3 eSpooler @@ -70,6 +70,6 @@ pwm: True scale: 1 # Enable pin -[output_pin _mmu_dc_espooler_en_3] -pin: mmu:MMU_DC_MOT_4_EN -value: 0 +# [output_pin _mmu_dc_espooler_en_3] +# pin: mmu:MMU_DC_MOT_4_EN +# value: 0 diff --git a/printer_data/config/mmu/addons/mmu_erec_cutter_hw.cfg b/printer_data/config/mmu/addons/mmu_erec_cutter_hw.cfg deleted file mode 100644 index 4fec0c1..0000000 --- a/printer_data/config/mmu/addons/mmu_erec_cutter_hw.cfg +++ /dev/null @@ -1,10 +0,0 @@ - -########################################################################################## -# The servo hardware configuration. Change the values to your needs. -# -[mmu_servo cut_servo] -pin: mmu:PA7 # Extra Pin on the ERCF easy Board -maximum_servo_angle: 180 # Set this to 60 for a 60° Servo -minimum_pulse_width: 0.0005 # Adapt these for your servo -maximum_pulse_width: 0.0025 # Adapt these for your servo - diff --git a/printer_data/config/mmu/base/mmu_parameters.cfg b/printer_data/config/mmu/base/mmu_parameters.cfg index 7450342..979b052 100644 --- a/printer_data/config/mmu/base/mmu_parameters.cfg +++ b/printer_data/config/mmu/base/mmu_parameters.cfg @@ -419,7 +419,7 @@ console_always_output_full: 1 # 1 = Show full table, 0 = Only show totals out of # timeout_pause: 72000 # Idle time out (printer shutsdown) in seconds used when in MMU pause state disable_heater: 600 # Delay in seconds after which the hotend heater is disabled in the MMU_PAUSE state -default_extruder_temp: 200 # Default temperature for performing swaps and forming tips when not in print (overriden by gate map) +default_extruder_temp: 250 # Default temperature for performing swaps and forming tips when not in print (overriden by gate map) extruder_temp_variance: 2 # When waiting for extruder temperature this is the +/- permissible variance in degrees (>= 1) # # These are auto calibration/tuning settings. Once the gear rotation_distance and encoder are calibrated, enabling these options diff --git a/printer_data/config/mmu/mmu_vars.cfg b/printer_data/config/mmu/mmu_vars.cfg index e125b28..be2bf09 100644 --- a/printer_data/config/mmu/mmu_vars.cfg +++ b/printer_data/config/mmu/mmu_vars.cfg @@ -1,20 +1,20 @@ [Variables] -mmu__revision = 1280 +mmu__revision = 1336 mmu_calibration_bowden_home = 'mmu_gate' -mmu_calibration_bowden_lengths = [1770.4, 1770.4, 1770.4, 1770.4] +mmu_calibration_bowden_lengths = [1778.2, 1778.2, 1778.2, 1778.2] mmu_calibration_clog_length = 34.9 mmu_gear_rotation_distances = [4.65, 4.65, 4.65, 4.65] -mmu_state_filament_pos = -1 +mmu_state_filament_pos = 0 mmu_state_filament_remaining = 0.0 -mmu_state_gate_selected = 3 -mmu_state_gate_status = [1, 1, 0, 1] +mmu_state_gate_selected = 1 +mmu_state_gate_status = [2, 2, 1, 1] mmu_state_last_tool = 1 -mmu_state_tool_selected = 3 +mmu_state_tool_selected = 1 mmu_state_tool_to_gate_map = [0, 1, 2, 3] -mmu_statistics_counters = {'mmu_restarts': {'count': 199, 'limit': -1, 'warning': ''}} -mmu_statistics_gate_0 = {'pauses': 1, 'loads': 34, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 36, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 2, 'unload_failures': 1, 'quality': -1.0} -mmu_statistics_gate_1 = {'pauses': 1, 'loads': 2, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 2, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} +mmu_statistics_counters = {'mmu_restarts': {'count': 204, 'limit': -1, 'warning': ''}} +mmu_statistics_gate_0 = {'pauses': 1, 'loads': 35, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 38, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 2, 'unload_failures': 1, 'quality': -1.0} +mmu_statistics_gate_1 = {'pauses': 1, 'loads': 3, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 3, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} mmu_statistics_gate_2 = {'pauses': 1, 'loads': 19, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 18, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 3, 'unload_failures': 0, 'quality': -1.0} mmu_statistics_gate_3 = {'pauses': 0, 'loads': 0, 'load_distance': 0.0, 'load_delta': 0.0, 'unloads': 0, 'unload_distance': 0.0, 'unload_delta': 0.0, 'load_failures': 0, 'unload_failures': 0, 'quality': -1.0} -mmu_statistics_swaps = {'pre_load': 23.2, 'load': 1327.86, 'post_load': 512.59, 'total_swaps': 50, 'swaps_since_pause': 29, 'swaps_since_pause_record': 29, 'total': 2498.73, 'pre_unload': 16.54, 'unload': 932.14, 'post_unload': 10.87, 'total_pauses': 3} +mmu_statistics_swaps = {'pre_load': 23.8, 'load': 1435.38, 'post_load': 530.62, 'total_swaps': 52, 'swaps_since_pause': 31, 'swaps_since_pause_record': 31, 'total': 2639.14, 'pre_unload': 17.14, 'unload': 963.38, 'post_unload': 11.47, 'total_pauses': 3} diff --git a/printer_data/config/moonraker.conf b/printer_data/config/moonraker.conf index f6e7807..02c1075 100644 --- a/printer_data/config/moonraker.conf +++ b/printer_data/config/moonraker.conf @@ -5,7 +5,6 @@ klippy_uds_address: /home/mks/printer_data/comms/klippy.sock [authorization] trusted_clients: - 172.17.0.0/16 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 @@ -25,31 +24,10 @@ cors_domains: [history] -[timelapse] - -[file_manager] -enable_object_processing: True - [update_manager] channel: dev refresh_interval: 168 -[update_manager crowsnest] -type: git_repo -path: ~/crowsnest -origin: https://github.com/mainsail-crew/crowsnest.git -install_script: tools/pkglist.sh - - -[update_manager Klippain-ShakeTune] -type: git_repo -origin: https://github.com/Frix-x/klippain-shaketune.git -path: ~/klippain_shaketune -virtualenv: ~/klippy-env -requirements: requirements.txt -system_dependencies: system-dependencies.json -primary_branch: main -managed_services: klipper [update_manager mainsail-config] type: git_repo primary_branch: master @@ -62,36 +40,25 @@ type: web channel: stable repo: mainsail-crew/mainsail path: ~/mainsail - [update_manager klipper-backup] type: git_repo path: ~/klipper-backup origin: https://github.com/Staubgeborener/klipper-backup.git managed_services: moonraker primary_branch: main - -[update_manager Klipper-Adaptive-Meshing-Purging] -type: git_repo -channel: dev -path: ~/Klipper-Adaptive-Meshing-Purging -origin: https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging.git -managed_services: klipper -primary_branch: main - -[update_manager afc-software] +# Crowsnest update_manager entry +[update_manager crowsnest] type: git_repo -path: ~/AFC-Klipper-Add-On -origin: https://github.com/ArmoredTurtle/AFC-Klipper-Add-On.git -managed_services: klipper moonraker -primary_branch: main -install_script: install-afc.sh +path: ~/crowsnest +origin: https://github.com/mainsail-crew/crowsnest.git +managed_services: crowsnest +install_script: tools/pkglist.sh [update_manager happy-hare] type: git_repo path: ~/Happy-Hare origin: https://github.com/moggieuk/Happy-Hare.git primary_branch: main -install_script: install.sh managed_services: klipper [mmu_server] diff --git a/printer_data/config/moonraker.conf.backup b/printer_data/config/moonraker.conf.backup new file mode 100644 index 0000000..ee9f244 --- /dev/null +++ b/printer_data/config/moonraker.conf.backup @@ -0,0 +1,48 @@ +[server] +host: 0.0.0.0 +port: 7125 +klippy_uds_address: /home/mks/printer_data/comms/klippy.sock + +[authorization] +trusted_clients: + 10.0.0.0/8 + 127.0.0.0/8 + 169.254.0.0/16 + 172.16.0.0/12 + 192.168.0.0/16 + FE80::/10 + ::1/128 +cors_domains: + *.lan + *.local + *://localhost + *://localhost:* + *://my.mainsail.xyz + *://app.fluidd.xyz + +[octoprint_compat] + +[history] + +[update_manager] +channel: dev +refresh_interval: 168 + +[update_manager mainsail-config] +type: git_repo +primary_branch: master +path: ~/mainsail-config +origin: https://github.com/mainsail-crew/mainsail-config.git +managed_services: klipper + +[update_manager mainsail] +type: web +channel: stable +repo: mainsail-crew/mainsail +path: ~/mainsail +[update_manager klipper-backup] +type: git_repo +path: ~/klipper-backup +origin: https://github.com/Staubgeborener/klipper-backup.git +managed_services: moonraker +primary_branch: main \ No newline at end of file diff --git a/printer_data/config/printer-20241208_212004.cfg-old b/printer_data/config/printer-20241208_212004.cfg-old new file mode 100644 index 0000000..57c1445 --- /dev/null +++ b/printer_data/config/printer-20241208_212004.cfg-old @@ -0,0 +1,162 @@ +#[include mmu/optional/client_macros.cfg] +#[include mmu/addons/dc_espooler.cfg] +#[include mmu/base/CUSTOM_MACROS/*.cfg] +#[include mmu/base/*.cfg] +[include mainsail.cfg] +[include Hardware/*] +[include Macros/*] +[include sensorless_homing.cfg] +#[include KAMP_Settings.cfg] +#[include AFC/*.cfg] + +[virtual_sdcard] +path: ~/printer_data/gcodes +on_error_gcode: PAUSE + +[save_variables] +filename: ~/printer_data/config/saved_variables.cfg +#filename: ~/printer_data/config/mmu/mmu_vars.cfg +[gcode_arcs] +resolution: .4 + +[pause_resume] + +[display_status] + +[exclude_object] + +[force_move] +enable_force_move : True + +[respond] +default_type: echo + +[mcu th] +serial: /dev/ttyS2 +restart_method: command + +[mcu] +serial: /dev/ttyS0 +restart_method: command + +[printer] +kinematics:corexy +max_velocity: 500 +max_accel: 18000 +max_z_velocity: 10 +max_z_accel: 1200 +square_corner_velocity: 8 + +#[duplicate_pin_override] +#pins: AFC:HUB , th:gpio28 , AFC:EXT1 + +#[filament_switch_sensor HUB_Sensor] +#switch_pin: ^AFC:HUB +#pause_on_runout: False +#[filament_switch_sensor Extruder_Sensor] +#switch_pin: th:gpio28 +#pause_on_runout: False +#[filament_switch_sensor Lane1_Sensor] +#switch_pin: ^AFC:EXT1 +#pause_on_runout: False + +[idle_timeout] +# only turn off heaters and motors if the printer is not paused +gcode: + {% if not printer.pause_resume.is_paused %} + TURN_OFF_HEATERS + M84 + {% endif %} +timeout: 6000 + +[skew_correction] + +#[shaketune] +#result_folder: ~/printer_data/config/ShakeTune_results +# The folder where the results will be stored. It will be created if it doesn't exist. +#number_of_results_to_keep: 3 +# The number of results to keep in the result_folder. The oldest results will +# be automatically deleted after each runs. +#keep_raw_csv: False +# If True, the raw CSV files will be kept in the result_folder alongside the +# PNG graphs. If False, they will be deleted and only the graphs will be kept. +#show_macros_in_webui: True +# Mainsail and Fluidd doesn't create buttons for "system" macros that are not in the +# printer.cfg file. If you want to see the macros in the webui, set this to True. +#timeout: 300 +# The maximum time in seconds to let Shake&Tune process the CSV files and generate the graphs. + + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [bed_mesh default] +#*# version = 1 +#*# points = +#*# 0.161250, 0.115208, 0.082187, 0.072240, 0.069948, 0.093958, 0.125833, 0.157656 +#*# 0.113750, 0.067969, 0.030365, 0.023333, 0.023958, 0.049219, 0.090521, 0.142917 +#*# 0.100208, 0.070052, 0.040885, 0.029792, 0.039115, 0.065260, 0.099219, 0.145937 +#*# 0.088698, 0.046042, 0.006875, 0.013229, 0.014323, 0.030729, 0.067865, 0.118906 +#*# 0.084167, 0.049740, 0.011198, -0.000625, 0.011354, 0.029479, 0.047969, 0.088490 +#*# 0.126823, 0.084896, 0.044583, 0.036771, 0.039323, 0.057552, 0.094271, 0.146927 +#*# 0.130104, 0.089583, 0.063385, 0.044687, 0.047760, 0.065104, 0.094062, 0.131406 +#*# 0.140885, 0.105573, 0.067396, 0.047760, 0.058385, 0.092969, 0.126354, 0.159531 +#*# x_count = 8 +#*# y_count = 8 +#*# mesh_x_pps = 2 +#*# mesh_y_pps = 2 +#*# algo = bicubic +#*# tension = 0.2 +#*# min_x = 20.0 +#*# max_x = 230.0 +#*# min_y = 15.0 +#*# max_y = 229.97 +#*# +#*# [probe] +#*# z_offset = 3.150 +#*# +#*# [input_shaper] +#*# shaper_type_x = mzv +#*# shaper_freq_x = 53.2 +#*# shaper_type_y = mzv +#*# shaper_freq_y = 46.6 +#*# +#*# [bed_mesh adaptive] +#*# version = 1 +#*# points = +#*# 0.077812, 0.041927, 0.052917, 0.118750 +#*# 0.035000, -0.002656, 0.012865, 0.083177 +#*# 0.023542, -0.014531, 0.000104, 0.068490 +#*# 0.012552, -0.032292, -0.006667, 0.049896 +#*# x_count = 4 +#*# y_count = 4 +#*# mesh_x_pps = 2 +#*# mesh_y_pps = 2 +#*# algo = bicubic +#*# tension = 0.2 +#*# min_x = 40.9624 +#*# max_x = 204.0124 +#*# min_y = 40.9624 +#*# max_y = 204.01239999999999 +#*# +#*# [heater_bed] +#*# control = pid +#*# pid_kp = 73.449 +#*# pid_ki = 1.564 +#*# pid_kd = 862.113 +#*# +#*# [extruder] +#*# control = pid +#*# pid_kp = 44.527 +#*# pid_ki = 7.812 +#*# pid_kd = 63.451 +#*# +#*# [skew_correction califlower] +#*# xy_skew = -0.0018085021595830163 +#*# xz_skew = 0.0 +#*# yz_skew = 0.0 +#*# +#*# [skew_correction CaliFlower] +#*# xy_skew = -2.220446049250313e-16 +#*# xz_skew = 0.0 +#*# yz_skew = 0.0 diff --git a/printer_data/config/printer.cfg b/printer_data/config/printer.cfg index ac19596..3bdca3c 100644 --- a/printer_data/config/printer.cfg +++ b/printer_data/config/printer.cfg @@ -1,12 +1,12 @@ -#[include mmu/optional/client_macros.cfg] -#[include mmu/addons/dc_espooler.cfg] -#[include mmu/base/CUSTOM_MACROS/*.cfg] -#[include mmu/base/*.cfg] +[include mmu/optional/client_macros.cfg] +[include mmu/addons/dc_espooler.cfg] +[include mmu/base/CUSTOM_MACROS/*.cfg] +[include mmu/base/*.cfg] [include mainsail.cfg] [include Hardware/*] [include Macros/*] [include sensorless_homing.cfg] -[include KAMP_Settings.cfg] +#[include KAMP_Settings.cfg] #[include AFC/*.cfg] [virtual_sdcard] @@ -71,19 +71,19 @@ timeout: 6000 [skew_correction] -[shaketune] -result_folder: ~/printer_data/config/ShakeTune_results +#[shaketune] +#result_folder: ~/printer_data/config/ShakeTune_results # The folder where the results will be stored. It will be created if it doesn't exist. -number_of_results_to_keep: 3 +#number_of_results_to_keep: 3 # The number of results to keep in the result_folder. The oldest results will # be automatically deleted after each runs. -keep_raw_csv: False +#keep_raw_csv: False # If True, the raw CSV files will be kept in the result_folder alongside the # PNG graphs. If False, they will be deleted and only the graphs will be kept. -show_macros_in_webui: True +#show_macros_in_webui: True # Mainsail and Fluidd doesn't create buttons for "system" macros that are not in the # printer.cfg file. If you want to see the macros in the webui, set this to True. -timeout: 300 +#timeout: 300 # The maximum time in seconds to let Shake&Tune process the CSV files and generate the graphs.