SJC
Posts: 2
Joined: Tue May 28, 2019 1:30 pm

Dynamic speed control - improved print quality on corners

Tue May 28, 2019 1:56 pm

I'm new to S3D and haven't been able to find a workaround for this yet, so adding it here as a feature.

My printer (Sailfish based firmware) handles acceleration, which mostly works. However, it seems to base the acceleration on the speed of the extruder, not the velocity. Therefore, if you have an abrupt direction change (making something square, for example) although the speed may be constant as the extruder traverses the X then Y axes, there is a big change in velocity as the direction changes which results in vibration and reduced print quality. I assume many other printers are the same.

For optimal printing it is essential to reduce the velocity at sharp changes in direction.

I previously used Makerbot Desktop which did have a feature to avoid this called "doDynamicSpeed". This ensures the extruder slows before a change in direction, then accelerates again back to normal speed. Comparing test prints from Makerbot Desktop and S3D this is the only place where S3D falls down (so far, all other aspects of the print are better with S3D).

There are at least two ways this could be added:

(1) Correctly modulate the speed around sharp direction changes (something like this is already done for "small" features; it just needs to be enhanced to support sharp direction changes).

(2) Modify the Gcode so that paths are split into separate paths. For example, an "L" with a sharp corner could be changed to be two linear paths with a pause where they join and allow the printer firmware to handle the acceleration on the paths. This would probably only work for straight edges, though.

Note, there is a similar feature request posted (viewtopic.php?f=23&t=9375) but it isn't quite the same thing.

S3D-Jake
Posts: 620
Joined: Wed Jun 20, 2018 12:45 pm

Re: Dynamic speed control - improved print quality on corners

Tue May 28, 2019 3:55 pm

Thanks for your feedback and ideas on how to improve prints.
SJC wrote:
Tue May 28, 2019 1:56 pm
There are at least two ways this could be added:

(1) Correctly modulate the speed around sharp direction changes (something like this is already done for "small" features; it just needs to be enhanced to support sharp direction changes).
Can you be more clear on how this is different from the 2nd point in your request? As far as I know, g-code and it's derivatives expect single instructions to be used for straight lines. At the moment, I'm not aware of a firmware which will allow you to on a single line send different speeds for sections of that line. You'd need to do as is described below and specify smaller segments for that straight line and give each it's own speed.
SJC wrote:
Tue May 28, 2019 1:56 pm
(2) Modify the Gcode so that paths are split into separate paths. For example, an "L" with a sharp corner could be changed to be two linear paths with a pause where they join and allow the printer firmware to handle the acceleration on the paths. This would probably only work for straight edges, though.

Note, there is a similar feature request posted (viewtopic.php?f=23&t=9375) but it isn't quite the same thing.
An L shape in G-Code would already be at minimum two lines. They could each be given a speed but that would be a speed for the entire line not just for the area near where the lines meet.

Most printer firmwares available today utilize some form of look ahead which already attempts to optimize speed changes for sharp directional changes. If you want to familiarize yourself with these options you can likely find plenty of information by searching these forums for users requesting more accurate time estimates, as this is a major factor for why some users prints take longer than what our files estimate for a printing time.
"A bird does not sing because it has an answer. It sings because it has a song."

SJC
Posts: 2
Joined: Tue May 28, 2019 1:30 pm

Re: Dynamic speed control - improved print quality on corners

Wed May 29, 2019 3:24 am

Thanks for replying so quickly.

I've not delved into the details of GCode, so I could be wrong in some of my assumptions.
Can you be more clear on how this is different from the 2nd point in your request? As far as I know, g-code and it's derivatives expect single instructions to be used for straight lines. At the moment, I'm not aware of a firmware which will allow you to on a single line send different speeds for sections of that line. You'd need to do as is described below and specify smaller segments for that straight line and give each it's own speed.
My point here is the my printer seems to handle acceleration nicely, except for direction changes (it doesn't see a constant speed with direction change as a velocity change, which it clearly is). Therefore if an "L" was split into two paths that clearly had a stop between them the printer would know there was a stop and correctly handle the acceleration/decceleration on each path. But I don't think this is the best solution, maybe just a quick-fix for certain special cases.

S3D already has the ability to slow down for small features using "adjust printing speed for layers below xx". I imagine extending this to account for tight curves would be the best option.

MakerBot Desktop has several options to control this, including allowing larger paths to be split into smaller paths with different speeds. This link shows all the options that I found worked: https://support.makerbot.com/learn/make ... iles_13725

In particular:
"doDynamicSpeed" True/False. Dynamic Speed reduces your feedrate on tight curves for better surface quality. When doDynamicSpeed is set to true, the slicer will slow down your feedrate in situations determined by the Dynamic Speed settings below.

"dynamicSpeedCurvatureThreshold"/"dynamicSpeedDetectionWindow" Degrees/millimeter. The "dynamicSpeedCurvatureThreshold" setting combines with the "dynamicSpeedDetectionWindow" setting to determine how tight a curve must be to trigger a reduction in speed. If the average change in angle over the distance set in "dynamicSpeedDetectionWindow" is larger than the number of degrees per millimeter set in "dynamicSpeedCurvatureThreshold", the slicer will slow down that portion of the toolpath.

Ret
Posts: 53
Joined: Wed Feb 07, 2018 4:26 pm

Re: Dynamic speed control - improved print quality on corners

Sun Jun 02, 2019 8:42 pm

@SJC

As per everything I've read about makerbots dynamic speed, it looks like its just a slicer based form of acceleration. As well, a lot of users seem to complain the feature doesn't do real well or improve quality. I'm not sure if this is because of poor implementation or its just not beneficial for printing. I also don't know how some firmwares would handle a straight line with two speeds on it, you could end up seeing some sort of artifacts where the transition happens. I do highly agree we need a feature to decrease speed on small details, not so much every sharp corner like you're recommending.

With properly tuned acceleration and jerk, you should be able to achieve really clean sharp corners with little vibration. Just ensure that your extruder accel, jerk and feedrate are not the limiting factors. Your XY axis will only go as fast as the extruder.

Return to “Feature Requests”