diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ba01c07 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,8 @@ +[submodule "klipper"] + path = klipper + url = https://github.com/QIDITECH/klipper.git + branch = PLUS4 +[submodule "moonraker"] + path = moonraker + url = https://github.com/QIDITECH/moonraker.git + branch = PLUS4 diff --git a/UI/xindi_800_480.HMI b/UI/xindi_800_480.HMI new file mode 100644 index 0000000..a0b54d0 Binary files /dev/null and b/UI/xindi_800_480.HMI differ diff --git a/UI/xindi_800_480.tft b/UI/xindi_800_480.tft new file mode 100644 index 0000000..ec707b3 Binary files /dev/null and b/UI/xindi_800_480.tft differ diff --git a/config/gcode_macro.cfg b/config/gcode_macro.cfg new file mode 100644 index 0000000..00dd0c4 --- /dev/null +++ b/config/gcode_macro.cfg @@ -0,0 +1,938 @@ +# QIDI Plus4 V1.0.0 + +[gcode_macro _CG28] +gcode: + {% if "xyz" not in printer.toolhead.homed_axes %} + G28 + {% endif %} + +[gcode_macro zoffset] +gcode: + SET_GCODE_OFFSET Z={printer.probe.last_z_result} MOVE=1 + +# Development test +[gcode_macro test_zoffset] +gcode: + G28 + get_zoffset + G1 X{150 - printer.probe["x_offset"]} Y{150 - printer.probe["y_offset"]} F9000 + G1 Z10 F600 + probe + M400 + G4 P5000 + G1 Z10 F600 + +[gcode_macro move_subzoffset] +gcode: + G1 Z{printer.probe.last_z_result} F600 + +[gcode_macro get_zoffset] +gcode: + TOGGLE_CHAMBER_FAN + G1 Z10 F600 + Z_VIBRATE + QIDI_PROBE_PIN_1 + m204 S50 + G4 P500 + probe probe_speed=5 lift_speed=5 samples=5 sample_retract_dist=5 + move_subzoffset + M114 + {% set p=(-0.11 + printer.gcode_move.homing_origin.z)|float %} + SET_KINEMATIC_POSITION Z={p} + G1 Z30 F600 + QIDI_PROBE_PIN_2 + m204 S10000 + TOGGLE_CHAMBER_FAN + +[gcode_macro save_zoffset] +gcode: + {% if printer.gcode_move.homing_origin.z < 0.5 %} + SAVE_VARIABLE VARIABLE=z_offset VALUE={printer.gcode_move.homing_origin.z} + {% endif %} + +[gcode_macro set_zoffset] +gcode: + {% set z = printer.save_variables.variables.z_offset %} + SET_GCODE_OFFSET Z={z} MOVE=0 + +# Specialized for power lose recovery +[gcode_macro CLEAR_NOZZLE_PLR] +gcode: + {% set hotendtemp = params.HOTEND|default(250)|int %} + {% if (printer.gcode_move.position.z ) < 35 %} + G1 Z35 F900 + {% else %} + G91 + G1 Z{5} F900 + G90 + {% endif %} + G1 X56 F12000 + G1 Y310 F12000 + G1 Y324 F600 + G1 X95 F600 + M400 + + M106 S0 + M109 S{hotendtemp} + + G92 E0 + G1 E5 F50 + G92 E0 + G1 E80 F200 + G92 E0 + G1 E-2 F200 + G4 P300 + + M106 S255 + G1 Y316 F30000 + G1 Y320 F3000 + G1 Y316 F30000 + G1 Y320 F3000 + G1 Y316 F30000 + G1 Y320 F3000 + G1 Y316 F12000 + G1 Y312 F600 + +[gcode_macro CLEAR_NOZZLE] +gcode: + {% set hotendtemp = params.HOTEND|default(250)|int %} + {% if (printer.gcode_move.position.z ) < 35 %} + G1 Z35 F900 + {% else %} + G91 + G1 Z{5} F900 + G90 + {% endif %} + G1 X56 F12000 + G1 Y310 F12000 + G1 Y324 F600 + G1 X95 F600 + M400 + M109 S{hotendtemp} + G92 E0 + G1 E5 F50 + G92 E0 + G1 E80 F200 + G92 E0 + G1 E-2 F200 + + M106 S255 + G4 P5000 + M104 S140 + G1 Y318 F9000 + G1 Y322 F600 + G1 Y318 F9000 + G1 Y322 F600 + G1 Y308 F30000 + G1 Y324 F600 + + G1 X124 E-1 F1000 + + TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={170} + + G1 X133 F200 + G1 Y321 F200 + G2 I0.5 J0.5 F600 + G2 I0.5 J0.5 F600 + G2 I0.5 J0.5 F600 + + G1 Y319 F150 + G1 X132 + G1 Y324 + G1 X131 + G1 Y319 + G1 X130 + G1 Y324 + G1 X129 + G1 Y319 + + G1 X113 F200 + G1 Y320 + G1 X125 + G1 X113 + G1 X125 + G2 I0.5 J0.5 F200 + G2 I0.5 J0.5 F200 + G2 I0.5 J0.5 F200 + + G1 Y300 F600 + G1 X95 F12000 + G1 Y314 F9000 + G1 Y324 F600 + + G1 X58 F12000 + G1 X78 F12000 + G1 Y324 + G1 X58 F12000 + G1 X78 F12000 + G1 Y323.5 + G1 X58 F12000 + G1 X78 F12000 + G1 Y323 + G1 X58 F12000 + G1 X78 F12000 + G1 Y322.5 + G1 X58 F12000 + G1 X78 F12000 + G1 Y322 + G1 X58 F12000 + G1 X75 F12000 + G1 Y321.5 + G2 I0.8 J0.8 F600 + G2 I0.8 J0.8 F600 + G2 I0.8 J0.8 F600 + + G1 Y324 F600 + + M106 S0 + + G1 X95 F12000 + G1 Y316 F9000 + G1 Y312 F600 + + M400 + M118 Nozzle cleared + G1 Y10 F12000 + G1 X10 F12000 + TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={150} + M107 + M106 P2 S0 + M400 + M118 Nozzle cooled + +# Excute when start printing, prior to gcode file +[gcode_macro PRINT_START] +gcode: + AUTOTUNE_SHAPERS + + {% set bedtemp = params.BED|int %} + {% set hotendtemp = params.HOTEND|int %} + {% set chambertemp = params.CHAMBER|default(0)|int %} + set_zoffset + M104 S0 + M141 S{chambertemp} + M106 P2 S0 + M106 P3 S0 + M106 S255 + M140 S{bedtemp} +# M141 S{chambertemp} + G28 + M106 S0 + CLEAR_NOZZLE HOTEND={hotendtemp} + M191 S{chambertemp} + M190 S{bedtemp} + M104 S140 + G29 + G0 Z50 F600 + G0 X5 Y5 F6000 + + + {% if chambertemp == 0 %} + M106 P3 S255 + {% endif %} + M109 S{hotendtemp} + M141 S{chambertemp} + M204 S10000 + SET_PRINT_STATS_INFO CURRENT_LAYER=1 + ENABLE_ALL_SENSOR + save_last_file + +[gcode_macro ENABLE_ALL_SENSOR] +gcode: + ENABLE_FILAMENT_WIDTH_SENSOR + RESET_FILAMENT_WIDTH_SENSOR + query_filament_width + SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 + +[gcode_macro DISABLE_ALL_SENSOR] +gcode: + SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 + DISABLE_FILAMENT_WIDTH_SENSOR + + +[gcode_macro AUTOTUNE_SHAPERS] +variable_autotune_shapers: 'ei' +gcode: + +[gcode_macro M84] +rename_existing:M84.1 +gcode: + M84.1 + SET_STEPPER_ENABLE STEPPER=stepper_x enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_y enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 + SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 + SET_STEPPER_ENABLE STEPPER=extruder enable=0 + +# Used for power lose recovery detection +[gcode_macro DETECT_INTERRUPTION] +gcode: + {% set was_interrupted = printer.save_variables.variables.was_interrupted %} + {% if was_interrupted %} + M118 Detected unexpected interruption during the last print. Do you want to resume printing? (Do not move the extruder before resuming.) + M118 Yes: RESUME_INTERRUPTED + M118 No: CLEAR_LAST_FILE + {% endif %} + +# Excute when klipper init +[delayed_gcode PRINTER_INIT] +initial_duration:0.2 +gcode: + SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 + SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 + BED_MESH_CLEAR + SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 + +[homing_override] +axes:xyz +gcode: + {% set HOME_CUR = 1 %} + {% set driver_config = printer.configfile.settings['tmc2240 stepper_x'] %} + {% set RUN_CUR = driver_config.run_current %} + {% set HOLD_CUR = driver_config.hold_current %} + m204 S10000 + M220 S100 + {% if params.X is defined %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.7} + G28 X + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR} + BEEP I=1 DUR=100 + G1 X10 F1200 + {% endif %} + + {% if params.Y is defined %} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR * 0.9} + G28 Y + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR} + BEEP I=1 DUR=100 + G1 Y10 F1200 + {% endif %} + + {% if params.Z is defined %} + G28 x + G28 Y + G28 X + G1 X150 Y150 F7800 + + SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-5} + QIDI_PROBE_PIN_2 + probe samples=2 + SET_KINEMATIC_POSITION Z=1.9 + G1 Z10 F600 + Z_VIBRATE + QIDI_PROBE_PIN_1 + probe probe_speed=10 + SET_KINEMATIC_POSITION Z=-0.1 + G1 Z30 F480 + {% endif %} + + {% if params.X is undefined %} + {% if params.Y is undefined %} + {% if params.Z is undefined %} + SET_KINEMATIC_POSITION X=0 + SET_KINEMATIC_POSITION Y=0 + SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-10} + G91 + G1 Z7 F600 + G1 X5 F2400 + G1 Y5 F2400 + G4 P2000 + + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.8} + G28 X + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR} + BEEP I=1 DUR=100 + G1 X45 F1200 + + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR * 0.9} + G28 Y + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR} + BEEP I=1 DUR=100 + G1 Y10 F1200 + + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.8} + G28 X + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR} + BEEP I=1 DUR=100 + G1 X10 F1200 + + SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-10} + + G90 + G1 X150 Y150 F7800 + G91 + QIDI_PROBE_PIN_2 + G28 Z + G1 Z30 F600 + {% endif %} + {% endif %} + {% endif %} + SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CUR} + SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CUR} + M204 S10000 + G90 + QIDI_PROBE_PIN_2 + +[gcode_macro SHAPER_CALIBRATE] +rename_existing: RESHAPER_CALIBRATE +gcode: + RESHAPER_CALIBRATE FREQ_START=20 FREQ_END=150 + +# Excute when print end, after gcode file +[gcode_macro PRINT_END] +gcode: + {% if printer.gcode_move.homing_origin.z < 0.5 %} + SAVE_VARIABLE VARIABLE=z_offset VALUE={printer.gcode_move.homing_origin.z} + {% endif %} + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} + CLEAR_PAUSE + M400 + G4 P5000 + M106 P2 S0 + M106 P0 S0 + M106 P3 S0 + + M104 S0 + M140 S0 + M141 S0 + + M220 S100 + M221 S100 + SET_STEPPER_ENABLE STEPPER=stepper_x enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_y enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 + SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 + SET_STEPPER_ENABLE STEPPER=extruder enable=0 + + DISABLE_ALL_SENSOR + BED_MESH_CLEAR + G31 + CLEAR_LAST_FILE + M84 + BEEP I=2 DUR=500 + +[gcode_macro CANCEL_PRINT] +rename_existing: BASE_CANCEL_PRINT +gcode: + {% if (printer.gcode_move.position.z) < 200 %} + G1 Z200 F600 + {% endif %} + + G1 X0 Y0 F7800 + save_zoffset + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} + CLEAR_PAUSE + + M106 P2 S0 + M106 P0 S0 + M106 P3 S0 + + M104 S0 + M140 S0 + M141 S0 + + M220 S100 + M221 S100 + SET_STEPPER_ENABLE STEPPER=stepper_x enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_y enable=0 + SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 + SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 + SET_STEPPER_ENABLE STEPPER=extruder enable=0 + + DISABLE_ALL_SENSOR + BED_MESH_CLEAR + G31 + BEEP I=2 DUR=500 + + M84 + SDCARD_RESET_FILE + BASE_CANCEL_PRINT + CLEAR_LAST_FILE + +[gcode_macro PAUSE] +rename_existing: BASE_PAUSE +gcode: + {% set z = params.Z|default(35)|int %} + + {% if printer['pause_resume'].is_paused|int == 0 %} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=efan VALUE={printer["fan_generic cooling_fan"].speed *255} + + DISABLE_FILAMENT_WIDTH_SENSOR + SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 + SAVE_GCODE_STATE NAME=PAUSE + BASE_PAUSE + G92 E0 + G1 E-5 F1800 + {% if (printer.gcode_move.position.z ) < z %} + G91 + G1 Z{z} F900 + {% else %} + G91 + G1 Z{5} F900 + SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0 + {% endif %} + SAVE_GCODE_STATE NAME=PAUSEPARK2 + G90 + G1 X95 F12000 + G1 Y312 F12000 + G1 Y316 F600 + G1 Y320 F9000 + G1 Y324 F600 + SAVE_GCODE_STATE NAME=PAUSEPARK + M104 S0 + SET_IDLE_TIMEOUT TIMEOUT=86400 + SET_STEPPER_ENABLE STEPPER=extruder enable=0 + {% endif %} + +[gcode_macro RESUME] +rename_existing: BASE_RESUME +variable_zhop: 0 +variable_etemp: 0 +variable_efan: 0 +gcode: + {% set e = params.E|default(5)|int %} + + {% if printer['pause_resume'].is_paused|int == 1 %} + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} + {% if etemp > 0 %} + M109 S{etemp|int} + {% endif %} + M83 + M106 S0 + G1 X95 F12000 + G1 Y324 F12000 + G92 E0 + G1 E5 F50 + G92 E0 + G1 E50 F200 + G92 E0 + G1 E-0.8 F200 + G4 P300 + + M106 S{efan} + + G1 Y318 F30000 + G1 Y322 F3000 + G1 Y318 F30000 + G1 Y322 F3000 + G1 Y318 F30000 + G1 Y322 F3000 + G1 Y324 F600 + + G1 X58 F12000 + G1 X78 F12000 + G1 X58 F12000 + G1 X78 F12000 + G1 X58 F12000 + G1 X78 F12000 + G1 X58 F12000 + G1 X78 F12000 + G1 X58 F12000 + G1 X78 F12000 + G1 X58 F12000 + G1 X78 F12000 + G1 X95 F12000 + + G1 Y316 F9000 + G1 Y312 F600 + G1 Y260 F12000 + RESTORE_GCODE_STATE NAME=PAUSEPARK2 MOVE=1 MOVE_SPEED=200 + RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=15 + BASE_RESUME + ENABLE_FILAMENT_WIDTH_SENSOR + RESET_FILAMENT_WIDTH_SENSOR + query_filament_width + SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 + {% endif %} + +[gcode_macro BEEP] +gcode: + {% set i = params.I|default(1)|int %} + {% set dur = params.DUR|default(100)|int %} + + {% if printer["output_pin sound"].value|int == 1 %} + {% for iteration in range(i|int) %} + SET_PIN PIN=beeper VALUE=1 + G4 P{dur} + SET_PIN PIN=beeper VALUE=0 + G4 P{dur} + {% endfor %} + {% endif %} + +[gcode_macro M141] +gcode: + {% if printer["heater_generic chamber"] is defined %} + {% set s = params.S|float %} + SET_HEATER_TEMPERATURE HEATER=chamber TARGET={([s, 65]|min)} + {% endif %} + +[gcode_macro M191] +gcode: + {% if printer["heater_generic chamber"] is defined %} + {% set s = params.S|float %} + + M141 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR="heater_generic chamber" MINIMUM={([s, 65]|min)-2} + {% endif %} + {% endif %} + +[gcode_macro M106] +gcode: + {% set p = params.P|default(0)|int %} + + {% if p == 2 %} + {% if params.S is defined %} + SET_FAN_SPEED FAN=auxiliary_cooling_fan SPEED={(params.S|float / 255.0)} + {% else %} + SET_FAN_SPEED FAN=auxiliary_cooling_fan SPEED=1 + {% endif %} + {% endif %} + + {% if p == 0 %} + {% if params.S is defined %} + SET_FAN_SPEED FAN=cooling_fan SPEED={(params.S|float / 255.0)} + + {% else %} + SET_FAN_SPEED FAN=cooling_fan SPEED=1 + {% endif %} + {% endif %} + + {% if p == 3 %} + {% if params.S is defined %} + SET_FAN_SPEED FAN=chamber_circulation_fan SPEED={(params.S|float / 255.0)} + {% else %} + SET_FAN_SPEED FAN=chamber_circulation_fan SPEED=1 + {% endif %} + {% endif %} + +[gcode_macro M107] +gcode: + SET_FAN_SPEED FAN=cooling_fan SPEED=0 + +[gcode_macro M303] +gcode: + {% if params.E is defined %} + {% if params.S is defined %} + {% if (params.E|int)==-1 %} + PID_CALIBRATE HEATER=heater_bed TARGET={params.S|int} + {% endif %} + {% if (params.E|int)==0 %} + PID_CALIBRATE HEATER=extruder TARGET={params.S|int} + {% endif %} + {% endif %} + {% endif %} + +[gcode_macro M8029] +gcode: + {% if params.D is defined %} + {% if (params.D|int)==1 %} + ENABLE_FILAMENT_WIDTH_SENSOR + {% endif %} + {% if (params.D|int)==0 %} + DISABLE_FILAMENT_WIDTH_SENSOR + {% endif %} + {% endif %} + +[gcode_macro M900] +gcode: + {% if params.K is defined %} + SET_PRESSURE_ADVANCE ADVANCE={params.K} + {% endif %} + {% if params.T is defined %} + SET_PRESSURE_ADVANCE SMOOTH_TIME={params.T} + {% endif %} + +[gcode_macro M290] +gcode: + SET_GCODE_OFFSET Z_ADJUST={params.Z} + +[gcode_macro M901] +gcode: + G28 + SHAPER_CALIBRATE + M118 Input shaping complete + SAVE_CONFIG + +[gcode_macro M0] +gcode: + PAUSE + +[gcode_macro M25] +rename_existing: M9925 +gcode: + PAUSE + +[gcode_macro RESPOND_INFO] +variable_S:0 +gcode: + {% if params.S is defined %} + {% set s = params.S|int %} + {% if s == 0 %} + { action_respond_info("Nozzle cooled") } + {% endif %} + {% endif %} + +[gcode_macro M4027] +gcode: + G1 X{150 - printer.probe["x_offset"]} Y{150 - printer.probe["y_offset"]} F9000 + probe + SAVE_Z_OFFSET_TO_BED_MESH + G1 z10 F600 + SET_GCODE_OFFSET Z=0 MOVE=1 + BED_MESH_CALIBRATE + G0 Z50 F600 + G0 X0 Y0 F9000 + M400 + M118 Bed mesh calibrate complete + SAVE_CONFIG + +[gcode_macro M4028] +gcode: + G28 + get_zoffset + M400 + M118 Position init complete + +[gcode_macro M4029] +gcode: + M104 S140 + SAVE_VARIABLE VARIABLE=z_offset VALUE=0 + G28 + M400 + M118 Position init complete + + CLEAR_NOZZLE HOTEND=280 + G28 + get_zoffset + +[gcode_macro M4030] +gcode: + BED_MESH_CLEAR + SET_GCODE_OFFSET Z=0 MOVE=0 + G28 + get_zoffset + G1 X150 Y150 F9000 + G1 Z0 F600 + +[gcode_macro M4031] +gcode: + SET_KINEMATIC_POSITION Z=20 + G1 Z30 F300 + SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.7 } + SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.7 } + REVERSE_HOMING + SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current} + SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current} + G91 + G1 Z-30 F600 + G90 + + SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.7 } + SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.7 } + REVERSE_HOMING + SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current} + SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current} + G91 + G1 Z-30 F600 + G90 + +[gcode_macro M603] +description: Unload filament +gcode: + {% set hotendtemp = params.S|default(250)|int %} + {% set accel = printer.toolhead.max_accel|int %} + _CG28 + M204 S10000 + G1 Y150 F9000 + G1 X305 F9000 + G1 Y20 F9000 + G1 Y5 F3000 + G4 P500 + G1 Y20 F9000 + G1 Y5 F3000 + G4 P500 + G1 Y20 F9000 + + G1 X56 F12000 + G1 Y310 F12000 + G1 Y324 F600 + G1 X95 F600 + + M106 S0 + M109 S{hotendtemp} + M118 Heat up complete + + G92 E0 + G1 E5 F50 + G1 E50 F200 + G92 E0 + G1 E-0.8 F200 + G4 P300 + + M106 S255 + M104 S{hotendtemp-100} + G4 P5000 + + + G1 Y318 F9000 + G1 Y322 F600 + G1 Y318 F9000 + G1 Y322 F600 + G1 Y308 F30000 + G1 Y324 F600 + + M106 S0 + M400 + M204 S{accel} + M118 Unload finish + +[gcode_macro M604] +description: Load filament +gcode: + {% set hotendtemp = params.S|default(250)|int %} + {% set current_state = params.F|default(1)|int %} + {% set accel = printer.toolhead.max_accel|int %} + M204 S10000 + M104 S{hotendtemp} + _CG28 + {% if current_state == 1 %} + {% if (printer.gcode_move.position.y) > 300 %} + G91 + G1 Y-20 F9000 + G90 + {% endif %} + G1 X95 F12000 + G1 Y312 F12000 + G1 Y316 F600 + G1 Y320 F9000 + G1 Y324 F600 + {% endif %} + M109 S{hotendtemp} + M118 Heat up complete + + G1 X95 F600 + G1 Y324 F600 + G92 E0 + G1 E5 F50 + G92 E0 + G1 E120 F300 + G92 E0 + G1 E-0.8 F200 + G4 P300 + + M106 S255 + M104 S{hotendtemp-100} + G4 P5000 + + G1 Y318 F9000 + G1 Y322 F600 + G1 Y318 F9000 + G1 Y322 F600 + G1 Y308 F30000 + G1 Y324 F600 + + M106 S0 + + M400 + M204 S{accel} + M118 Load finish + +[output_pin sound] +pin:PA1 +value:0 + +[gcode_macro beep_on] +gcode: + SET_PIN PIN=sound VALUE=1 + +[gcode_macro beep_off] +gcode: + SET_PIN PIN=sound VALUE=0 + +[gcode_arcs] +resolution: 1.0 + +[gcode_macro M109] +rename_existing: M99109 +gcode: + {% set s = params.S|float %} + + M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} + {% endif %} + +[exclude_object] + +[gcode_macro G31] +gcode: + SET_GCODE_VARIABLE MACRO=G29 VARIABLE=k VALUE=1 + +[gcode_macro G32] +gcode: + SET_GCODE_VARIABLE MACRO=G29 VARIABLE=k VALUE=0 + +[gcode_macro G29] +variable_k:1 +gcode: + {% set temp = printer["heater_generic chamber"].target %} + M141 S0 + BED_MESH_CLEAR + {% if k|int==1 %} + G28 + get_zoffset + M141 S{temp} + G1 X{150 - printer.probe["x_offset"]} Y{150 - printer.probe["y_offset"]} F9000 + G1 Z10 F600 + probe + SAVE_Z_OFFSET_TO_BED_MESH + G1 z10 F600 + BED_MESH_CALIBRATE PROFILE=kamp + SAVE_VARIABLE VARIABLE=profile_name VALUE='"kamp"' + G4 P5000 + SAVE_CONFIG_QD + {% else %} + g28 + get_zoffset + BED_MESH_PROFILE LOAD=default + SAVE_VARIABLE VARIABLE=profile_name VALUE='"default"' + {% endif %} + +[gcode_macro M204] +rename_existing: M99204 +gcode: + {% if params.S is defined %} + {% set s = params.S|float %} + {% endif %} + {% if params.P is defined %} + {% if params.T is defined %} + {% set s = [params.P|float ,params.T|float] | min %} + {% endif %} + {% endif %} + + SET_VELOCITY_LIMIT ACCEL={s} + SET_VELOCITY_LIMIT ACCEL_TO_DECEL={s/2} + +[gcode_macro Z_VIBRATE] +gcode: + m204 S400 + G90 + G0 Z4 + G91 + #G4 P3000 + SET_PIN PIN=ctlyd VALUE=1 + {% for z in range(1,50) %} + G1 Z1 F1200 +# G4 P50 + G1 Z-1 F1200 +# G4 P50 + {% endfor %} + M204 S100 + SET_PIN PIN=ctlyd VALUE=0 + G4 P1000 + G1 Z4 + G90 + \ No newline at end of file diff --git a/config/printer.cfg b/config/printer.cfg new file mode 100644 index 0000000..f0f3d1b --- /dev/null +++ b/config/printer.cfg @@ -0,0 +1,467 @@ +# QIDI Plus4 V1.0.0 + +[include plr.cfg] +[include gcode_macro.cfg] +[include time_update.cfg] + +# Plugins +[include timelapse.cfg] +[include KAMP_Settings.cfg] + +[mcu] +serial: /dev/ttyS2 +restart_method: command +baud:500000 + +[mcu U_1] +serial: /dev/ttyS0 +restart_method: command +baud:500000 + +[temperature_sensor GD32] +sensor_type: temperature_mcu +sensor_mcu: mcu + +[respond] +default_type: echo + +[save_variables] +filename =/home/mks/printer_data/config/saved_variables.cfg + +[resonance_tester] +accel_per_hz: 150 +max_smoothing:0.5 + +[duplicate_pin_override] +pins: + +[bed_screws] +screw1:25,21 +screw1_name: Front left +screw2: 285,21 +screw2_name: Front right +screw3: 285,281 +screw3_name: Last right +screw4: 25,281 + +#[screws_tilt_adjust] +#screw_thread: CW-M4 + +[hall_filament_width_sensor] +adc1: PA2 +adc2: PA3 +cal_dia1: 1.50 +cal_dia2: 2.0 +raw_dia1: 14197 +raw_dia2: 15058 +default_nominal_filament_diameter: 1.75 +max_difference: 0 +measurement_delay: 50 +enable: false +measurement_interval: 10 +logging: False +min_diameter: 0.3 +use_current_dia_while_delay: False +pause_on_runout:True +runout_gcode: + RESET_FILAMENT_WIDTH_SENSOR + M118 Filament run out +event_delay: 3.0 +pause_delay: 0.5 + +[extruder] +step_pin:PB9 +dir_pin:PB8 +enable_pin:!PC15 +rotation_distance: 53.7 #22.6789511 Bondtech 5mm Drive Gears +gear_ratio: 1517:170 +microsteps: 16 +full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree +nozzle_diameter: 0.400 +filament_diameter: 1.75 +min_temp: 0 +max_temp: 360 +min_extrude_temp: 175 +smooth_time: 0.000001 +heater_pin:PB3 +sensor_type:MAX6675 +sensor_pin:PB12 +spi_speed: 100000 +spi_software_sclk_pin:PB13 +spi_software_mosi_pin:PA11 +spi_software_miso_pin:PB14 +max_power: 1 + +control : pid +pid_Kp=33.555 +pid_Ki=4.76 +pid_Kd=59.141 + +pressure_advance: 0.032 +pressure_advance_smooth_time: 0.03 +max_extrude_cross_section:500 +instantaneous_corner_velocity: 10.000 +max_extrude_only_distance: 1000.0 +max_extrude_only_velocity:5000 +max_extrude_only_accel:5000 +step_pulse_duration:0.000002 + +[tmc2209 extruder] +uart_pin:PC13 +interpolate: True +run_current: 0.714 +stealthchop_threshold: 0 + +[adxl345] +cs_pin:PA4 +spi_software_sclk_pin:PA5 +spi_software_mosi_pin:PA7 +spi_software_miso_pin:PA6 +axes_map: -x, z, -y + +[printer] +kinematics:corexy +max_velocity: 600 +max_accel: 20000 +max_accel_to_decel: 10000 +max_z_velocity: 20 +max_z_accel: 500 +square_corner_velocity: 8 + +[stepper_x] +step_pin:U_1:PB4 +dir_pin:!U_1:PB3 +enable_pin:!U_1:PB5 +microsteps:32 +rotation_distance: 38.82 +full_steps_per_rotation:200 # set to 400 for 0.9 degree stepper +endstop_pin:tmc2240_stepper_x:virtual_endstop +position_min: -1.5 +position_endstop: -1.5 +position_max:307 +homing_speed:50 +homing_retract_dist:0 +homing_positive_dir:False +step_pulse_duration:0.0000001 + +[stepper_y] +step_pin:U_1:PC14 +dir_pin:!U_1:PC13 +enable_pin:!U_1:PC15 +microsteps: 32 +rotation_distance: 38.82 +full_steps_per_rotation:200 # set to 400 for 0.9 degree stepper +endstop_pin:tmc2240_stepper_y:virtual_endstop +position_min: -2 +position_endstop: -2 +position_max:325 +homing_speed:50 +homing_retract_dist:0 +homing_positive_dir:False +step_pulse_duration:0.0000001 + +[stepper_z] +step_pin:U_1:PB1 +dir_pin:U_1:PB6 +enable_pin:!U_1:PB0 +microsteps: 128 +rotation_distance: 4 +full_steps_per_rotation: 200 +endstop_pin:probe:z_virtual_endstop # U_1:PC3 for Z-max +endstop_pin_reverse:tmc2209_stepper_z:virtual_endstop +position_endstop:1 +position_endstop_reverse:285 +position_max:285 +position_min: -4 +homing_speed: 10 +homing_speed_reverse: 10 +second_homing_speed: 5 +homing_retract_dist: 5.0 +homing_positive_dir:false +homing_positive_dir_reverse:true +#step_pulse_duration:0.0000001 + +[stepper_z1] +step_pin:U_1:PC10 +dir_pin:U_1:PA15 +enable_pin:!U_1:PC11 +microsteps: 128 +rotation_distance: 4 +full_steps_per_rotation: 200 +endstop_pin_reverse:tmc2209_stepper_z1:virtual_endstop +#step_pulse_duration:0.0000001 + +[z_tilt] +z_positions: + -17.5,138.5 + 335.7,138.5 + +points: + 0,138.5 + 255,138.5 + +speed: 150 +horizontal_move_z: 5 +retries: 2 +retry_tolerance: 0.05 + +[tmc2240 stepper_y] +cs_pin:U_1:PB9 +spi_software_sclk_pin:U_1:PA5 +spi_software_mosi_pin:U_1:PA7 +spi_software_miso_pin:U_1:PA6 +spi_speed:200000 +run_current: 1.07 +#hold_current: 0.5 +interpolate:true +stealthchop_threshold:0 +diag0_pin:!U_1:PC0 +driver_SGT:1 + +[tmc2240 stepper_x] +cs_pin:U_1:PD2 +spi_software_sclk_pin:U_1:PA5 +spi_software_mosi_pin:U_1:PA7 +spi_software_miso_pin:U_1:PA6 +spi_speed:200000 +run_current: 1.07 +# hold_current: 0.5 +interpolate:true +stealthchop_threshold:0 +diag0_pin:!U_1:PB8 +driver_SGT:1 + +[tmc2209 stepper_z] +uart_pin:U_1: PB7 +run_current: 1.07 +# hold_current: 0.17 +interpolate: True +stealthchop_threshold: 9999999999 +diag_pin:^U_1:PA13 +driver_SGTHRS:100 + +[tmc2209 stepper_z1] +uart_pin:U_1: PC5 +run_current: 1.07 +# hold_current: 0.17 +interpolate: True +stealthchop_threshold: 9999999999 +diag_pin:^U_1:PC12 +driver_SGTHRS:100 + +[heater_bed] +heater_pin: U_1:PB10 +sensor_type:NTC 100K MGB18-104F39050L32 +sensor_pin:U_1: PA0 +max_power: 1.0 +control = pid +pid_Kp=63.418 +pid_Ki=1.342 +pid_Kd=749.125 +pwm_cycle_time:0.001 +min_temp: -60 +max_temp: 125 + +[heater_generic chamber] +heater_pin:U_1:PC8 +max_power:0.7 +sensor_type:NTC 100K MGB18-104F39050L32 +sensor_pin:U_1:PA1 + +control = pid +pid_Kp=63.418 +pid_Ki=1.342 +pid_Kd=749.125 + +min_temp:-100 +max_temp:70 + +[verify_heater chamber] +max_error: 300 +check_gain_time:480 +hysteresis: 5 +heating_gain: 1 + +[temperature_sensor Chamber_Thermal_Protection_Sensor] +sensor_type:NTC 100K MGB18-104F39050L32 +sensor_pin:U_1:PC2 +min_temp:-100 +max_temp:130 + +[verify_heater extruder] +max_error: 120 +check_gain_time:20 +hysteresis: 5 +heating_gain: 1 + +[verify_heater heater_bed] +max_error: 200 +check_gain_time:60 +hysteresis: 10 +heating_gain: 1 + +[fan_generic auxiliary_cooling_fan] +pin: U_1:PA8 +shutdown_speed: 0.0 +cycle_time: 0.0100 +hardware_pwm: false +kick_start_time: 0.100 +off_below: 0.0 + +[fan_generic chamber_circulation_fan] +pin: U_1:PC9 +shutdown_speed: 0.0 +cycle_time: 0.0100 +hardware_pwm: false +kick_start_time: 0.100 +off_below: 0.0 + +[chamber_fan chamber_fan] +pin:U_1:PA4 +max_power: 1.0 +shutdown_speed: 0 +kick_start_time: 0.5 +heater:chamber +fan_speed: 1.0 +off_below: 0 +idle_timeout:60 +idle_speed:1.0 + +[heater_fan hotend_fan] +pin:PB5 +max_power: 1.0 +shutdown_speed:1.0 +kick_start_time: 0.5 +heater: extruder +heater_temp: 50.0 +fan_speed: 1.0 +off_below: 0 + +[heater_fan hotend_fan2] +pin:PB4 +max_power: 1.0 +shutdown_speed:1.0 +kick_start_time: 0.5 +heater: extruder +heater_temp: 50.0 +fan_speed: 1.0 +off_below: 0 + +[heater_fan hotend_fan3] +pin:PB10 +max_power: 1.0 +shutdown_speed:1.0 +kick_start_time: 0.5 +heater: extruder +heater_temp: 50.0 +fan_speed: 1.0 +off_below: 0 + +[fan_generic cooling_fan] +pin:PA8 +max_power: 1.0 +shutdown_speed:0 +cycle_time: 0.010 +hardware_pwm: False +kick_start_time: 0.100 +off_below: 0.0 +tachometer_pin:PA9 +tachometer_ppr: 2 +tachometer_poll_interval: 0.0015 + +[controller_fan board_fan] +pin:U_1:PC4 +max_power:1.0 +shutdown_speed:1.0 +cycle_time:0.01 +fan_speed: 1.0 +stepper:stepper_x,stepper_y + +[output_pin caselight] +pin: U_1:PC7 +pwm: false +shutdown_value:1 +value:1 + +[output_pin beeper] +pin:U_1: PA2 +pwm: false +shutdown_value:0 +value:0 + +[output_pin ctlyd] +pin:U_1: PA14 +pwm: false +shutdown_value:0 +value:0 + +[smart_effector] +pin:U_1:PC1 +recovery_time:0 +x_offset: 25 +y_offset: 1.3 +z_offset: 0.000001 +speed:5 +lift_speed:5 +probe_accel:50 +samples: 2 +samples_result: submaxmin +sample_retract_dist: 5 +samples_tolerance: 0.05 +samples_tolerance_retries:5 + +[qdprobe] +pin:!PA10 +z_offset:0.000001 + +[bed_mesh] +speed:150 +horizontal_move_z:5 +mesh_min:25,10 +mesh_max:295,295 +probe_count:9,9 +algorithm:bicubic +bicubic_tension:0.4 +mesh_pps: 2,2 + +[filament_switch_sensor fila] +pause_on_runout: True +runout_gcode: + M118 Filament tangle detected +event_delay: 3.0 +pause_delay: 0.5 +switch_pin:U_1:PC3 + +[resonance_tester] +accel_chip:adxl345 +probe_points: + 150, 150, 10 + +[idle_timeout] +timeout: 43200 +gcode: + PRINT_END + +[pause_resume] + +[display_status] + +[gcode_macro_break] + +[virtual_sdcard] +path: ~/printer_data/gcodes +on_error_gcode:CANCEL_PRINT + +[print_stats] + +[force_move] +enable_force_move : True + +#*# <---------------------- SAVE_CONFIG ----------------------> +#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. +#*# +#*# [input_shaper] +#*# shaper_type_x = mzv +#*# shaper_freq_x = 48.2 +#*# shaper_type_y = zv +#*# shaper_freq_y = 38.0 diff --git a/klipper b/klipper new file mode 160000 index 0000000..b907369 --- /dev/null +++ b/klipper @@ -0,0 +1 @@ +Subproject commit b90736975baeed82ff93d87c0260fd6b24889e7b diff --git a/moonraker b/moonraker new file mode 160000 index 0000000..f8fad84 --- /dev/null +++ b/moonraker @@ -0,0 +1 @@ +Subproject commit f8fad844d74e705249429bd5fd2295e7f8203cef