Ender 3 + MKS Robin E3 + 3d touch

Hi there.
I installed Klipper on my Ender 3 which is upgraded with MKS Robin E3 and Triangle labs 3D touch. It works however, I have two main issues:

#1. My display is stuck with a “boot” message on it. I suspect I’m missing at all the “display” config in the config file and I have no idea how to configure it. - ie. pin numbers etc.

#2. The bltouch only probes one point in the middle of the bed, and I believe I’d set it to test 9 points.

Here’s my config:

# This file contains common pin mappings for MKS Robin E3 boards. To
# use this config, the firmware should be compiled for the STM32F103.
# When running "make menuconfig", enable "extra low-level
# configuration setup", select the 20KiB bootloader, and serial (on
# USART1 PA10/PA9) communication.

# Note that the "make flash" command does not work with MKS Robin
# boards. After running "make", run the following command:
#   ./scripts/update_mks_robin.py out/klipper.bin out/Robin_e3.bin
# Copy the file out/Robin_e3.bin to an SD card and then restart the
# printer with that SD card.

# MKS Robin E3 has onboard TMC2209. This config can also be used for
# MKS Robin E3D if equipped with TMC2209 stepper drivers.

# See docs/Config_Reference.md for a description of parameters.

[stepper_x]
step_pin: PC0
dir_pin: PB2
enable_pin: !PC13
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA12
position_endstop: 0
position_max: 235
homing_speed: 50

[stepper_y]
step_pin: PC2
dir_pin: PB9
enable_pin: !PB12
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA11
position_endstop: 0
position_max: 235
homing_speed: 50

[stepper_z]
step_pin: PC14 #PC14 if using board v1.1
dir_pin: !PC15 #PC15 if using board v1.1
enable_pin: !PB8
microsteps: 16
rotation_distance: 8
# endstop_pin: ^PC6
endstop_pin: probe:z_virtual_endstop
position_min: -2 # The Z carriage may need to travel below the Z=0
                 # homing point if the bed has a significant tilt.
# position_endstop: 0
position_max: 250

[extruder]
step_pin: PB4
dir_pin: PB3
enable_pin: !PB5
microsteps: 16
rotation_distance: 33.683
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PC9
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA0
control: pid
pid_Kp: 26.196
pid_Ki: 1.468
pid_Kd: 116.901
min_temp: 0
max_temp: 250

[tmc2209 stepper_x]
uart_pin: PC7
run_current: 0.800
hold_current: 0.500
stealthchop_threshold: 999999

[tmc2209 stepper_y]
uart_pin: PD2
run_current: 0.800
hold_current: 0.500
stealthchop_threshold: 999999

[tmc2209 stepper_z]
uart_pin: PC12
run_current: 0.650
hold_current: 0.450
stealthchop_threshold: 999999

[tmc2209 extruder]
uart_pin: PC11
run_current: 0.800
hold_current: 0.500
stealthchop_threshold: 999999

[fan]
pin: PA8

[heater_bed]
heater_pin:PC8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA1
control: pid
pid_kp = 65.278
pid_ki = 1.630
pid_kd = 653.598
min_temp: 0
max_temp: 130

[bltouch]
sensor_pin: ^PC6
control_pin: PA3
pin_move_time: 0.500
pin_up_reports_not_triggered: True
pin_up_touch_mode_reports_triggered: False
x_offset: -44
y_offset: -12
#z_offset: 0.7
speed: 2

# The safe_z_home section modifies the default G28 behavior
[safe_z_home]
home_xy_position: 117,117
speed: 50
z_hop: 15
z_hop_speed: 5

[force_move]
enable_force_move: True

[bed_mesh]
speed: 100
horizontal_move_z: 10
mesh_min: 54,22
mesh_max: 230,215
probe_count: 3,3

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100

#[display]
#Taken from teh Ender 3 config file
#lcd_type: st7920
#cs_pin: PA3
#sclk_pin: PA1
#sid_pin: PC1
#encoder_pins: ^PD2, ^PD3
#click_pin: ^!PC0

# EXP1 / EXP2 (display) pins
[board_pins]
aliases:
    # EXP1 header
    EXP1_1=PC3, EXP1_3=PA4, EXP1_5=PA6, EXP1_7=PC4, EXP1_9=<GND>,
    EXP1_2=PC1, EXP1_4=PA5, EXP1_6=PA7, EXP1_8=PC5, EXP1_10=<5V>,
    # EXP2 header
    EXP2_1=PB14, EXP2_3=PB11, EXP2_5=PB0,  EXP2_7=PC10,  EXP2_9=<GND>,
    EXP2_2=PB13, EXP2_4=PA15, EXP2_6=PB15, EXP2_8=<RST>, EXP2_10=<NC>

# See the sample-lcd.cfg file for definitions of common LCD displays.

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bltouch]
#*# z_offset = 0.750

Any ideas, guys?

The middel is z endstop, bed_mesh is a extra command

And the Display musst Be aktivated, on your config.
The Display is deaktivated with the ‘#’

Thank you Draggi
Do I need to add anything else to this section?

[bed_mesh]
speed: 100
horizontal_move_z: 10
mesh_min: 54,22
mesh_max: 230,215
probe_count: 3,3

The display section is commented, because it is wrong. This is taken from the config for the original ender 3 controller board. I guess I need to substitute the values with the correct one for Mks robin e3, I just don’t know them.

Normaly Not, IT Should work.

Aa ok hmm

Test this

[display]
lcd_type: st7920
cs_pin: EXP1_4
sclk_pin: EXP1_5
sid_pin: EXP1_3
encoder_pins: ^EXP2_3, ^EXP2_5
click_pin: ^!EXP1_2
#kill_pin: ^!EXP2_8

[output_pin beeper]
pin: EXP1_1

This is from the config sample

Thank you Dragi
The display now works. It needed to be tweaked a bit, but now it all appears to be OK. I even managed to reverse the direction of the dial.

[display]
lcd_type: st7920
cs_pin: EXP1_4
sclk_pin: EXP1_5
sid_pin: EXP1_3
encoder_pins: ^EXP2_5, ^EXP2_3
click_pin: ^!EXP1_1
#kill_pin: ^!EXP2_8

[output_pin beeper]
pin: EXP1_2

I’ll deal with the BLTouch tomorrow, but I think I need to change the start g-code of the slice, which is configured for Marlin now.

Cheers,
Nick

1 Like

This is the Print start and bed mash from my sidewinder x1

[bed_mesh]
speed: 800
mesh_min: 38,30
mesh_max: 270,270
probe_count: 9,9
mesh_pps: 2,2
algorithm: bicubic
bicubic_tension: 0.2
move_check_distance: 3.0
split_delta_z: .010
fade_start: 1.0 
fade_end: 5.0

[gcode_macro G29]
gcode:
 BED_MESH_CLEAR
 G28
 BED_MESH_CALIBRATE
 BED_MESH_PROFILE SAVE=x1

[gcode_macro START_PRINT]
# Reference https://github.com/KevinOConnor/klipper/blob/master/docs/Config_Reference.md#gcode_macroA
# On how to override default parameters
default_parameter_BED_TEMP: 60
default_parameter_EXTRUDER_TEMP: 200	

gcode:
    # enable PSU
    #SET_PIN PIN=PrinterPSU VALUE=1
    #LED on
    M105.1
    ## Start Code von Cura übernommen ##
    G28 ; home all axes
    M117 Purge extruder
    G92 E0 ; reset extruder
    G1 Z1.0 F3000 ; move z up little to prevent scratching of surface
    G1 X2 Y20 Z0.3 F5000.0 ; move to start-line position
    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 F3000 ; move z up little to prevent scratching of surface

Adding the G29 gcode macro did the job. Thanks mate! Legend!
Now everything works as expected.

1 Like

why do you clear and save every time the calibration?, when you perform a BED_MESH_CALIBRATE command it wil saved for that session, until you restart “firmware”, or not?, yes, maybe you execute it not like me, at every print (waiting the extruder temperature, I perform ever a “G29” gcode, within only BED_MESH_CALIBRATE command!)