Significant Z banding on sharp corners only on Klipper

Basic Information:

Printer Model: Ender 3 V3 SE
MCU / Printerboard: CR4NS200320C13 (MCU is GD303RET6)
Host / SBC: Raspberry Pi Zero 2 W
klippy.log: klippy.zip (3.9 MB)

Fill out above information and in all cases attach your klippy.log file (use zip to compress it, if too big). Pasting your printer.cfg is not needed
Be sure to check our “Knowledge Base” Category first. Most relevant items, e.g. error messages, are covered there

Describe your issue:

I have flashed my machine to Klipper, mainly referring to this and this tutorial. I have performed all the necessary tuning multiple times according to Klipper’s official documentation and Ellis Tuning Guide, however I cannot seem to elliminate this:

All the sharp (~90°) corners have periodically wavy edge which is more visibile on the Z seam side, and the Z banding is also very visible on flat surfaces. No matter what I adjust I can’t seem to get away. Also I observe minor stringing even with PLA:

Strangely, these two problems will mostly go away if I use Marlin (this modded version) instead of Klipper. Here is my Marlin config which I tried to replicate as much as possible in Klipper but does not help: eeprom_backup-20260302-161429.zip (843 Bytes)

Any help is appreciated. I have installed Klipper at least three times before go back to Marlin, and is really curious why this happens only on Klipper. I strongly suspect some misconfig but can’t figure out what.

Hello @whc2001 and welcome to the forum!

I recommend to rerun the PID tune for the bed (maybe for the hotend too). Configuration checks - Klipper documentation

Thanks, I have already tried to calibrate PID before and I tried again today:

...
[extruder]
max_extrude_cross_section: 5
max_extrude_only_distance: 110.0
pressure_advance: 0.074
pressure_advance_smooth_time: 0.02
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
rotation_distance: 7.71
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
#control: pid
#pid_Kp: 31.2
#pid_Ki: 1.944
#pid_Kd: 125.191
min_temp: 0
max_temp: 240
[heater_bed]
heater_pin: PB2
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
#control: pid
#pid_kp: 61.623
#pid_ki: 0.626
#pid_kd: 1515.929
min_temp: 0
max_temp: 100
...
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.

...
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 61.360
#*# pid_ki = 0.606
#*# pid_kd = 1553.171
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 31.858
#*# pid_ki = 2.004
#*# pid_kd = 126.635
bashdiffinijavajavascriptjsonmakefilemarkdownphpplaintextpythonpython-replscssshellsqltypescriptyamlgcodecmakeklipper-jinja2

Seems like there is not much of a difference. Interestingly this effect is much less when printing a rounded corner (though banding is still there visible and touchable), but much amplified when printing sharp corners. I tried to print two test objects after tuning (first two image is sharp corner and later two is rounded corner):

I also tried to tune Pressure Advance multiple times but getting similar value each time. Any more ideas?

Update: I tried to tune the acceleration way down (1000mm/s for XY, 300mm/s for Z) and it improved slightly, but still not on par with what I can achieve with Marlin…

Last item under:

#square_corner_velocity: 5.0
#   The maximum velocity (in mm/s) that the toolhead may travel a 90
#   degree corner at. A non-zero value can reduce changes in extruder
#   flow rates by enabling instantaneous velocity changes of the
#   toolhead during cornering. This value configures the internal
#   centripetal velocity cornering algorithm; corners with angles
#   larger than 90 degrees will have a higher cornering velocity while
#   corners with angles less than 90 degrees will have a lower
#   cornering velocity. If this is set to zero then the toolhead will
#   decelerate to zero at each corner. The value specified here may be
#   changed at runtime using the SET_VELOCITY_LIMIT command. The
#   default is 5mm/s.
1 Like

I have tried to decrease this to 1mm/s but no significant difference.

I also tried to bump up Y axis stepper current a bit as some tutorial said, and it created some confusing effect (if I undo the acceleration decrease it also helps a bit, but if I keep the slower acceleration as mentioned above the banding again becomes more noticiable).

Guess that’s finally enough Klipper for me on this since for now I prefer working machine over tinkerable machine… Maybe later I’ll buy something else with official Klipper support (definitely not Creality anymore, and I’m glad I didn’t waste my money on KE which is even more ridiculous according to forum post and various tutorials), but that’s another story for future. Thanks everyone for helping