From c9ce46287cb898591480ec5ad3535b3927d7e38e Mon Sep 17 00:00:00 2001 From: iGoX Date: Wed, 22 Jan 2025 17:22:32 +0100 Subject: [PATCH] Ender 3 - Klipper Firmware --- creality-ender3/Klipper/config/adxl345.cfg | 23 ++ .../Klipper/config/led-progress.cfg | 117 ++++++++ creality-ender3/Klipper/config/macros.cfg | 188 +++++++++++++ creality-ender3/Klipper/config/printer.cfg | 259 ++++++++++++++++++ .../Klipper/firmware/2024-01-22-firmware.bin | Bin 0 -> 30040 bytes 5 files changed, 587 insertions(+) create mode 100644 creality-ender3/Klipper/config/adxl345.cfg create mode 100644 creality-ender3/Klipper/config/led-progress.cfg create mode 100644 creality-ender3/Klipper/config/macros.cfg create mode 100644 creality-ender3/Klipper/config/printer.cfg create mode 100644 creality-ender3/Klipper/firmware/2024-01-22-firmware.bin diff --git a/creality-ender3/Klipper/config/adxl345.cfg b/creality-ender3/Klipper/config/adxl345.cfg new file mode 100644 index 0000000..1a7c741 --- /dev/null +++ b/creality-ender3/Klipper/config/adxl345.cfg @@ -0,0 +1,23 @@ +[mcu x_adxl] +# Change to whatever you found above. For example, +# usb-Klipper_rp2040_E661640843545B2E-if00 +serial: /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0 + + + +[adxl345] +cs_pin: x_adxl:gpio9 +spi_software_sclk_pin: x_adxl:gpio10 +spi_software_mosi_pin: x_adxl:gpio11 +spi_software_miso_pin: x_adxl:gpio12 + +axes_map: y,x,-z # x,z,y + +[resonance_tester] +accel_chip: adxl345 +probe_points: + # Somewhere slightly above the middle of your print bed + 150,150, 20 + +#[output_pin power_mode] # Improve power stability +#pin: adxl:gpio23 \ No newline at end of file diff --git a/creality-ender3/Klipper/config/led-progress.cfg b/creality-ender3/Klipper/config/led-progress.cfg new file mode 100644 index 0000000..f5666f2 --- /dev/null +++ b/creality-ender3/Klipper/config/led-progress.cfg @@ -0,0 +1,117 @@ +# use NEOPIXEL_DISPLAY LED=Led_Name TYPE=template_type MODE=template_mode + +# for TYPE use: +# extruder_temp :extruder temperature progress +# bed_temp :bed temperature progress +# print_percent :print progress +# printer_speed :printer speed + +# for MODE use: +# progress :the leds will light up one by one +# glow :all leds will fade from one color (or non) to other color + +# more info: https://github.com/digitalninja-ro/klipper-neopixel/blob/master/README.md + +[gcode_macro NEOPIXEL_DISPLAY] +gcode: + {% set led = params.LED %} + {% set type = params.TYPE %} + {% set mode = params.MODE %} + {% set my_neopixel = printer.configfile.config['neopixel ' ~ led] %} + + {% if mode == 'progress' %} + {% for i in range(my_neopixel.chain_count|int) %} + SET_LED_TEMPLATE LED={led} INDEX={i+1} TEMPLATE={'led_' ~ type ~ '_' ~ mode} param_led_num={i+1} param_led_total={my_neopixel.chain_count|int} + {% endfor %} + {% endif %} + {% if mode == 'glow' %} + SET_LED_TEMPLATE LED={led} TEMPLATE={'led_' ~ type ~ '_' ~ mode} + {% endif %} + +[display_template led_extruder_temp_glow] +text: + {% if printer.extruder.target > 0.0 %} + {% set temp = printer.extruder.target %} + {% else %} + {% set temp = printer.configfile.config.extruder.max_temp %} + {% endif %} + {% set ratio = printer.extruder.temperature / temp|float %} + {ratio}, 0.0, {1-ratio}, 0.0 + +[display_template led_extruder_temp_progress] +param_led_num: 0 +param_led_total: 1 +text: + {% if printer.extruder.target > 0.0 %} + {% set temp = printer.extruder.target %} + {% else %} + {% set temp = printer.configfile.config.extruder.max_temp %} + {% endif %} + {% set ratio = printer.extruder.temperature / temp|float %} + {% set led_ratio = param_led_num|float / param_led_total %} + {% if ratio > led_ratio %} + {led_ratio}, 0.0, 0.0, 0.0 + {% else %} + 0.0, 0.0, 0.0, 0.0 + {% endif %} + +[display_template led_bed_temp_glow] +text: + {% if printer.heater_bed.target > 0.0 %} + {% set temp = printer.heater_bed.target %} + {% else %} + {% set temp = printer.configfile.config.heater_bed.max_temp %} + {% endif %} + {% set ratio = printer.heater_bed.temperature / temp|float %} + {ratio}, 0.0, {1-ratio}, 0.0 + +[display_template led_bed_temp_progress] +param_led_num: 0 +param_led_total: 1 +text: + {% if printer.heater_bed.target > 0.0 %} + {% set temp = printer.heater_bed.target %} + {% else %} + {% set temp = printer.configfile.config.heater_bed.max_temp %} + {% endif %} + {% set ratio = printer.heater_bed.temperature / temp|float %} + {% set led_ratio = param_led_num|float / param_led_total %} + {% if ratio > led_ratio %} + {led_ratio}, 0.0, 0.0, 0.0 + {% else %} + 0.0, 0.0, 0.0, 0.0 + {% endif %} + +[display_template led_print_percent_glow] +text: + {% set ratio = printer.virtual_sdcard.progress %} + 0.0, {ratio}, 0.0, 0.0 + +[display_template led_print_percent_progress] +param_led_num: 0 +param_led_total: 1 +text: + {% set ratio = printer.virtual_sdcard.progress %} + {% set led_ratio = param_led_num|float / param_led_total %} + {% if ratio > led_ratio %} + 0.0, {led_ratio}, 0.0, 0.0 + {% else %} + 0.0, 0.0, 0.0, 0.0 + {% endif %} + +[display_template led_printer_speed_glow] +text: + {% set ratio = printer.motion_report.live_velocity|float / printer.configfile.config.printer.max_velocity|float %} + 0.0, {ratio}, 0.0, 0.0 + +[display_template led_printer_speed_progress] +param_led_num: 0 +param_led_total: 1 +text: + {% set ratio = printer.motion_report.live_velocity|float / printer.configfile.config.printer.max_velocity|float %} + {% set led_ratio = param_led_num|float / param_led_total %} + {% if ratio > led_ratio %} + 0.0, {led_ratio}, 0.0, 0.0 + {% else %} + 0.0, 0.0, 0.0, 0.0 + {% endif %} \ No newline at end of file diff --git a/creality-ender3/Klipper/config/macros.cfg b/creality-ender3/Klipper/config/macros.cfg new file mode 100644 index 0000000..62c8c8c --- /dev/null +++ b/creality-ender3/Klipper/config/macros.cfg @@ -0,0 +1,188 @@ +[gcode_macro START_PRINT] +gcode: + #Get Bed and Extruder temperature from Slicer GCode + {% set BED_TEMP = params.BED_TEMP|default(60)|float %} + {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %} + + CLEAR_PAUSE + G90 + + ELED_ON + + M117 Heatup Bed {BED_TEMP} degres Nozzle {EXTRUDER_TEMP} degres + + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={BED_TEMP} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={BED_TEMP*0.96} MAXIMUM={BED_TEMP*1.04} + SET_HEATER_TEMPERATURE HEATER=extruder TARGET={EXTRUDER_TEMP} + + G28 + + BED_MESH_PROFILE LOAD=default + + G1 Z10 F3000 ; move z up little to prevent scratching of surface + G1 X2 Y2 Z10 F5000.0 ; move to start-line position + + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={EXTRUDER_TEMP*0.98} MAXIMUM={EXTRUDER_TEMP*1.02} + + PRIME_LINE + + M117 + +[gcode_macro END_PRINT] +gcode: + ELED_OFF + + M117 End print + TURN_OFF_HEATERS + + M117 Present print + PRESENT_PRINT + + M117 + M84 + +[gcode_macro PRIME_LINE] +gcode: + SAVE_GCODE_STATE NAME=prime_line_state + + #Precondition extruder + G92 E0 ; reset extruder + G1 X2 Y20 Z1.0 F4000.0 ; move to start-line position + G1 X2 Y20 Z0.3 F300.0 ; move z up little to prevent scratching of surface + G1 X2 Y200.0 Z0.3 F1500.0 E15 ; draw 1st line + G1 X2 Y200.0 Z0.4 F5000.0 ; move to side a little + G1 X2 Y20 Z0.4 F1500.0 E30 ; draw 2nd line + G92 E0 ; reset extruder + G1 Z1.0 F300 ; move z up little to prevent scratching of surface + + RESTORE_GCODE_STATE NAME=prime_line_state + +[gcode_macro PRESENT_PRINT] +gcode: + SAVE_GCODE_STATE NAME=present_print_state + + {% set X_MAX = printer.toolhead.axis_maximum.x|float %} + {% set Y_MAX = printer.toolhead.axis_maximum.y|float %} + {% set Z_MAX = printer.toolhead.axis_maximum.z|float %} + {% set Z_PARK_MIN = 100 | float %} + {% set Z_PARK_LIFT = 10 | float %} + + # Move nozzle away from print while retracting + G91 + G1 E-3 F300 + + G90 + {% if printer.toolhead.position.z + Z_PARK_LIFT > Z_PARK_MIN %} + G1 X{X_MAX / 2} Y{Y_MAX * 0.8} Z{printer.toolhead.position.z + Z_PARK_LIFT} F4000 + {% else %} + G1 X{X_MAX / 2} Y{Y_MAX * 0.8} Z{Z_PARK_MIN} F4000 + {% endif %} + + RESTORE_GCODE_STATE NAME=present_print_state + +[gcode_macro PAUSE] +description: Pause the actual running print +rename_existing: PAUSE_BASE +gcode: + PAUSE_BASE + + SET_ELED RED=0.0 GREEN=1.0 BLUE=1.0 + + _TOOLHEAD_PARK_PAUSE_CANCEL + +[gcode_macro RESUME] +description: Resume the actual running print +rename_existing: RESUME_BASE +gcode: + ##### read extrude from _TOOLHEAD_PARK_PAUSE_CANCEL macro ##### + {% set extrude = printer['gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL'].extrude %} + #### 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' %} + M83 + G1 E{extrude} F2100 + {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} + {% else %} + {action_respond_info("Extruder not hot enough")} + {% endif %} + + ELED_ON + + RESUME_BASE {get_params} + +[gcode_macro CANCEL_PRINT] +description: Cancel the actual running print +rename_existing: CANCEL_PRINT_BASE +variable_park: True +gcode: + ## Move head and retract only if not already in the pause state and park set to true + {% if printer.pause_resume.is_paused|lower == 'false' and park|lower == 'true'%} + _TOOLHEAD_PARK_PAUSE_CANCEL + {% endif %} + TURN_OFF_HEATERS + + SET_ELED RED=1.0 GREEN=1.0 + + CANCEL_PRINT_BASE + +[gcode_macro _TOOLHEAD_PARK_PAUSE_CANCEL] +description: Helper: park toolhead used in PAUSE and CANCEL_PRINT +variable_extrude: 1.0 +gcode: + ##### 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 %} + {% set z_park_delta = 2.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 - z_park_delta) %} + {% set z_safe = z_park_delta %} + {% else %} + {% set z_safe = max_z - act_z %} + {% endif %} + ##### end of definitions ##### + {% if printer.extruder.can_extrude|lower == 'true' %} + M83 + G1 E-{extrude} F2100 + {% if printer.gcode_move.absolute_extrude |lower == 'true' %} M82 {% endif %} + {% else %} + {action_respond_info("Extruder not hot enough")} + {% endif %} + {% if "xyz" in printer.toolhead.homed_axes %} + G91 + G1 Z{z_safe} F900 + G90 + G1 X{x_park} Y{y_park} F6000 + {% if printer.gcode_move.absolute_coordinates|lower == 'false' %} G91 {% endif %} + {% else %} + {action_respond_info("Printer not homed")} + {% endif %} + +[gcode_macro ELED_ON] +description: Turn extruder LED on and resets led colors +gcode: + SET_ELED RED=1.0 GREEN=1.0 BLUE=1.0 + +[gcode_macro ELED_OFF] +description: Turn extruder LED strip off +gcode: + SET_ELED RED=0.0 GREEN=0.0 BLUE=0.0 + +[gcode_macro SET_ELED] +description: SET_LED extruder shortcut +#rename_existing: SET_LED_BASE +gcode: + {% set RED = params.RED|default(0)|float %} + {% set GREEN = params.GREEN|default(0)|float %} + {% set BLUE = params.BLUE|default(0)|float %} + {% set WHITE = params.BLUE|default(0)|float %} + + SET_LED LED=extruder RED={RED} GREEN={GREEN} BLUE={BLUE} WHITE={WHITE} + \ No newline at end of file diff --git a/creality-ender3/Klipper/config/printer.cfg b/creality-ender3/Klipper/config/printer.cfg new file mode 100644 index 0000000..5b3699d --- /dev/null +++ b/creality-ender3/Klipper/config/printer.cfg @@ -0,0 +1,259 @@ +# Paste here and save your klipper configuration +# This file contains common pin mappings for the BIGTREETECH SKR mini +# E3 v2.0. To use this config, the firmware should be compiled for the +# STM32F103 with a "28KiB bootloader" and USB communication. Also, +# select "Enable extra low-level configuration options" and configure +# "GPIO pins to set at micro-controller startup" to "!PA14". + +# The "make flash" command does not work on the SKR mini E3. Instead, +# after running "make", copy the generated "out/klipper.bin" file to a +# file named "firmware.bin" on an SD card and then restart the SKR +# mini E3 with that SD card. + +# See docs/Config_Reference.md for a description of parameters. + +# Inpput shaper auto-calibration: +# accelerometer configuration +#[include adxl345.cfg] + +# [include macros.cfg] + +[mcu] +serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_37FFD9054252353440740557-if00 + +[printer] +kinematics: cartesian +max_velocity: 300 +max_accel: 3000 +max_z_velocity: 50 +max_z_accel: 400 +square_corner_velocity: 5.0 + +[stepper_x] +step_pin: PB13 +dir_pin: !PB12 +enable_pin: !PB14 +microsteps: 16 +rotation_distance: 40 +endstop_pin: ^PC0 +position_endstop: 0 +position_max: 220 +homing_retract_dist: 5.0 +homing_speed: 40 +homing_retract_dist: 5.0 +second_homing_speed: 2 + +[tmc2209 stepper_x] +uart_pin: PC11 +tx_pin: PC10 +uart_address: 0 +run_current: 0.580 +stealthchop_threshold: 999999 + +[stepper_y] +step_pin: PB10 +dir_pin: !PB2 +enable_pin: !PB11 +microsteps: 16 +rotation_distance: 40 +endstop_pin: ^PC1 +position_endstop: 0 +position_max: 220 +homing_speed: 40 +homing_retract_dist: 5.0 +second_homing_speed: 2 + +[tmc2209 stepper_y] +uart_pin: PC11 +tx_pin: PC10 +uart_address: 2 +run_current: 0.580 +stealthchop_threshold: 999999 + +[stepper_z] +step_pin: PB0 +dir_pin: PC5 +enable_pin: !PB1 +microsteps: 16 +rotation_distance: 8 +# endstop_pin: ^PC2 +endstop_pin: probe:z_virtual_endstop +# position_endstop: 0.0 +position_min: -2 +position_max: 250 +homing_speed: 10 +homing_retract_dist: 5.0 +second_homing_speed: 2 + +[tmc2209 stepper_z] +uart_pin: PC11 +tx_pin: PC10 +uart_address: 1 +run_current: 0.580 +stealthchop_threshold: 999999 + +[extruder] +step_pin: PB3 +dir_pin: !PB4 +enable_pin: !PD2 +microsteps: 16 +rotation_distance: 33.683 +nozzle_diameter: 0.400 +filament_diameter: 1.750 +heater_pin: PC8 +sensor_type: EPCOS 100K B57560G104F +sensor_pin: PA0 +control: pid +pid_Kp: 21.527 +pid_Ki: 1.063 +pid_Kd: 108.982 +min_temp: 0 +max_temp: 250 + +[tmc2209 extruder] +uart_pin: PC11 +tx_pin: PC10 +uart_address: 3 +run_current: 0.650 +stealthchop_threshold: 999999 + +[heater_bed] +heater_pin: PC9 +sensor_type: ATC Semitec 104GT-2 +sensor_pin: PC3 +control: pid +pid_Kp: 54.027 +pid_Ki: 0.770 +pid_Kd: 948.182 +min_temp: 0 +max_temp: 130 + +[heater_fan extruder] +# fan on hotend/extruder +pin: PC7 +heater: extruder + +[fan] +# filament_cooling +pin: PC6 +off_below: 0.1 + +[bed_screws] +# Nozzle / Screws alignment +screw1_name: front left +screw1: 25,35 +screw2_name: front right +screw2: 195,35 +screw3_name: back right +screw3: 197,200 +screw4_name: back left +screw4: 27,205 +speed: 100.0 + +[bltouch] +sensor_pin: PC2 +control_pin: PA1 +x_offset:-51 +y_offset:-12 +z_offset = 3.0 +speed:5 +samples: 3 +samples_result: average +samples_tolerance: 0.050 +samples_tolerance_retries: 3 + +[safe_z_home] +home_xy_position: 161,122 +z_hop: 15 + +[screws_tilt_adjust] +# BLTouch / Screws alignment +screw1_name: front left +screw1: 76,47 +screw2_name: front right +screw2: 220,47 +screw3_name: back left +screw3: 220,212 +screw4_name: back right +screw4: 79,217 +speed: 100.0 +screw_thread: CW-M4 + +[bed_mesh] +speed: 100 +mesh_min: 29.25, 12.8 +mesh_max: 272.75, 263 +algorithm: bicubic +probe_count: 5,5 +mesh_pps: 3 +fade_start: 1 +fade_end: 10 + +[neopixel lightbar] +pin: PA8 +chain_count: 17 +initial_RED: 1.0 +initial_GREEN: 1.0 +initial_BLUE: 1.0 + + +###################################################################### +# 128x64 Full Graphic Creality CR10 / ENDER 3 stockdisplay +# https://github.com/Klipper3d/klipper/blob/master/config/sample-lcd.cfg +###################################################################### + +# This section is used for a Creality "12864" display with a single +# ribbon cable between the display's EXP3 plug and the +# micro-controller board's EXP1 connector. + +# [display] +# lcd_type: st7920 +# cs_pin: EXP1_7 +# sclk_pin: EXP1_6 +# sid_pin: EXP1_8 +# encoder_pins: ^EXP1_5, ^EXP1_3 +# click_pin: ^!EXP1_2 + +# [output_pin beeper] +# pin: EXP1_1 + +###################################################################### + +[display] +lcd_type: st7920 +cs_pin: PB8 +sclk_pin: PB9 +sid_pin: PB15 +encoder_pins: ^PA10, ^PA9 +click_pin: ^!PA15 + +[output_pin beeper] +pin: PB5 + + + +# [filament_switch_sensor filament] +# pause_on_runout: True # Starts the PAUSE g-code script if filament runs out +# runout_gcode: M117 Filament runout # Optional +# insert_gcode: M117 Filament insert # Optional +# switch_pin: PC15 # + +# Support for M117 gcode (message display) +[display_status] + +[static_digital_output usb_pullup_enable] +pins: !PA14 + +[board_pins] +aliases: + # EXP1 header + EXP1_1=PB5, EXP1_2=PA15, + EXP1_3=PA9, EXP1_4=, + EXP1_5=PA10, EXP1_6=PB9, + EXP1_7=PB8, EXP1_8=PB15, + EXP1_9=, EXP1_10=<5V> + + + + +# See the sample-lcd.cfg file for definitions of common LCD displays. diff --git a/creality-ender3/Klipper/firmware/2024-01-22-firmware.bin b/creality-ender3/Klipper/firmware/2024-01-22-firmware.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c1d490e6105ad2da92992445d04f1e293206e73 GIT binary patch literal 30040 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 IeVFU|5C7S7kpKVy literal 0 HcmV?d00001