#[include kiauh_macros.cfg] # # Klipper configuration file for Anycubic i3 MEGA S # # This config file contains settings of all printer pins (steppers, sensors) for Anycubic i3 mega S in the factory configuration # Klipper firmware should be compiled for the atmega2560 # # Config file includes # - Original or 2208(2209) rotated by cabel drivers # - Mesh bed leveling: BLtouch (3DTouch sensor from Triangelab) # - Manual meshed bed leveling (commented out) # - 'virtual_sdcard' for fast printing without gaps # - Beeper through M300 gcode # - Pause/Resume through M600 for filament change # # Home position is determined by 3DTouch. Z limit switches are not used. # # The latest version of the config reference is also available online at: # https://www.klipper3d.org/Config_Reference.html [mcu] serial =/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 [printer] kinematics = cartesian max_velocity = 400 max_accel = 10000 max_accel_to_decel = 2500 max_z_velocity = 7 max_z_accel = 190 square_corner_velocity = 5 [z_tilt] z_positions: -20,15 80,15 points: 1,120 170,120 speed: 500 horizontal_move_z: 10 retries: 10 retry_tolerance: 0.025 [bed_screws] screw1: 2, 42 screw2: 172, 42 screw3: 2, 204 screw4: 172, 204 #[mcu rpi] #serial: /tmp/klipper_host_mcu #[adxl345] #cs_pin: rpi:None #[resonance_tester] #accel_chip: adxl345 #probe_points: # 100, 100, 20 # an example [stepper_x] step_pin = PF0 dir_pin = !PF1 enable_pin = !PD7 rotation_distance = 40 endstop_pin = ^!PE5 position_min = -5 position_endstop = -5 position_max = 210 homing_speed = 30 homing_retract_dist = 5 second_homing_speed = 10 microsteps = 16 [stepper_y] step_pin = PF6 dir_pin = PF7 enable_pin = !PF2 rotation_distance = 40 endstop_pin = ^!PL7 position_endstop = 0 position_max = 210 homing_speed = 50 homing_retract_dist = 5 second_homing_speed = 10 microsteps = 16 [stepper_z] step_pin = PC1 dir_pin = PL1 enable_pin = !PK0 rotation_distance = 8 position_min: -5 microsteps = 16 ## for 3dtouch. comment for mannual mesh bed leveling endstop_pin = probe:z_virtual_endstop ## uncomment below for manual mesh bed leveling and to enable Z limit switches #endstop_pin = ^!ar18 #position_endstop = 0.0 position_max = 205 homing_speed = 50 homing_retract_dist = 5 second_homing_speed = 3 [stepper_z1] step_pin = PL3 dir_pin = PC3 ## uncomment below for manual mesh bed leveling and to enable Z limit switches #endstop_pin = ^!ar43 enable_pin = !PC7 rotation_distance = 8 microsteps = 16 [extruder] step_pin = PA4 dir_pin = !PA6 enable_pin = !PA2 control = pid ## original extruder stepper motor #rotation_distance = 8.16 ## NEMA17 23mm stepper motor rotation_distance = 7.552 nozzle_diameter = 0.400 filament_diameter = 1.750 heater_pin = PB4 sensor_type = ATC Semitec 104GT-2 sensor_pin = PK5 min_temp = 0 max_temp = 285 max_extrude_only_distance = 150.0 smooth_time = 1 min_extrude_temp = 180 pressure_advance = 0.0526 max_extrude_cross_section = 150 pid_Kp: 15.717 pid_Ki: 0.569 pid_Kd: 108.451 min_temp: 0 max_temp: 300 microsteps = 16 [heater_fan extruder_fan] pin = PL5 [heater_bed] heater_pin: PH5 sensor_type: EPCOS 100K B57560G104F sensor_pin: PK6 control: pid pid_Kp: 61.970 pid_Ki: 4.860 pid_Kd: 197.528 min_temp: 0 max_temp: 150 [fan] pin = PH6 [output_pin BEEPER_pin] pin: PC6 pwm: True value: 0 shutdown_value: 0 cycle_time: 0.001 scale: 1000 ## do your own measurement ## https://www.klipper3d.org/Resonance_Compensation.html [input_shaper] shaper_type_x = 3hump_ei shaper_freq_x = 73.0 shaper_type_y = 3hump_ei shaper_freq_y = 60.0 [heater_fan stepstick_fan] pin = PH4 [bltouch] sensor_pin = ^PE4 control_pin = PB5 ## do your own measurement x_offset = 20 y_offset = -14 z_offset = 0.525 [safe_z_home] home_xy_position = 100,100 speed = 300 z_hop = 5 z_hop_speed = 10 ## bltouch mesh bed leveling [bed_mesh] speed = 1000 horizontal_move_z = 4 mesh_min = 23,28 mesh_max = 190,190 probe_count = 5,5 fade_start = 1.0 fade_end = 10.0 algorithm = bicubic ## manual mesh bed leveling #[bed_mesh] #speed = 50 #horizontal_move_z = 5 #mesh_min = 30,30 #mesh_max = 180,180 #probe_count = 5,5 #fade_start = 1.0 #fade_end = 10.0 # enable moving befor homing ## put in terminal: ## SET_KINEMATIC_POSITION X=100 Y=100 Z=100 ## then move as usual [force_move] enable_force_move: True [virtual_sdcard] path: ~/gcode_files [output_pin BEEPER_pin] pin: PC6 pwm: True value: 0 shutdown_value: 0 cycle_time: 0.001 scale: 1000 [display_status] # change filament [pause_resume] #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [bltouch] #*# z_offset = 1.320 [virtual_sdcard] path: /home/pi/gcode_files [pause_resume] [display_status] [gcode_macro CANCEL_PRINT] description: Cancel the actual running print rename_existing: CANCEL_PRINT_BASE gcode: TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro M600] gcode: {% set X = params.X|default(50)|float %} {% set Y = params.Y|default(0)|float %} {% set Z = params.Z|default(10)|float %} SAVE_GCODE_STATE NAME=M600_state PAUSE G91 G1 E-.8 F2700 G1 Z{Z} G90 G1 X{X} Y{Y} F3000 G91 G1 E-150 F1000 M300 S299 P200 M300 S299 P200 M300 S299 P200 M300 S299 P200 M300 S299 P200 RESTORE_GCODE_STATE NAME=M600_state [gcode_macro PRINT_END] gcode: | M104 S0 ; turn off temperature M140 S0 ; turn off heatbed M107 ; turn off fan g91 G1 Z1 g90 G1 X0 Y180 F3000 ; home X axis M84 ; disable motor BED_MESH_CLEAR [gcode_macro CANCEL_PRINT] description: Cancel the actual running print rename_existing: CANCEL_PRINT_BASE gcode: TURN_OFF_HEATERS CANCEL_PRINT_BASE [gcode_macro M300] gcode: # Use a default 1kHz tone if S is omitted. {% set S = params.S|default(1000)|int %} # Use a 10ms duration is P is omitted. {% set P = params.P|default(100)|int %} SET_PIN PIN=BEEPER_pin VALUE=0.5 CYCLE_TIME={ 1.0/S if S > 0 else 1 } G4 P{P} SET_PIN PIN=BEEPER_pin VALUE=0 [gcode_macro PAUSE] description: Pause the actual running print rename_existing: PAUSE_BASE # change this if you need more or less extrusion variable_extrude: 1.0 gcode: ##### read E from pause macro ##### {% set E = printer["gcode_macro PAUSE"].extrude|float %} ##### set park positon for x and y ##### # default is your max posion from your printer.cfg {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} ##### calculate save lift position ##### {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} ##### end of definitions ##### PAUSE_BASE G91 {% if printer.extruder.can_extrude|lower == 'true' %} G1 E-{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} {% if "xyz" in printer.toolhead.homed_axes %} G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 {% else %} {action_respond_info("Printer not homed")} {% endif %} [gcode_macro RESUME] description: Resume the actual running print rename_existing: RESUME_BASE gcode: ##### read E from pause macro ##### {% set E = printer["gcode_macro PAUSE"].extrude|float %} #### get VELOCITY parameter if specified #### {% if 'VELOCITY' in params|upper %} {% set get_params = ('VELOCITY=' + params.VELOCITY) %} {%else %} {% set get_params = "" %} {% endif %} ##### end of definitions ##### {% if printer.extruder.can_extrude|lower == 'true' %} G91 G1 E{E} F2100 {% else %} {action_respond_info("Extruder not hot enough")} {% endif %} RESUME_BASE {get_params} [gcode_macro PRINT_END] gcode: | M104 S0 ; turn off temperature M140 S0 ; turn off heatbed M107 ; turn off fan g91 G1 Z1 g90 G1 X0 Y180 F3000 ; home X axis M84 ; disable motor BED_MESH_CLEAR [gcode_macro UNLOAD_FILAMENT] gcode: {% if (not(printer.idle_timeout.state == "Printing") or printer.pause_resume.is_paused) %} SAVE_GCODE_STATE NAME=UNLOAD_state M83 ; set extruder to relative G1 E5 F450 ; quick purge G1 E-4 F1800 ; fast retract G1 E-16 F1200 ; retract SLEEP MS=1000 ; wait for filament to cool G1 E-10 F300 ; slow retract purge G1 E-50 F2000 ; load (multiple times to avoid length limit) G1 E-50 F2000 G1 E-50 F2000 G1 E-50 F2000 G1 E-50 F2000 G1 E-50 F2000 G1 E-50 F2000 G1 E-50 F2000 M117 Filament unloaded UPDATE_DELAYED_GCODE ID=SCHEDULE_CLEAR_SCREEN DURATION=5 RESTORE_GCODE_STATE NAME=UNLOAD_state {% else %} { action_respond_info("Filament unloading disabled while printing!") } {% endif %} [gcode_macro BED_MESH_CALIBRATE] rename_existing: BED_MESH_CALIBRATE_BASE ; gcode parameters variable_parameter_AREA_START : 0,0 variable_parameter_AREA_END : 0,0 ; the clearance between print area and probe area variable_mesh_area_offset : 5.0 ; number of sample per probe point variable_probe_samples : 1 ; minimum probe count variable_min_probe_count : 3 ; scale up the probe count, should be 1.0 ~ < variable_max_probe_count/variable_min_probe_count variable_probe_count_scale_factor : 1.0 gcode: {% if params.AREA_START and params.AREA_END %} {% set bedMeshConfig = printer["configfile"].config["bed_mesh"] %} {% set safe_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %} {% set safe_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %} {% set safe_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %} {% set safe_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %} {% set area_min_x = params.AREA_START.split(",")[0]|float %} {% set area_min_y = params.AREA_START.split(",")[1]|float %} {% set area_max_x = params.AREA_END.split(",")[0]|float %} {% set area_max_y = params.AREA_END.split(",")[1]|float %} {% set meshPointX = bedMeshConfig.probe_count.split(",")[0]|int %} {% set meshPointY = bedMeshConfig.probe_count.split(",")[1]|int %} {% set meshMaxPointX = meshPointX %} {% set meshMaxPointY = meshPointY %} {% if (area_min_x < area_max_x) and (area_min_y < area_max_y) %} {% if area_min_x - mesh_area_offset >= safe_min_x %} {% set area_min_x = area_min_x - mesh_area_offset %} {% else %} {% set area_min_x = safe_min_x %} {% endif %} {% if area_min_y - mesh_area_offset >= safe_min_y %} {% set area_min_y = area_min_y - mesh_area_offset %} {% else %} {% set area_min_y = safe_min_y %} {% endif %} {% if area_max_x + mesh_area_offset <= safe_max_x %} {% set area_max_x = area_max_x + mesh_area_offset %} {% else %} {% set area_max_x = safe_max_x %} {% endif %} {% if area_max_y + mesh_area_offset <= safe_max_y %} {% set area_max_y = area_max_y + mesh_area_offset %} {% else %} {% set area_max_y = safe_max_y %} {% endif %} {% set meshPointX = (meshPointX * (area_max_x - area_min_x) / (safe_max_x - safe_min_x) * probe_count_scale_factor)|round(0)|int %} {% if meshPointX < min_probe_count %} {% set meshPointX = min_probe_count %} {% endif %} {% if meshPointX > meshMaxPointX %} {% set meshPointX = meshMaxPointX %} {% endif %} {% set meshPointY = (meshPointY * (area_max_y -area_min_y ) / (safe_max_y - safe_min_y) * probe_count_scale_factor )|round(0)|int %} {% if meshPointY < min_probe_count %} {% set meshPointY = min_probe_count %} {% endif %} {% if meshPointY > meshMaxPointY %} {% set meshPointY = meshMaxPointY %} {% endif %} BED_MESH_CALIBRATE_BASE mesh_min={area_min_x},{area_min_y} mesh_max={area_max_x},{area_max_y} probe_count={meshPointX},{meshPointY} samples={probe_samples|int} {% else %} BED_MESH_CALIBRATE_BASE {% endif %} {% else %} BED_MESH_CALIBRATE_BASE {% endif %} [gcode_macro PA_CALIBRATE] gcode: ###################################################################################### #### DEFINE USER PARAMETERS ### ###################################################################################### ###############################[ set printer parameters ]############################# {% set nozzle_diameter = printer.configfile.config.extruder.nozzle_diameter | float %} {% set bed_size_x = 218 | float %} {% set bed_size_y = 181 | float %} {% set retract = 0.4 | float %} {% set retract_speed = 40 * 60 | float %} ######################[ set parameters for extrusion calculation ]#################### {% set filament_diameter = params.FD | default(1.75) | float %} {% set layer_height = params.LH | default(0.2) | float %} {% set nozzle_line_ratio = params.EW | default(1.2) | float %} {% set extrusion_multiplier = params.EM | default(1.0) | float %} ################################[ set temperatures ]################################## {% set bed_temp = params.TBED | default(60) %} {% set extruder_temp = params.TEX | default(185) %} ###############################[ set test parameters ]################################ {% set slow_speed = params.SLOW_SPEED | default(25) | float %} {% set slow_length = params.SLOW_LENGTH | default(20) | float %} {% set fast_speed = params.FAST_SPEED | default(80) | float %} {% set fast_length = params.FAST_LENGTH | default(40) | float %} {% set travel_speed = params.TRAVEL_SPEED | default(180) | float %} {% set pa_start = params.PA_START | default(0.0) | float %} {% set pa_end = params.PA_END | default(0.25) | float %} {% set pa_step = params.PA_STEP | default(0.01) | float %} {% set line_spacing = params.SPACING | default(5) | float %} ###################################################################################### #### !!! DO NOT EDIT BELOW !!! ### ###################################################################################### {% set spacing = line_spacing %} {% set fd = filament_diameter %} {% set nd = nozzle_diameter %} {% set ew = nozzle_diameter * nozzle_line_ratio %} {% set em = extrusion_multiplier %} {% set lh = layer_height %} {% set pa = pa_start %} ##################################[ calculations ]#################################### {% set slow_speed = slow_speed * 60 | float %} {% set fast_speed = fast_speed * 60 | float %} {% set travel_speed = travel_speed * 60 | float %} {% set lines = (((pa_end - pa_start) / pa_step) + 1) | round(0, 'ceil') | int %} {% set p_width = ((2 * slow_length + fast_length)) %} {% set p_height = (lines * (spacing + (nd * ew))) %} {% set p_width_total = p_width + 20 %} {% set p_height_total = p_height + 40 %} {% set start_x_pos = (bed_size_x - p_width) / 2 %} {% set end_x_pos = (bed_size_x + p_width) / 2 %} {% set start_y_pos = (bed_size_y - p_height) / 2 %} {% set end_y_pos = (bed_size_y + p_height) / 2 %} {% set x_pos = start_x_pos %} {% set y_pos = start_y_pos %} ########################[ check if test patter fits on bed ]########################## {% if p_height_total > bed_size_y or p_width_total > bed_size_x %} {% set exceeds_bed_area = true %} {% else %} {% set exceeds_bed_area = false %} {% endif %} ###################################################################################### ### Using Slic3r flow math to calculate extrusion amounts: ### ###################################################################################### ### V_in = (pi * fd ** 2) / 4 * E ### ### V_out = A * L * em ### ### V_in = V_out ### ### A = (ew - lh) * lh + pi * (lh / 2) ** 2 ### ### E = ((A * L * 4) / (pi * fd ** 2)) * em ### ###################################################################################### {% set pi = 3.141592654 | float %} {% set A = (ew - lh) * lh + pi * (lh / 2) ** 2 | float %} {% set E_prime = (((A * p_height * 4) / (pi * fd ** 2)) * 1.6) | round(6, 'ceil') %} {% set E_slow = (((A * slow_length * 4) / (pi * fd ** 2)) * em) | round(6, 'ceil') %} {% set E_fast = (((A * fast_length * 4) / (pi * fd ** 2)) * em) | round(6, 'ceil') %} {% set E_mark = (((A * 20 * 4) / (pi * fd ** 2)) * em) | round(6, 'ceil') %} ###################################################################################### ### START CALIBRATION ### M190 S{ bed_temp } M109 S{ extruder_temp } G28 ### PRIME NOZZLE ### M83 ; set relative extrusion mode G1 X{ x_pos - 10 } Y{ y_pos } F{ travel_speed } ; move to prime line start G1 Z{ layer_height } ; move Z down G1 Y{ y_pos + p_height } E{ E_prime } F { slow_speed } ; print first prime line G1 X{ x_pos - 5 } F{ travel_speed } ; move to second prime line start G1 Y{ y_pos } E{ E_prime } F { slow_speed } ; print second prime line G92 E0 ### START TEST PATTERN ### SET_PRESSURE_ADVANCE EXTRUDER=extruder ADVANCE={ pa } {% for i in range(lines) %} {% if not loop.first %} {% set y_pos = y_pos + (i * (spacing + ew)) %} {% set pa = pa + (i * pa_step) %} SET_PRESSURE_ADVANCE EXTRUDER=extruder ADVANCE={ pa } {% endif %} M117 PA={ pa } ### move to line starting postion G1 X{ x_pos } Y{ y_pos } F{ travel_speed } G1 E{ retract } F{ retract_speed } ; un-retract ### print first slow part {% set x_pos = x_pos + slow_length %} G1 X{ x_pos } Y{ y_pos } E{ E_slow } F{ slow_speed } ### print fast part {% set x_pos = x_pos + fast_length %} G1 X{ x_pos } Y{ y_pos } E{ E_fast } F{ fast_speed } ### print second slow part {% set x_pos = x_pos + slow_length %} G1 X{ x_pos } Y{ y_pos } E{ E_slow } F{ slow_speed } G1 E-{ retract } F{ retract_speed } ; retract ### reset x position {% set x_pos = start_x_pos %} {% endfor %} ### PRINT MARKER ### G1 E-{ retract } F{ retract_speed } ; retract G1 X{ x_pos + slow_length } Y{ end_y_pos + 5 } F{ travel_speed } ; move to position marker 1 G1 E{ retract } F{ retract_speed } ; un-retract G1 Y{ end_y_pos + 5 + 20 } E{ E_mark } F{ slow_speed } ; print marker 1 G1 E-{ retract } F{ retract_speed } ; retract G1 X{ x_pos + slow_length + fast_length } Y{ end_y_pos + 5 } F{ travel_speed } ; move to position marker 2 G1 E{ retract } F{ retract_speed } ; un-retract G1 Y{ end_y_pos + 5 + 20 } E{ E_mark } F{ slow_speed } ; print marker 2 G1 E-{ retract } F{ retract_speed } ; retract ### END CALIBRATION ### TURN_OFF_HEATERS G1 Z5 G1 X10 Y{ bed_size_y - 5 } F{ travel_speed } ;//TODO: maybe move to "max toolhead position - 5" M84 [gcode_macro LOAD_FILAMENT] gcode: | {% if (not(printer.idle_timeout.state == "Printing") or printer.pause_resume.is_paused) %} SAVE_GCODE_STATE NAME=LOAD_state M117 Loading filament.. M83 ; set extruder to relative G1 E50 F300 ; load (multiple times to avoid length limit) G1 E50 F2000 G1 E50 F2000 G1 E50 F2000 G1 E50 F2000 G1 E50 F2000 G1 E50 F1000 G1 E50 F300 G1 E10 F300 G1 E-1 F300 ; short retract M117 Filament loaded UPDATE_DELAYED_GCODE ID=SCHEDULE_CLEAR_SCREEN DURATION=5 RESTORE_GCODE_STATE NAME=LOAD_state {% else %} { action_respond_info("Filament loading disabled while printing!") } {% endif %} #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# #*# [bed_mesh default] #*# version = 1 #*# points = #*# 0.320000, 0.142500, -0.041250 #*# 0.322500, 0.152500, -0.040000 #*# 0.340000, 0.161250, -0.027500 #*# tension = 0.2 #*# min_x = 87.04 #*# algo = lagrange #*# y_count = 3 #*# mesh_y_pps = 2 #*# min_y = 87.04 #*# x_count = 3 #*# max_y = 122.95 #*# mesh_x_pps = 2 #*# max_x = 122.95