diff --git a/printer.cfg b/printer.cfg new file mode 100644 index 0000000..d87ed52 --- /dev/null +++ b/printer.cfg @@ -0,0 +1,797 @@ +# Auto-generated on 2026-01-09T14:20:19 | printer_model: n4pro | current: 1.2 + +#---------------------------------------------------------------------------- +# ____ _ __ __ ____ +# / __ \___ ___ ___ / |/ /__ ___ / /_/ / /__ _____ ___ +# / /_/ / _ \/ -_) _ \/ / -_) _ \/ __/_ _/ // / _ \/ -_) +# \____/ .__/\__/_//_/_/|_/\__/ .__/\__/ /_/ \_,_/_//_/\__/ +# /_/ /_/ +#---------------------------------------------------------------------------- +; Neptune 4 Series Custom Image by (OpenNeptune3D/OpenNept4une): +#---------------------------------------------------------------------------- +; Wiki : https://github.com/OpenNeptune3D/OpenNept4une/wiki +; Discord : https://discord.com/invite/X6kwchT6WM + +############################################################################# +# External Config Includes +############################################################################# +[include mainsail.cfg] ; mainsail runs on port 81 (http://IP_ADDRESS:81) +[include fluidd.cfg] +[include KAMP_Settings.cfg] +[include ./KAMP/Smart_Park.cfg] +[include ./KAMP/Line_Purge.cfg] +#[include klipper_debug.cfg] +#[include adxl.cfg] ; Comment this out when you disconnect the Pico/MellowFly + +############################################################################# +# Base Config +############################################################################# + +[mcu] +serial: /dev/ttyS0 ; The hardware use USART1 PA10/PA9 connect to RK3328 +baud: 250000 +restart_method: command + +[printer] +kinematics:cartesian +max_velocity: 250 +max_accel: 3000 +max_z_velocity: 8 +max_z_accel: 120 +square_corner_velocity: 5.0 +minimum_cruise_ratio: 0.0 + +[respond] +[gcode_arcs] +[pause_resume] +[display_status] +[exclude_object] +[firmware_retraction] +[virtual_sdcard] +path: ~/printer_data/gcodes +[force_move] +enable_force_move : True +[idle_timeout] +timeout: 2100 ; 35min idle timeout (when not paused or printing) + +############################################################################# +# Print Start & End Macros +############################################################################# + +[gcode_macro PRINT_START] +variable_small_print: False +variable_outer_bed_force_activation_temp: 80 +variable_force_outer_bed_heater: False + +gcode: + Frame_Light_ON + Part_Light_ON + G92 E0 + G90 ; Use absolute coordinates + BED_MESH_CLEAR + + {% set BED_TEMP = params.BED_TEMP|default(60)|float %} + {% set BED_HEAT_SOAK_MINUTES = params.BED_HEAT_SOAK_MINUTES|default(0)|float %} + {% set BED_MESH = params.BED_MESH|default('adaptive')|string %} ; One of: adaptive (default), full, default (or any other value as the bed mesh profile name), none + {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %} + + {% set area_start = params.AREA_START|default('0,0')|string %} + {% set area_end = params.AREA_END|default('0,0')|string %} + + {% set start_coords = area_start.split(',')|map('float')|list %} + {% set end_coords = area_end.split(',')|map('float')|list %} + + {% set center_min_x = 62.5 %} ; define centre area bounds + {% set center_min_y = 62.5 %} + {% set center_max_x = 172.5 %} + {% set center_max_y = 172.5 %} + + ; Check if print is within center area + {% if start_coords[0] >= center_min_x and start_coords[1] >= center_min_y and end_coords[0] <= center_max_x and end_coords[1] <= center_max_y %} + SET_GCODE_VARIABLE MACRO=PRINT_START VARIABLE=small_print VALUE=True + {% else %} ; print extends beyond center, set temperatures for both beds + SET_GCODE_VARIABLE MACRO=PRINT_START VARIABLE=small_print VALUE=False + {% endif %} + + # If the bed is particularly hot, use both heaters in any case, wether it is a small print or not + {% if BED_TEMP >= outer_bed_force_activation_temp %} + SET_GCODE_VARIABLE MACRO=PRINT_START VARIABLE=force_outer_bed_heater VALUE=True + {% else %} + # Print extends beyond center, set temperatures for both beds + SET_GCODE_VARIABLE MACRO=PRINT_START VARIABLE=force_outer_bed_heater VALUE=False + {% endif %} + + SET_BED_TEMPERATURE TARGET={BED_TEMP} ; Heat Bed to target temp + BED_TEMPERATURE_WAIT MINIMUM={BED_TEMP-2} MAXIMUM={BED_TEMP+4} ; Waits until the bed reaches close to target + {% if BED_HEAT_SOAK_MINUTES > 0 %} + RESPOND MSG="Waiting {BED_HEAT_SOAK_MINUTES} minutes for the bed to settle." + G4 P{BED_HEAT_SOAK_MINUTES * 60000} + {% endif %} + + CG28 + + {% if BED_MESH == 'full' %} + BED_MESH_CALIBRATE + {% elif BED_MESH == 'adaptive' %} + BED_MESH_CALIBRATE ADAPTIVE=1 + {% elif BED_MESH != 'none' %} + BED_MESH_PROFILE LOAD={BED_MESH} + {% endif %} + Smart_Park + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 + SET_HEATER_TEMPERATURE HEATER=extruder TARGET={EXTRUDER_TEMP} ; Set and heat the final extruder temperature + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={EXTRUDER_TEMP-4} MAXIMUM={EXTRUDER_TEMP+10} ; Wait for extruder to reach near target temperature + LINE_PURGE ; KAMP Line Purge near print + G92 E0 ; Reset Extruder + G1 Z2.0 F3000 ; Move Z Axis up + M117 Printing + +[gcode_macro PRINT_END] +gcode: + Frame_Light_OFF + Part_Light_OFF + M400 ; wait for buffer to clear + TURN_OFF_HEATERS + G92 E0 ; zero the extruder + G91 ; Relative positioning + G1 E-2 F2700 ; Retract a bit + G1 X5 Y5 F3000 ; Wipe out + G1 E-2 Z0.2 F1600 ; Retract and raise Z + G1 Z4 F3000 ; Raise Z more + G90 ; Absolute positioning + G1 X0 Y230 ; Present print + M107 ; turn off fan + M84 ; turn off steppers + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 + M117 + END_TUNE ; Print End Beeper Jingle + +############################################################################# +# Pause, Resume & Cancel Macros +############################################################################# + +[gcode_macro PAUSE] +rename_existing: BASE_PAUSE +gcode: + PAUSE_TUNE + {% set z = params.Z|default(30)|int %} + {% if printer['pause_resume'].is_paused|int == 0 %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target|default(220)} + # Store current extruder temperature before cooling + SET_GCODE_VARIABLE MACRO=LOAD_FILAMENT VARIABLE=prev_temp VALUE={printer['extruder'].target|default(220)} + SET_GCODE_VARIABLE MACRO=UNLOAD_FILAMENT VARIABLE=prev_temp VALUE={printer['extruder'].target|default(220)} + # Store Z-hop value for RESUME + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 + SAVE_GCODE_STATE NAME=PAUSE + BASE_PAUSE + G91 + {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} + G1 E-2 F2700 + G1 X3 Y3 F3000 + G1 E-2 Z{z} F1600 + SAVE_GCODE_STATE NAME=ZLIFT + {% else %} + { action_respond_info("Pause zhop exceeds maximum Z height.") } + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 + G1 E-2 F2700 + G1 X3 Y3 F3000 + G1 E-2 F1600 + SAVE_GCODE_STATE NAME=ZLIFT + {% endif %} + G90 + G1 X{printer.toolhead.axis_minimum.x+5} Y{printer.toolhead.axis_maximum.y-5} F6000 + SAVE_GCODE_STATE NAME=PAUSEPARK + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=175 + SET_IDLE_TIMEOUT TIMEOUT=43200 + {% endif %} + +[gcode_macro RESUME] +rename_existing: BASE_RESUME +variable_zhop: 0 +variable_etemp: 0 +gcode: + {% if printer['pause_resume'].is_paused|int == 1 %} + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 ; enable filament sensor + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value + {% if etemp > 0 %} + SET_HEATER_TEMPERATURE HEATER=extruder TARGET={etemp|int} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={etemp|int - 4} MAXIMUM={etemp|int + 10} ; wait for hotend to heat back up to print temp + {% endif %} + RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 ; go back to park position in case toolhead was moved during pause ; enable extruder stepper motor + G91 ; relative positioning + M83 ; set extruder to relative mode + G1 E80 F200 ; extrude 80mm of filament to prime the nozzle + G4 P2000 ; wait for 2 seconds to stabilise pressure + G1 X20 F15000 ; wiggle movement to ensure free movement of purge + G1 X-20 + G1 X20 + G1 X-20 + G1 X20 + G1 X-20 + RESTORE_GCODE_STATE NAME=ZLIFT MOVE=1 MOVE_SPEED=60 ; restore to the zlift position above the print + G1 X-3 Y-3 F3000 ; Undo the pause Wipe out + G1 Z{zhop * -1} F900 + RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 ; restore to the paused position (lowers to final print location) + M400 ; wait for all moves to complete + BASE_RESUME ; resume print + {% endif %} + +[gcode_macro CANCEL_PRINT] +rename_existing: BASE_CANCEL_PRINT +gcode: + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value + CLEAR_PAUSE + SDCARD_RESET_FILE + PRINT_END + BASE_CANCEL_PRINT + +############################################################################# +# Filament Sensor & Change Macros +############################################################################# + +[filament_switch_sensor filament_sensor] +pause_on_runout: True +insert_gcode: + M117 Insert Detected +runout_gcode: + M117 Runout Detected + SET_GCODE_VARIABLE MACRO=UNLOAD_FILAMENT VARIABLE=prev_temp VALUE={printer.extruder.target|int} + UNLOAD_FILAMENT +event_delay: 3.0 +pause_delay: 1.0 +switch_pin: PA12 + +[delayed_gcode DISABLE_FILAMENT_SENSOR] +initial_duration: 1 +gcode: + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 + +[gcode_macro M600] +description: Pause for colour change +gcode: + PAUSE + +[gcode_macro LOAD_FILAMENT] +variable_prev_temp: 0 +variable_load_distance: 25 +variable_purge_distance: 75 +gcode: + {% + # pick the first non-zero value: prev_temp → current target → 220 + set target_temp = prev_temp|int or printer.extruder.target|round(0) or 220 + %} + {% if prev_temp|int == 0 and printer.extruder.target|round(0) == 0 %} + RESPOND PREFIX="LOAD_FILAMENT" MSG="No temp set — defaulting to {target_temp}°C" + {% endif %} + SET_HEATER_TEMPERATURE HEATER=extruder TARGET={target_temp} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={target_temp - 4} MAXIMUM={target_temp + 40} + {% set speed = params.SPEED|default(300) %} + {% set max_vel = printer.configfile.settings.extruder.max_extrude_only_velocity * 30 %} + SAVE_GCODE_STATE NAME=load_state + G91 + G92 E0 + G1 E{load_distance} F{max_vel} + G1 E{purge_distance} F{speed} + RESTORE_GCODE_STATE NAME=load_state + +[gcode_macro UNLOAD_FILAMENT] +variable_prev_temp: 0 +variable_unload_distance: 75 +variable_purge_distance: 15 +gcode: + {% + set target_temp = prev_temp|int or printer.extruder.target|round(0) or 220 + %} + {% if prev_temp|int == 0 and printer.extruder.target|round(0) == 0 %} + RESPOND PREFIX="UNLOAD_FILAMENT" MSG="No temp set — defaulting to {target_temp}°C" + {% endif %} + SET_HEATER_TEMPERATURE HEATER=extruder TARGET={target_temp} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={target_temp - 4} MAXIMUM={target_temp + 40} + {% set speed = params.SPEED|default(300) %} + {% set max_vel = printer.configfile.settings.extruder.max_extrude_only_velocity * 30 %} + SAVE_GCODE_STATE NAME=unload_state + G91 + G92 E0 + G1 E{purge_distance} F{speed} + G1 E-{unload_distance} F{max_vel} + RESTORE_GCODE_STATE NAME=unload_state + {% if printer['pause_resume'].is_paused|int == 1 %} + G4 P3000 ; wait 3 s before cooling + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=175 + {% endif %} + +############################################################################# +# X/Y/Z Stepper Config +############################################################################# + +[stepper_x] +step_pin: PC14 +dir_pin: PC13 +enable_pin: !PC15 +microsteps: 16 +rotation_distance: 40 +full_steps_per_rotation:200 ; set to 400 for 0.9 degree stepper +endstop_pin: PC0 +position_min: -6.5 +position_endstop: -6.5 +position_max: 235 +homing_speed: 50 +homing_retract_dist: 5 +homing_positive_dir: false + +[stepper_y] +step_pin: PB4 +dir_pin: PB3 +enable_pin: !PB5 +microsteps: 16 +rotation_distance: 40 +full_steps_per_rotation:200 ; set to 400 for 0.9 degree stepper +endstop_pin: PB8 +position_min: -2 +position_endstop: -2 +position_max: 235 +homing_speed:50 +homing_retract_dist: 5 +homing_positive_dir:false + +[stepper_z] +step_pin: PC10 +dir_pin: !PA15 +enable_pin: !PC11 +microsteps: 16 +rotation_distance: 8 +full_steps_per_rotation: 200 +endstop_pin:probe:z_virtual_endstop +position_max: 268 +position_min: -5 +homing_speed: 8 +second_homing_speed: 3 +homing_retract_dist: 5 + +############################################################################# +# TMC Stepper-driver UART Config +############################################################################# + +[tmc2209 stepper_x] +uart_pin: PB9 +run_current: 1.2 +interpolate: True +stealthchop_threshold: 999999 + +[tmc2209 stepper_y] +uart_pin: PD2 +run_current: 1.2 +interpolate: True +stealthchop_threshold: 999999 + +[tmc2209 stepper_z] +uart_pin: PC5 +run_current: 0.8 +interpolate: True + +[tmc2209 extruder] +uart_pin: PC4 +run_current: 0.9 +interpolate: false + +############################################################################# +# Extruder Config +############################################################################# + +[extruder] +step_pin:PA5 +dir_pin:!PA6 +enable_pin:!PA4 +microsteps: 16 +rotation_distance: 28.888 ; 31.4 Bondtech 5mm Drive Gears +gear_ratio: 52:10 +full_steps_per_rotation: 200 ; 200 for 1.8 degree, 400 for 0.9 degree +nozzle_diameter: 0.400 +filament_diameter: 1.750 +min_temp: 0 +max_temp: 330 +heater_pin: PA7 +sensor_type:NTC 100K MGB18-104F39050L32 +sensor_pin: PA1 +max_power: 1 +control = pid +pid_kp = 25.825 +pid_ki = 1.979 +pid_kd = 84.254 +pressure_advance: 0.02725 +pressure_advance_smooth_time: 0.02 +max_extrude_cross_section: 5 ; standard klipper default 4* (NozzleDiam^2) +instantaneous_corner_velocity: 5.0 +max_extrude_only_distance: 100 +max_extrude_only_velocity:45 +max_extrude_only_accel:2000 +step_pulse_duration:0.000002 + +[verify_heater extruder] +max_error: 120 +check_gain_time: 30 +hysteresis: 10 +heating_gain: 2 + +############################################################################# +# Bed Heater Config +############################################################################# + +[heater_bed] +heater_pin:PB10 +sensor_type: NTC 100K MGB18-104F39050L32 +sensor_pin: PA0 +max_power: 1.0 +control = pid +pid_kp = 68.601 +pid_ki = 1.550 +pid_kd = 758.895 +min_temp: 0 +max_temp: 120 +pwm_cycle_time: 0.3 + +[verify_heater heater_bed] +max_error: 120 +check_gain_time: 120 +hysteresis: 10 +heating_gain: 1 + +##################################################################### +# Outer Bed Heater Config +##################################################################### + +[heater_generic heater_bed_outer] +heater_pin:PC8 +max_power:1.0 +sensor_type: NTC 100K MGB18-104F39050L32 +sensor_pin:PC2 +control = pid +pid_kp = 75.301 +pid_ki = 1.383 +pid_kd = 1025.032 +min_temp:0 +max_temp:120 +pwm_cycle_time: 0.3 + +[verify_heater heater_bed_outer] ; heating bed temperature tolerance configuration +max_error: 600 ; maximum error +check_gain_time:120 ; tolerance time +hysteresis: 10 ; tolerance temperature +heating_gain: 1 ; heating gain + +[gcode_macro SET_BED_TEMPERATURE] ; macros for innner & outer bed temperature depending on the print size +gcode: + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={params.TARGET} + {% if printer["gcode_macro PRINT_START"].force_outer_bed_heater or not printer["gcode_macro PRINT_START"].small_print %} + SET_HEATER_TEMPERATURE HEATER=heater_bed_outer TARGET={params.TARGET} + {% endif %} + +[gcode_macro BED_TEMPERATURE_WAIT] +gcode: + {% if params.MINIMUM is defined and params.MAXIMUM is defined %} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={params.MINIMUM} MAXIMUM={params.MAXIMUM} + {% if printer["gcode_macro PRINT_START"].force_outer_bed_heater or not printer["gcode_macro PRINT_START"].small_print %} + TEMPERATURE_WAIT SENSOR="heater_generic heater_bed_outer" MINIMUM={params.MINIMUM} MAXIMUM={params.MAXIMUM} + {% endif %} + {% elif params.MINIMUM is defined %} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={params.MINIMUM} + {% if printer["gcode_macro PRINT_START"].force_outer_bed_heater or not printer["gcode_macro PRINT_START"].small_print %} + TEMPERATURE_WAIT SENSOR="heater_generic heater_bed_outer" MINIMUM={params.MINIMUM} + {% endif %} + {% elif params.MAXIMUM is defined %} + TEMPERATURE_WAIT SENSOR=heater_bed MAXIMUM={params.MAXIMUM} + {% if printer["gcode_macro PRINT_START"].force_outer_bed_heater or not printer["gcode_macro PRINT_START"].small_print %} + TEMPERATURE_WAIT SENSOR="heater_generic heater_bed_outer" MAXIMUM={params.MAXIMUM} + {% endif %} + {% else %} + RESPOND TYPE=error MSG="Error on 'BED_TEMPERATURE_WAIT': missing MINIMUM or MAXIMUM." + {% endif %} + +[gcode_macro M140] ; redefine the existing M140 +rename_existing: M99140 +gcode: + {% if params.S is defined %} + SET_BED_TEMPERATURE TARGET={params.S|int} + {% endif %} + +[gcode_macro M141] +gcode: + {% if params.S is defined %} + SET_HEATER_TEMPERATURE HEATER=heater_bed_outer TARGET={params.S|int} + {% endif %} + +[gcode_macro M190] +rename_existing: M99190 +gcode: + {% if params.S is defined %} + SET_BED_TEMPERATURE TARGET={params.S|int} + BED_TEMPERATURE_WAIT MINIMUM={(params.S|int)-2} MAXIMUM={(params.S|int)+4} + {% endif %} + +[gcode_macro M191] +gcode: + {% if params.S is defined %} + SET_HEATER_TEMPERATURE HEATER=heater_bed_outer TARGET={params.S|int} + TEMPERATURE_WAIT SENSOR="heater_generic heater_bed_outer" MINIMUM={(params.S|int)-2} MAXIMUM={(params.S|int)+4} + {% endif %} + +############################################################################# +# Probe Config +############################################################################# + +[probe] +pin:^PA11 +x_offset: -24.25 +y_offset: 20.45 +#z_offset = 0.0 +speed: 6.0 +samples: 3 +samples_result: median +sample_retract_dist: 3.0 +samples_tolerance: 0.025 +samples_tolerance_retries: 3 + +[bed_mesh] +speed:150 +horizontal_move_z:5 +mesh_min: 10,21 +mesh_max: 210,211 +probe_count:11,11 +algorithm:bicubic +bicubic_tension:0.2 +mesh_pps: 4, 4 +fade_start: 1.0 +fade_end: 10.0 + +############################################################################# +# LED Config +############################################################################# + +[output_pin Frame_Light] +pin: PB7 + +[output_pin Part_Light] +pin: PC7 + +[gcode_macro Frame_Light_ON] +gcode: + SET_PIN PIN=Frame_Light VALUE=1 + +[gcode_macro Frame_Light_OFF] +gcode: + SET_PIN PIN=Frame_Light VALUE=0 + +[gcode_macro Part_Light_ON] +gcode: + SET_PIN PIN=Part_Light VALUE=1 + +[gcode_macro Part_Light_OFF] +gcode: + SET_PIN PIN=Part_Light VALUE=0 + +############################################################################# +# Beeper Config +############################################################################# + +[pwm_cycle_time beeper] +pin: PA2 +value: 0 +shutdown_value: 0 +cycle_time: 0.0005 ; Default PWM frequency: 2 kHz + +[gcode_macro M300] +gcode: + {% set S = params.S|default(2000)|int %} ; Set frequency (S), default to 2 kHz if omitted or invalid + {% set P = params.P|default(100)|int %} ; Set duration (P), default to 100ms if omitted or invalid + SET_PIN PIN=beeper VALUE=0.8 CYCLE_TIME={ 1.0/S if S > 0 else 1 } ; Activate the beeper at a 80% duty cycle + G4 P{P} ; Hold the beep for the specified duration + SET_PIN PIN=beeper VALUE=0 ; Turn off the beeper + +[gcode_macro PAUSE_TUNE] +gcode: + M300 S784 P300 + M300 S587 P600 + +[gcode_macro END_TUNE] +gcode: + M300 S392 P250 + M300 S494 P250 + M300 S587 P250 + M300 S523 P300 + +############################################################################# +# Fan & Temp Monitoring Config +############################################################################# + +[fan] +pin: PC9 + +[controller_fan heatbreak+mainboard_fan] +pin: PA8 +fan_speed: 1.0 +idle_speed: 0.5 +idle_timeout: 43200 ; 50% speed for 12h then OFF +shutdown_speed: 1 +heater: extruder, heater_bed, heater_bed_outer +stepper: stepper_x, stepper_y, stepper_z, extruder + +[delayed_gcode start_fan_at_idle_speed] +initial_duration: 5. ; 5s wait after boot +gcode: + # Gcode Hack to trigger the mainboard fan from printer boot + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=1 ; bed heat to 1degC + G4 P2000 ; wait 2s + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=0 ; bed heat off + +[temperature_sensor RockchipHost] +sensor_type: temperature_host +min_temp: 10 +max_temp: 80 + +[temperature_sensor STM32MCU] +sensor_type: temperature_mcu +min_temp: 10 +max_temp: 85 + +############################################################################# +# Homing & Levelling Config/Macros +############################################################################# + +[gcode_macro CG28] +gcode: + {% if "xyz" not in printer.toolhead.homed_axes %} + G28 + {% else %} + {% endif %} + +[safe_z_home] +home_xy_position: 141.75,97.05 +speed: 100 +z_hop: 10 +z_hop_speed: 5 + +[axis_twist_compensation] +calibrate_start_x: 30 +calibrate_end_x: 210 +calibrate_y: 117.5 + +[gcode_macro Axis_Twist_Comp_Tune] +gcode: + CG28 + AXIS_TWIST_COMPENSATION_CALIBRATE + +[screws_tilt_adjust] +screw1: 56.75, 182.05 +screw1_name: rear left screw +screw2: 56.75, 12.05 +screw2_name: front left screw +screw3: 226.75, 12.05 +screw3_name: front right screw +screw4: 226.75, 182.05 +screw4_name: rear right screw +horizontal_move_z: 5 +speed: 150 +screw_thread: CW-M4 + +[gcode_macro Bed_Level_Screws_Tune] +gcode: + BED_MESH_CLEAR + {% set current = printer.heater_bed.target|round(0) %} + {% set target = current or 60 %} + {% if current == 0 %} + RESPOND PREFIX="Bed_Level_Screws_Tune" MSG="No bed target, heating to {target} °C" + SET_BED_TEMPERATURE TARGET={target} + {% else %} + RESPOND PREFIX="Bed_Level_Screws_Tune" MSG="Waiting for bed to reach {target} °C" + {% endif %} + BED_TEMPERATURE_WAIT MINIMUM={target - 2} MAXIMUM={target + 5} + CG28 + SCREWS_TILT_CALCULATE + +[gcode_macro Calibrate_Probe_Z_Offset] +gcode: + CG28 + PROBE_CALIBRATE + +[gcode_macro Auto_Full_Bed_Level] +gcode: + RESPOND PREFIX="info" MSG="Running Custom Bed Leveling Macro" + BED_MESH_CLEAR + SET_BED_TEMPERATURE TARGET=60 + BED_TEMPERATURE_WAIT MINIMUM=58 MAXIMUM=65 + CG28 + BED_MESH_CALIBRATE + +############################################################################# +# PID Tuning Macros +############################################################################# + +[gcode_macro PID_Tune_EXTRUDER] +gcode: + {% set temperature = params.TEMPERATURE|default(210) %} + CG28 + M106 S255 + PID_CALIBRATE HEATER=extruder TARGET={temperature} + SAVE_CONFIG + +[gcode_macro PID_Tune_BED] +gcode: + {% set temperature = params.TEMPERATURE|default(60) %} + CG28 + M106 S255 ;Sets Print Fans to 100% + PID_CALIBRATE HEATER=heater_bed TARGET={temperature} + SAVE_CONFIG + +[gcode_macro PID_Tune_Outer_BED] +gcode: + {% set temperature = params.TEMPERATURE|default(60) %} + G28 + M106 S255 ;Sets Print Fans to 100% + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={temperature} ;Heats Inner Zone at the same time for better tuning + PID_CALIBRATE HEATER=heater_bed_outer TARGET={temperature} + SAVE_CONFIG + +############################################################################# +# SPI Accelerometer Config +############################################################################# + +[mcu rpi] +serial: /tmp/klipper_host_mcu + +#[adxl345] +#cs_pin: rpi:None +#spi_bus: spidev0.2 + +#[resonance_tester] +#accel_chip: adxl345 +#probe_points: +# 100, 100, 20 + +############################################################################# +# Input Shaper Config +############################################################################# + +[input_shaper] +shaper_type_x: mzv +shaper_freq_x: 111.6 +shaper_type_y: mzv +shaper_freq_y: 32.4 + +############################################################################# + +[include user_settings.cfg] ; Users custom macros + + +############################################################################# + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [bed_mesh default] +#*# version = 1 +#*# points = +#*# 0.060000, 0.040000, 0.035000, 0.032500, 0.032500, 0.047500, 0.057500, 0.075000, 0.087500, 0.092500, 0.110000 +#*# 0.050000, 0.035000, 0.010000, 0.002500, 0.007500, 0.022500, 0.022500, 0.040000, 0.045000, 0.062500, 0.050000 +#*# 0.042500, 0.007500, 0.002500, -0.010000, -0.015000, -0.002500, 0.000000, 0.005000, 0.010000, 0.017500, 0.032500 +#*# 0.017500, 0.000000, -0.030000, -0.035000, -0.017500, -0.002500, -0.010000, -0.005000, -0.012500, 0.010000, 0.007500 +#*# 0.015000, -0.015000, -0.045000, -0.047500, -0.030000, -0.020000, -0.025000, -0.027500, -0.030000, -0.020000, 0.007500 +#*# 0.005000, -0.010000, -0.045000, -0.047500, -0.025000, -0.002500, -0.010000, -0.017500, -0.017500, 0.007500, 0.010000 +#*# 0.020000, -0.005000, -0.030000, -0.030000, -0.015000, -0.005000, -0.010000, -0.010000, -0.012500, -0.002500, 0.017500 +#*# 0.022500, 0.017500, -0.007500, -0.007500, 0.007500, 0.022500, 0.012500, 0.015000, 0.007500, 0.030000, 0.025000 +#*# 0.017500, 0.000000, -0.005000, -0.010000, -0.005000, 0.010000, 0.010000, 0.012500, 0.015000, 0.022500, 0.037500 +#*# -0.002500, 0.005000, -0.010000, -0.015000, -0.010000, 0.010000, 0.010000, 0.020000, 0.025000, 0.045000, 0.042500 +#*# -0.007500, -0.015000, -0.015000, -0.010000, -0.007500, 0.007500, 0.015000, 0.030000, 0.042500, 0.060000, 0.077500 +#*# x_count = 11 +#*# y_count = 11 +#*# mesh_x_pps = 4 +#*# mesh_y_pps = 4 +#*# algo = bicubic +#*# tension = 0.2 +#*# min_x = 10.0 +#*# max_x = 210.0 +#*# min_y = 21.0 +#*# max_y = 211.0 +#*# +#*# [probe] +#*# z_offset = 1.130