To print at the X/Y limits you set, you might have to increase that acceleration.
The acceleration setting displayed in the klipper frontends can be understood as a “requested acceleration”. It’s initialized with the config’s max_accel
value, and can be set by the slicer via M204 S[accel]
or any macro that calls SET_VELOCITY_LIMIT
.
My code will reduce that requested acceleration if the acceleration needed on one axis is greater than the corresponding max_[x/y/z]_accel
settings.
Here’s a quick diagram to explain this:
Vectors represent move accelerations and orientation: the arrow length is the acceleration and its orientation is identical to the move orientation in the X/Y plane.
Original klipper always apply an acceleration on the red dashed circle: all moves are treated the same no matter their orientation. The bright red vector is an example of this.
Now, the two limits I added are the horizontal and vertical red lines. The bright green vector is an example of the move being limited by the Y axis acceleration limit.
If max_accel
(or the value set via the slicer, or frontend) is lower than the diagonal length of the recangle max_x_accel x max_y_accel
, you’ll get this rounded clipping of the allowed acceleration zone. Meaning that diagonal moves will run at max_accel
rather than one or the other axis limit.
You can avoid this by setting your max_accel to the maximum diagonal acceleration value reported by SET_KINEMATICS_LIMIT
or compute it yourself as sqrt(a_x**2 + a_y**2)
.
This is not done automatically, because limiting diagonal acceleration can be useful.
However if you or the slicer set a lower acceleration during printing, you’ll get that clipping again. Arguably, this could be the desired behavior: high acceleration travel moves are limited to the axis limits, while lower acceleration extrusion moves won’t be affected by their orientation, therefore avoiding fears of inconsistent extrusion from variable acceleration. (in the figure, extrusion moves will be on a smaller dashed circle that doesn’t contact the axis limits).
The above is true only when scale_xy_accel
is disabled (the default). When scaling is enabled, the x/y acceleration limits will scale with max_accel
when it is modified. In the figure, as the acceleration is reduced, the thick dark red limit gets closer to the origin, meaning that the allowed acceleration area is shrunken, but its shape is preserved.
This more advanced mode of operation will produce variable accelerations even at extrusion acceleration, but can help reducing the ringing on the print caused by a heavy bed.
Thank you for your interest and feedback. In the past there were PRs submited with similar changes. They were rejected because of lack of evidence that orientation dependent accelerations don’t harm extrusion and print quality.