Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unretract before last travel move to outer wall causes ringing #1712

Open
richfelker opened this issue Aug 19, 2022 · 2 comments
Open

Unretract before last travel move to outer wall causes ringing #1712

richfelker opened this issue Aug 19, 2022 · 2 comments

Comments

@richfelker
Copy link

Without the unretract before last travel move to the outer wall, the time spend unretracting suffices to let any vibration from high travel velocity settle before the actual print moves on the outer wall begin. But with the unretract having taken place just inside the part, a high acceleration (usually perpendicular to the wall, no less) short travel move causes significant ringing, making the start of the outer wall come out a lot worse than the rest of it:

IMG_20220817_231918847

Presumably this issue is somewhat understood, as it seems to have been the motivation for adding the feature to disable travel acceleration and use the acceleration of the following wall. I do not want to do that, because high travel acceleration is key to avoiding stringing and makes a huge difference to print time. But it would make sense to always, unconditionally do this for the short travel move after unretract. I have a patch to do just that:

commit 09d94767e36ef9905346949611592802b304887e
Author: Rich Felker <dalias@aerifal.cx>
Date:   Thu Aug 18 03:15:38 2022 +0000

    use wall accel for move to wall after unretract

diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp
index 122e7882b..aefcfeb22 100644
--- a/src/LayerPlan.cpp
+++ b/src/LayerPlan.cpp
@@ -1877,6 +1877,11 @@ void LayerPlan::writeGCode(GCodeExport& gcode)
                 {
                     // We need to unretract before the last travel move of the path if the next path is an outer wall.
                     gcode.writeUnretractionAndPrime();
+                    // Always use acceleration of the following extrusion so as not to introduce
+                    // ringing from high travel accel into outer wall. Normally, the unretract would
+                    // give the ringing time to settle, but here the unretract happens before the travel.
+                    if(acceleration_enabled && next_extrusion_idx < paths.size())
+                        gcode.writeTravelAcceleration(paths[next_extrusion_idx].config->getAcceleration());
                 }
                 gcode.writeTravel(path.points.back(), speed);
                 continue;

and it fully solves the problem for me.

It may also be desirable to try to choose a better point inside to unretract at, so that the final move is not perpendicular to the wall but shallower, maybe coming in at 45° or so. This would further reduce ringing on printers without input shaper where there's essentially always some ringing on sharp turns. But such an enhancement is beyond the scope of this bug report and not something I really have a need for myself.

@richfelker
Copy link
Author

Related: wipe moves at the end of the outer wall are also applied with the travel acceleration. This is not as bad, since in theory nothing new is being printed, but the hot nozzle vibrating to the side over the wall might transfer some of that vibration to surface artifacts. I haven't found where to change this yet, but it should probably be done too.

@ky438
Copy link

ky438 commented Dec 2, 2022

any updates on this? I wish ultimaker would hire you, @richfelker ❤️

i guess they have other problems...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants