Request for variable acceleration(slower acceleration at higher speed)



  • I would suggest adding support for variable acceleration.
    For example, it allows us to set something like this:
    Jerk: 10mm/s
    From 10mm/s to 50mm/s: acceleration = 2000mm/s^2
    From 50mm/s to 100mm/s: acceleration = 1000mm/s^2

    or something like this:
    acceleration = acceleration factor * current speed + acceleration offset
    where "acceleration factor" and "acceleration offset" can be set by the user

    or a mix of the two above:
    Jerk: 10mm/s
    From 10mm/s to 50mm/s: acceleration = acceleration factor 1 * current speed + acceleration offset 1
    From 50mm/s to 100mm/s: acceleration = acceleration factor 2 * current speed + acceleration offset 2

    This will be useful because accelerating to (or decelerating form) higher speed produces ringing effect or some other problem. If we slowly accelerate to (and slowly decelerate from) higher speed, it will produce the same quality as if we are accelerating to (or decelerating from) a lower speed. This would be a great way to improve speed without sacrificing quality.

    • Shen


  • I have to disagree entirely. If you decrease the rate of acceleration then it will take longer to reach a given speed so will in effect only slow the print time down. In which case, you may as well just reduce the maximum speed. By definition, acceleration is the rate of change of speed. We don't need to vary the rate of change of the rate of change.



  • @deckingman:

    I have to disagree entirely. If you decrease the rate of acceleration then it will take longer to reach a given speed so will in effect only slow the print time down. In which case, you may as well just reduce the maximum speed. By definition, acceleration is the rate of change of speed. We don't need to vary the rate of change of the rate of change.

    I don't think you got what I meant.
    For example, I usually print at 60mm/s, my acceleration is 2000mm/s^2, what I would like to have is a multistage acceleration like 2000mm/s^2 from 0 to 60mm/s, 500mm/s^2 after 60mm/s, so that I can set my printing speed to 100mm/s.
    Since I'm able to print without ringing at 60mm/s but not 100mm/s, that means the deceleration phase from 100mm/s to 60mm/s had some effect carried on to the 60mm/s to 0mm/s phase, if we deceleration more gradually from 100mm/s to 60mm/s, it would have less effect on the 60mm/s to 0mm/s phase, making it more like decelerating from 60mm/s to 0mm/s, even though it case down from 100mm/s.



  • @Shen:

    ,…........................ if we deceleration more gradually from 100mm/s to 60mm/s, it would have less effect on the 60mm/s to 0mm/s phase.

    No it won't. Also, how can you be sure that the "ringing" you say you are experiencing is due to the rate of acceleration and not just the speed? How does this "ringing" manifest itself in your printed objects?



  • @deckingman:

    @Shen:

    ,…........................ if we deceleration more gradually from 100mm/s to 60mm/s, it would have less effect on the 60mm/s to 0mm/s phase.

    No it won't. Also, how can you be sure that the "ringing" you say you are experiencing is due to the rate of acceleration and not just the speed? How does this "ringing" manifest itself in your printed objects?

    I'm know ringing is caused by acceleration rather than speed because it only happens at corners where the speed is low. If we compare two printing at 60mm/s and 100mm/s max speed, the last segment before making a corner are both a decelerating phase from 60mm/s to 0, and these two segment will have the same length. This means both segment are printed under the same condition, the different result can only be cause by what's before the 60 to 0 segment. For the 60mm/s print, it is a constant 60mm/s travel, for the 100mm/s print, it is another decelerating phase from 100 to 60. If we can lower the acceleration for the 100 to 60 phase, it will be more like a constant 60mm/s, thus improve the finished quality.



  • Sorry but no again. As you say in your example, both segments are printed under the same condition so you cannot then go on to say that they are then affected by what happens before. You say that "For the 60mm/s print, it is a constant 60mm/s travel". No it isn't. Whenever there is a change of direction, (as in your small corner segments) the head has to slow down, change direction, then speed up. For sure this rate of acceleration and deceleration could cause ringing but slowing down the rate of acceleration for longer moves that happen before, won't have any effect at all. Small segments such as you describe are unlikely to ever hit the maximum speed before a direction change is needed.

    In mechanical systems such as we have with 3d printers, the rate of change of speed (i.e. acceleration and deceleration), should be kept constant otherwise all sorts of harmonics will creep in which will cause problems far worse than the ringing on corners that you are seeing. I'd suggest you simply try lowering your acceleration settings from 2000mm/s^2 to something more sensible.



  • I still don't think you get what I was trying to say. By small segment, I mean the last part of a long straight line.
    The following picture shows what I meant:

    There are 3 lines, the numbers under the lines are the speeds the segment of the line is printed at(the lines are not up to scale).
    Line A is printed at 60mm/s max speed. Line B is printed at 100mm/s max speed. Line C is printed with two stage acceleration, the acceleration is more gradual after 60mm/s. This works very much like Jerk, before a certain speed the acceleration is infinity, after a certain speed, acceleration is lowered. What I want to add is another speed, after which the acceleration is further lowered. This will not benefit short moves, but it will for long moves.

    The acceleration of 3D printers always changes. In terms of individual axis: when you make a move where X moves 2mm, and Y moves 1mm, the acceleration of Y will be half of X's acceleration, and when you make a move where X moves the 4mm and Y moves 1mm, the acceleration of Y will be quarter of X's, and during Jerk the acceleration is "infinite". In terms of acceleration of the printing head(all axes combined), it also varies, the acceleration is higher when it's moving diagonally then along a axis. Also, I'm not trying to fix a ringing problem. I'm trying to achieve the same quality with higher speed.



  • For a given move, the acceleration of 3D printers does NOT change. A step change in the rate of acceleration that you are proposing will cause all sorts of harmonics and wreak absolute havoc. An initial jerk setting where there is enough "flex" in the system to absorb it, is just about acceptable but other than that, the rate of change of speed for a given move should be kept constant.

    Also you are not consistent. In your OP you state (quote) "…....accelerating to (or decelerating form) higher speed produces ringing effect....". Then later you say that the ringing is only noticeable on short corners and admit that they are printed the same, regardless. Now you are saying that (quote) "I'm not trying to fix a ringing problem. I'm trying to achieve the same quality with higher speed" but this makes no sense when you claim earlier that the acceleration/ deceleration from high speed is what is causing the ringing. So if you are not trying to cure the ringing, what exactly is the problem you get with higher speeds?

    Sorry but there are just so many things wrong with what you are saying that we'll just have to differ. I can only hope and pray that what you are proposing does not get adopted into firmware.



  • For a straight move acceleration does not change, but when during a print, the acceleration always changes. I think we can agree on that right? If that's true you can think of a single move with different acceleration as multiple moves. If different moves with different acceleration does not cause problem, why would a single move with multiple acceleration cause any problem. Also the Marlin firmware uses linear acceleration, even for a single straight move, the acceleration is not constant, so varying acceleration would defiantly not cause any problem.

    My point is consistent. So I don't get ringing at 60mm/s, but I do at 100mm/s, I want to be able to print at 100mm/s without get any ringing.

    I can actually by prove my print by modifying a the gcode of a test cube, by manually separate each line of the wall into 3 segments, and insert gcode to set higher acceleration to the ends, and lower acceleration to the middle. And compare the corners of this test cube to a regular one.


  • administrators

    I'm not going to join this argument yet, other then to mention that I propose to add support for separate accelerations for printing and travel moves soon. So you will be able to use low printing acceleration and high travel acceleration. There remains the possibility that the acceleration at the end of a travel move may induce ringing at the start of the following print move.



  • If anything variable acceleration needs to be intelligent:

    Queue has a long straight move ahead, increase acceleration to not waste as much time getting up to speed.
    Queue has a mid length move, increase acceleration just a little.
    Queue has lots of short moves so those will benefit from the normal (set) acceleration to obtain better quality.

    Let us not forget the instantaneous move (jerk) setting as well. Which to my understanding is the speed to start from a dead stop or while changing direction. I believe it's also the speed to stop at before changing direction.

    IS - > Acceleration speed up to max speed <- IS (IS being the instantaneous speed)

    I could be wrong on my understanding of these settings.

    Jeff



  • You are right on the jerk setting theory, but what happens in practice is that there is always some "flex" in the system, be it belt flex, members bending or twisting (ever so slightly), motors flexing on their mounts or whatever. So in fact, an instantaneous speed change never actually happens. It's very fast but not truly instantaneous. It can't be if you think about it, because something would just snap.

    As for the rest, I could be wrong but it's hard to accept that everything I was taught in college, and that everything I learnt about harmonics, torsional vibration, and the dynamics of mechanical systems in general, through 30 odd years in the automotive industry is also wrong.



  • @(In)Sanity:

    If anything variable acceleration needs to be intelligent:

    Queue has a long straight move ahead, increase acceleration to not waste as much time getting up to speed.
    Queue has a mid length move, increase acceleration just a little.
    Queue has lots of short moves so those will benefit from the normal (set) acceleration to obtain better quality.

    Let us not forget the instantaneous move (jerk) setting as well. Which to my understanding is the speed to start from a dead stop or while changing direction. I believe it's also the speed to stop at before changing direction.

    IS - > Acceleration speed up to max speed <- IS (IS being the instantaneous speed)

    I could be wrong on my understanding of these settings.

    Jeff

    To my understanding Jerk also applies when not starting from a dead stop or while changing direction. Jerk is how the lookahead feature is made possible. For example, when changing direction from [X axis at 50mm/s, Y axis at 50mm/s], to [X axis at 40mm/s, Y axis at 60mm/s], if the jerk value is 10mm/s for both X and Y, then the printer does not have to slow down. If for the same movement, when Jerk is only 5 for X and Y, the end of the first move has to slow down to 25mm/s for X and 25mm/s for Y, and the next move will start at 20mm/s for X and 30mm/s for Y. Keep in mind, the ratio of X speed and Y speed cannot be changed otherwise the direction of the move would change. The transition speed will be lowered just enough so that the instantaneously speed change is within the jerk value.



  • @Shen:

    To my understanding Jerk also applies when not starting from a dead stop or while changing direction. Jerk is how the lookahead feature is made possible. For example, when changing direction from [X axis at 50mm/s, Y axis at 50mm/s], to [X axis at 40mm/s, Y axis at 60mm/s], if the jerk value is 10mm/s for both X and Y, then the printer does not have to slow down. If for the same movement, when Jerk is only 5 for X and Y, the end of the first move has to slow down to 25mm/s for X and 25mm/s for Y, and the next move will start at 20mm/s for X and 30mm/s for Y. Keep in mind, the ratio of X speed and Y speed cannot be changed otherwise the direction of the move would change. The transition speed will be lowered just enough so that the instantaneously speed change is within the jerk value.

    Yes, that was my understanding as well, perhaps not the best choice of words on my part. I knew it impacted changing direction as well which is what it appears you are saying here. It's why too high of a jerk value can really mess up your prints amongst other things. I think the key is the printer wants to try and get to that jerk value just before a change. It's not going to do a full speed move and then all of a sudden move on another axis at full speed. But yah, it's all about maintaining inertia in a controlled fashion.

    Jeff



  • @(In)Sanity:

    ….................... But yah, it's all about maintaining inertia in a controlled fashion.

    Jeff

    Exactly!



  • @deckingman:

    You are right on the jerk setting theory, but what happens in practice is that there is always some "flex" in the system, be it belt flex, members bending or twisting (ever so slightly), motors flexing on their mounts or whatever. So in fact, an instantaneous speed change never actually happens. It's very fast but not truly instantaneous. It can't be if you think about it, because something would just snap.

    As for the rest, I could be wrong but it's hard to accept that everything I was taught in college, and that everything I learnt about harmonics, torsional vibration, and the dynamics of mechanical systems in general, through 30 odd years in the automotive industry is also wrong.

    First I'm sorry if I made you felt confronted, I tried to use the most natural wording possible. I'm not trying to prove you wrong, I just wanted to explain how my theory could work.
    Yes I understand the speed change cannot not be instant. I think the jerk can be thought as a different stage of acceleration. When the steeper "instantly" starts at a certain speed, it creates a tension on the printer. The tension then produces a force to accelerate the printer head, and this accelerate is likely to be faster then the printer's acceleration after the jerk stage.
    And I'm not saying what you know is wrong, maybe some of that didn't apply under my condition. For example, my printer can print at least 200mm/s on spiral mode vase, without any artifacts. That means the structure of my printer can operate at higher speed, so ringing is caused by acceleration rather than speed. Also I can print with great quality with either higher speed and lower acceleration or lower speed and higher acceleration. I want to be able to use the higher speed, but I don't want to use a really low acceleration through out the speed curve. The acceleration profile I mentioned is probably not the best but an optimized acceleration profile can defiantly increase the speed without scarfing the quality.


  • administrators

    The purpose of jerk is to allow small changes in direction without coming to a stop, which would be necessary if no jerk was allowed. Jerk is not used when starting or stopping.



  • @dc42:

    The purpose of jerk is to allow small changes in direction without coming to a stop, which would be necessary if no jerk was allowed. Jerk is not used when starting or stopping.

    Thanks for that, I thought the motors started at the jerk speed and then accelerated up to the run speed , back down to the jerk speed and then moved in another direction. So your saying they go from a dead stop up to the max speed based on acceleration parameters alone.

    Actually this makes sense as the first start can happen many different ways and have next to no impact on the print time. It's keeping that inertia that counts.

    Jeff



  • @Shen,

    In my experience, I find the opposite of what you are proposing to be true in terms of speed and quality. That is to say, I use a high print speed but low acceleration. What this does in effect is slow down short moves to maintain quality but allow higher speeds for long moves. For example, try printing something like a 100mm x 100mm cube (height doesn't matter). Let's say we have a print speed of 100mm/sec (to keep the maths simple) and we are doing infill at 45 degrees so the moves get progressively shorter as we get nearer the corner. For the sake of argument, let's also assume that speed change is instantaneous or the acceleration is really, really high. So, when the distance across the corner is 100mm, it will take 1 second for the print head to complete the move which is fine. Now as we get closer to the corner, the distance becomes less so when that distance is say 10mm, it'll take 1/10th of a second for the print head to complete the move. That means it goes back and forth at 10 times a second which starts to get interesting. As we get even closer to the corner and the distance is say 5mm, the print head moves back and forth at 20 times a second, at 2mm the print head is moving at 50 times a second and probably shakes itself to pieces. So, now we introduce acceleration into the equation. What happens now is that the print head must speed up, maintain a set speed, then slow down. As the moves get shorter and shorter, there will come a point where the print head never reaches the set speed before it has to starts slowing down again. If the acceleration is set low, then you can reach a point where the speed of these short moves is determined purely by the acceleration settings and the maximum speed has no effect (because it never gets up to it). So, this enables you to have a very fast speed but still maintain quality because only long moves will get close to the maximum speed and short moves are speed limited by the acceleration factor.

    So actually high speed/low acceleration is the way to go in my opinion.

    Also, you need to be careful when thinking about spiral vase mode. The type of file we currently use for 3d printing doesn't actually support arcs. So, even in spiral vase mode, what you are actually printing is a series of very small straight segments. I don't doubt that your printer can withstand printing these simulated arcs at 200mm/ second but imagine trying to print the infill for the rectangle that I was talking about at 200mm/sec with high acceleration. Can the printer withstand the print head moving back and forth 100 times per second or more?



  • @deckingman:

    In my experience, I find the opposite of what you are proposing to be true in terms of speed and quality. That is to say, I use a high print speed but low acceleration. What this does in effect is slow down short moves to maintain quality but allow higher speeds for long moves.

    Sounds like you agree with my post then on the system needs to be intelligent.

    Jeff


Locked
 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.