FLSUN Delta Z movements not accurate

I have been using Klipper or trying to for the past week. It has been a learning experience, and the printer is 90% there with the Klipper conversion from Marlin. My printer is a FLSUN 3D Metal Frame Kossel Delta DIY KIT 3DPO-284. It is from the stone age of 2017. It has an MKS Gen L 1.0 RAMPS clone as the interface, and the servos are SL42STH40-1504A. Google search tells me they are 1.8 degrees, and my measuring the belts is 2mm belts. So my config should be :

rotation_distance: 80 # 80 steps per mm - 1.8 deg - 1/16 microstepping
full_steps_per_rotation: 200 # 200 for 1.8 deg, 400 for .9 degrees

I found the comments in a couple of the configs on the GIT examples.

However, when I home and move the Z-axis (remember it’s a DELTA) down 100mm, and I measure, it only moves about 40mm down. I try and change either setting until I get the error that the stepper cant move in that way, and Klipper crashes. When I check the location with an M114, it says this:

Send: G28
Recv: ok
[…]
Send: M114
Recv: X:0.000 Y:-0.000 Z:285.000 E:0.000
Recv: ok
Send: G91
Recv: ok
[…]
Send: G0 Z-100 F200
Recv: ok
[…]
Send: M114
Recv: X:0.000 Y:-0.000 Z:185.000 E:0.000
Recv: ok

And it thinks it moved 100mm, but IRL only moved 40mm. So with this, nothing works. Bed leveling delta calibration crashes into the bed when it leaves the center. Probing does work to find a single center point, staying accurate on repeat probes. I print on this machine all the time with Marlin, and it was very dialed in and made very precise and beautiful prints. I need some help in why it thinks its geometry is so far off.

Here is my config:

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
restart_method: arduino

[printer]
kinematics: delta
max_velocity: 300
max_accel: 9000
max_z_velocity: 100
delta_radius: 135
print_radius: 120

minimum_z_position=-5

[delta_calibrate]
radius: 100
horizontal_move_z: 5
Speed: 100

[bed_mesh]
speed: 300
horizontal_move_z: 5
mesh_radius: 120
mesh_origin: 0, 0
round_probe_count: 5

[stepper_a]

X_STEP_PIN 54 = PF0

step_pin: PF0

X_DIR_PIN 55 = PF1

dir_pin: !PF1

X_ENABLE_PIN 38 = PD7

enable_pin: !PD7

X_MAX_PIN 2 = PE4

endstop_pin: ^PE4
homing_speed: 300
arm_length: 267
microsteps: 16
position_endstop: 285
rotation_distance: 80 # 80 steps per mm - 1.8 deg - 1/16 microstepping
full_steps_per_rotation: 200 # 200 for 1.8 deg, 400 for .9 degrees

[stepper_b]

Y_STEP_PIN 60 = PF6

step_pin: PF6

Y_DIR_PIN 61= PF7

dir_pin: !PF7

Y_ENABLE_PIN 56 = PF2

enable_pin: !PF2

Y_MAX_PIN 15 = PJ0

endstop_pin: ^PJ0
microsteps: 16
position_endstop: 285
rotation_distance: 80 # 80 steps per mm - 1.8 deg - 1/16 microstepping
full_steps_per_rotation: 200 # 200 for 1.8 deg, 400 for .9 degrees

[stepper_c]

Z_STEP_PIN 46 = PL3

step_pin: PL3

Z_DIR_PIN 48 = PL1

dir_pin: !PL1

Z_ENABLE_PIN 62 = PK0

enable_pin: !PK0

Z_MAX_PIN 19 = PD2

endstop_pin: ^PD2
microsteps: 16
position_endstop: 285
rotation_distance: 80 # 80 steps per mm - 1.8 deg - 1/16 microstepping
full_steps_per_rotation: 200 # 200 for 1.8 deg, 400 for .9 degrees

[probe]

Z_MIN_PIN 18 = PD3

pin: !PD3
x_offset: 0
y_offset: 0
#z_offset: 0
speed: 50.0
samples: 5
samples_result: average
sample_retract_dist: 3
samples_tolerance: .100
samples_tolerance_retries: 5

[extruder]
#define E0_STEP_PIN 26 = PA4
step_pin: PA4
#define E0_DIR_PIN 28 = PA6
dir_pin: PA6
#define E0_ENABLE_PIN 24 = PA2
enable_pin: !PA2
microsteps: 16
rotation_distance: 33.500
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PB4
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PK5
min_temp: 5
max_temp: 290
max_extrude_only_distance: 110.0

[heater_bed]
heater_pin: PH5 #Marlin D8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PK6
min_temp: 5
max_temp: 130

[fan]
pin: PH6 #Marlin D9

######################################################################

“RepRapDiscount 128x64 Full Graphic Smart Controller” type displays

######################################################################

#define LCD_PINS_RS 49 // CS chip select /SS chip slave select
#define LCD_PINS_ENABLE 51 // SID (MOSI)
#define LCD_PINS_D4 52 // SCK (CLK) clock

“RepRapDiscount 2004 Smart Controller” type displays

[display]
lcd_type: hd44780
rs_pin: PH1
e_pin: PH0
d4_pin: PA1
d5_pin: PA3
d6_pin: PA5
d7_pin: PA7
encoder_pins: ^PC6, ^PC4
click_pin: ^!PC2
kill_pin: ^!PG0

[output_pin beeper]
#define BEEPER_PIN 37 = PC0
pin: PC0


Any help is greatly appreciated. As this is a delta, it has always struggled with the controller not being fast enough during prints. I am anxious to use Klipper and bring this old machine into the future a little.

Thank you slight_smile:

Your rotation_distance is wrong. The formula is rotation_distance = <full_steps_per_rotation> * <microsteps> / <steps_per_mm>. This works out to 40 which would match a common 20 tooth pulley (20 teeth * 2mm pitch = 40mm).

Thanks for your response. I tried that just now, and am getting an error. I changed all 3 axis :

rotation_distance: 40

and I get this error:


MCU ‘mcu’ shutdown: Rescheduled timer in the past
This generally occurs when the micro-controller has been
requested to step at a rate higher than it is capable of
obtaining.
Once the underlying issue is corrected, use the
“FIRMWARE_RESTART” command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown

Set it back to 80 and it works, but the measurements come out wrong.

That’s because you have a homing speed of 300. You won’t be able to achieve that speed with an 8 bit board. You need to limit your speeds or install a 32 bit board.