Ender 3 Pro x-endstop problem

Printer Model: Ender 3 Pro with dual belted Z Axis, Klackender and Stealthburner
MCU / Printerboard: Bigtreetech SKR Pro 1.2 with TMC2209
klippy.log: klippy (2).log (2.2 MB)

Hello everybody,

i switched from Marlin to Klipper when i did some upgrades. I am having now a problem and i hope someone can help me here. Thanks for every suggestion.

The problem is that my X-Endstop (Stock) sometimes doesn’t work. It is most times after i cancelled a print or maybe when it is hot. The light on the printerboard lights everytime up, but klipper doesn’t recognize it. I only have the problem with the x-endstop. I switched the x and y endstop plugs on the board and the pins in Klipper, then the y-axis had the same problem, so it seems to be the x-endstop pins. I tried with ^ symbol for pull-up, but this doesn’t seem to change anything. I hope someone has an idea. Thanks again.

Here is my current configuration:

[include mainsail.cfg]
[include stealthburner_leds.cfg]
[include print_macros.cfg]
[include other_macros.cfg]


[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f407xx_280038001951363436393637-if00

[board_pins]
aliases:
    EXP1_1=PG4, EXP1_3=PD11, EXP1_5=PG2, EXP1_7=PG6, EXP1_9=<GND>,
    EXP1_2=PA8, EXP1_4=PD10, EXP1_6=PG3, EXP1_8=PG7, EXP1_10=<5V>,
    EXP2_1=PB14, EXP2_3=PG10, EXP2_5=PF11, EXP2_7=PF12,  EXP2_9=<GND>,
    EXP2_2=PB13, EXP2_4=PB12, EXP2_6=PB15, EXP2_8=<RST>, EXP2_10=PF13

[printer]
kinematics: cartesian
max_velocity: 150
max_accel: 500
max_z_velocity: 5
max_z_accel: 20

[stepper_x]
step_pin: PE9
dir_pin: PF1
enable_pin: !PF2
endstop_pin: ^PB10
microsteps: 32
rotation_distance: 40
position_min: -16
position_endstop: -16
position_max: 229
homing_speed: 50.0

[tmc2209 stepper_x]
uart_pin: PC13
run_current: 0.850
hold_current: 0.500
stealthchop_threshold: 200

[stepper_y]
step_pin: PE11
dir_pin: PE8
enable_pin: !PD7
endstop_pin: ^PE12
microsteps: 32
rotation_distance: 40
position_min: -5
position_endstop: -5
position_max: 230
homing_speed: 50.0

[tmc2209 stepper_y]
uart_pin: PE3
run_current: 0.850
hold_current: 0.500
stealthchop_threshold: 200

[stepper_z]
step_pin: PE13
dir_pin: PC2
enable_pin: !PC0
microsteps: 32
rotation_distance: 80
gear_ratio: 80:16
full_steps_per_rotation: 200
position_max: 300
homing_speed: 5.0
endstop_pin: probe:z_virtual_endstop #if you want to use the Prove as z-endstop (You can unsinstall the stock z endstop then. If not, remive the [homing_override])
position_min: -10 # set a negative value (minimum as the probe z_offset)

[tmc2209 stepper_z]
uart_pin: PD1
run_current: 0.850
hold_current: 0.600
stealthchop_threshold: 100

[extruder]
step_pin: PE14
dir_pin: PA0
enable_pin: !PC3
microsteps: 32
rotation_distance: 21.8064062675
full_steps_per_rotation: 200
gear_ratio: 50:10
nozzle_diameter: 0.4
filament_diameter: 1.750
max_extrude_cross_section: 50.0
max_extrude_only_distance: 100.0
max_power: 1.0
heater_pin: PB1
sensor_type: ATC Semitec 104NT-4-R025H42G
sensor_pin: PF4
control = pid
pid_kp = 31.236
pid_ki = 3.653
pid_kd = 66.767
min_extrude_temp: 180
min_temp: 0
max_temp: 280

[tmc2209 extruder]
uart_pin: PD4
run_current: 0.700
hold_current: 0.500
stealthchop_threshold: 50

[heater_bed]
heater_pin: PD12
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PF3
control: pid
pid_Kp: 74.785
pid_Ki: 1.971
pid_Kd: 709.523
min_temp: 0
max_temp: 110



[fan]
pin: PE5

[heater_fan fan]
pin: PC8

[controller_fan controller_fan]
fan_speed: 1.0
idle_speed: 0.1
idle_timeout: 600
pin: PE6
heater: heater_bed


[idle_timeout]
#gcode:
#   A list of G-Code commands to execute on an idle timeout. See
#   docs/Command_Templates.md for G-Code format. The default is to run
#   "TURN_OFF_HEATERS" and "M84".
timeout: 18000
#   Idle time (in seconds) to wait before running the above G-Code
#   commands. The default is 600 seconds.

## TOOLHEAD SENSOR ---------------------------------------------------------------------------------------------------------
# Uncomment this section to enable toolhead sensor support

## ERCF Toolhead sensor START
[filament_switch_sensor ERCF_toolhead_sensor]
pause_on_runout: False		# Must be False
switch_pin: PE10
## ERCF Toolhead sensor END

[filament_switch_sensor filament_runout_sensor]
pause_on_runout: False
switch_pin: PE15





#####################################################################
# KlackEnder- Settings
#####################################################################

[probe]
pin: PG8
#z_offset: 7.3 #Measure per your specific setup
x_offset: 20 # negative = left of the nozzle
y_offset: 39 # negative = in front of of the nozzle
speed: 5.0
lift_speed: 15.0
sample_retract_dist: 1
samples: 2
samples_tolerance_retries: 6

##[(7x7)-1] / 2 = 24
##[(5x5)-1] / 2 = 12
[bed_mesh]
speed: 300
horizontal_move_z: 10
mesh_min: 8,35
mesh_max: 223,201
probe_count: 5,5
relative_reference_index: 12
algorithm: bicubic
fade_start: 1
fade_end: 10
#fade_target:
#   The z position in which fade should converge. When this value is set
#   to a non-zero value it must be within the range of z-values in the mesh.
#   Users that wish to converge to the z homing position should set this to 0.
#   Default is the average z value of the mesh.
split_delta_z: 0.015
#   The amount of Z difference (in mm) along a move that will
#   trigger a split. Default is .025.
move_check_distance: 3
#   The distance (in mm) along a move to check for split_delta_z.
#   This is also the minimum length that a move can be split. Default
#   is 5.0.
mesh_pps: 4,4
#   A comma separated pair of integers (X,Y) defining the number of
#   points per segment to interpolate in the mesh along each axis. A
#   "segment" can be defined as the space between each probed
#   point. The user may enter a single value which will be applied
#   to both axes.  Default is 2,2.
#bicubic_tension: .2
#   When using the bicubic algorithm the tension parameter above
#   may be applied to change the amount of slope interpolated.
#   Larger numbers will increase the amount of slope, which
#   results in more curvature in the mesh. Default is .2.

[homing_override]
axes: z
set_position_z:0 # Make printer think Z axis is at zero, so we can force a move upwards away from build plate
gcode:
  G90
  G1 Z10 F3000 ; move up to prevent accidentally scratching build plate    
  G28 X
  G28 Y
  PROBE_OUT
  G1 X117 Y117 F6000
  G28 Z
  PROBE_IN

[screws_tilt_adjust]
screw1: 12, -4
screw1_name: front left screw
screw2: 180, -4
screw2_name: front right screw
screw3: 180, 160
screw3_name: rear right screw
screw4: 12, 160
screw4_name: rear left screw
screw_thread: CW-M4
horizontal_move_z: 10

[gcode_macro SCREWS_TILT_CALCULATE]
rename_existing: _SCREWS_TILT_CALCULATE
gcode:
  PROBE_OUT
  _SCREWS_TILT_CALCULATE
  PROBE_IN


#####################################################################
# KlackEnder- Macros
#####################################################################

[gcode_macro PROBE_OUT]
gcode:
  G90
  G1 X229 F4000
  G4 P300
  G1 Z15
  G1 X150

[gcode_macro PROBE_IN]
gcode:
  G90
  G1 Z20
  G1 X229 F20000
  G1 Y-5 #Check this against your config of [stepper_y] position_min: ...!
  G1 Z0
  G4 P300
  G1 X204 F6000
  G1 Z10
  G1 X0

[gcode_macro BED_MESH_CALIBRATE]
rename_existing: _BED_MESH_CALIBRATE
gcode:
  PROBE_OUT
  _BED_MESH_CALIBRATE
  PROBE_IN

[gcode_macro G29]
gcode:
  PROBE_OUT
  BED_MESH_CALIBRATE
  #G1 Y0 F20000
  PROBE_IN

[gcode_macro PROBE_CALIBRATE]
rename_existing: _PROBE_CALIBRATE
gcode:
  {% if not 'xyz' in printer.toolhead.homed_axes %}
  G28
  {% endif %}
  PROBE_OUT
  G90
  G1 Z20
  G1 X115 Y115 F20000
  _PROBE_CALIBRATE
  TESTZ Z=20
  M117 Remove the Klack to continue calibration!

[gcode_macro PROBE_ACCURACY]
rename_existing: _PROBE_ACCURACY
gcode:
  {% if not 'xyz' in printer.toolhead.homed_axes %}
  G28
  {% endif %}
  PROBE_OUT
  G90
  G1 Y115 X115 F20000
  _PROBE_ACCURACY
  PROBE_IN



#####################################################################
# KlackEnder- Menu - Only if you have a display installed!
#####################################################################

#[menu __main]
#type: list
#name: Main

#[menu __main __KlackEnder]
#type: list
#enable: True
#name: KlackEnder

#[menu __main __KlackEnder __ProbeOut]
#type: command
#name: Probe Out
#gcode:
#  PROBE_OUT

#[menu __main __KlackEnder __ProbeIn]
#type: command
#name: Probe In
#gcode:
#  PROBE_IN

#[menu __main __KlackEnder __AutoBedMesh]
#type: command
#name: Auto Bed Mesh
#gcode:
#  G28
#  AUTO_BED_MESH

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	0.037500, 0.023750, 0.012500, 0.035000, 0.051250
#*# 	0.053750, 0.031250, 0.027500, 0.031250, 0.021250
#*# 	0.040000, 0.015000, 0.000000, 0.025000, 0.016250
#*# 	0.102500, 0.037500, 0.021250, 0.025000, -0.006250
#*# 	0.193750, 0.100000, 0.047500, 0.091250, 0.046250
#*# x_count = 5
#*# y_count = 5
#*# mesh_x_pps = 4
#*# mesh_y_pps = 4
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 8.0
#*# max_x = 223.0
#*# min_y = 35.0
#*# max_y = 201.0
#*#
#*# [probe]
#*# z_offset = 7.630

Hello @DeBelsch !

You have been asked for the klippy.log . This is way more informative that the printer.cfg.

Could you please attach it to your next post.

Hello,

yes sorry i added the log.

Sorry:

grafik

However…

I saw, you did the trigger test.

Did you do it manually or did you move the carriage against it?
If the latter one, did it trigger with ease or do you need some force?

I did push the carriage manually multiple times against it. The triggers in the logs are only from the probe, which shows triggered when the probe is not attached.
I did now redo a test:
Before print 10/10 endstop triggers detected.
After print 0/20 endstop triggers detected.
After opening the printer enclosure and waiting, all triggers get detected again.
I am going to do more tests with just heating and no printing.

The question is: Do you need to press hard to trigger the endstop or is it quite easy.

It can be, that because of thermal expansion, the trigger can’t be reliably pushed.

Can you make a photo of that spot where the endstop is and post it here?

Hello, i had the time to do more testing.
No i don’t need to push hard to trigger the endstop and the light on the board for the endstop lights up everytime but klipper doesn’t recognize it as triggered, so it shouldn’t be a endstop hardware problem.
Klipper doesn’t recognize a trigger after I printed something, so when it is hot in the chamber. It recognizes it again after some time when it is cooled off with no problem.

Have you tried to connect the endstop to a different input pin on the board?

It is unlikely a Klipper issue, because the Y endstop works with the same algorithm, it that obviously works.

This appears to be a thermo-mechanical issue.

Is there really enough movement capability of the carriage to trigger the endstop? Or does it just do it on the lase tenth of a millimetre?

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.