• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

Incorrect extrusion amount on slow and/or small axis moves

Scheduled Pinned Locked Moved
General Discussion
5
43
2.2k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    deckingman @tfjield
    last edited by 21 Jun 2022, 16:59

    @tfjield No. The cap is on the feedrate so it will slow down. It will (should) still extrude 50 mm of filament but it'll take roughly 4 times as long to do so because the feedrate is capped at 3600 but to extrude 50mm in 0.25 seconds needs a feedrate of 12,000. Because the B axis has to be kept in sync with the extruder, then that too will be slowed down by the same proportion. At least, to that's how it should work.
    For our purposes, we can think of the extruder as simply being another axis, just like XY and Z. So for a G1 Xn Yn En move, X,Y and E will all start to move at the same time, and they will all finish at the same time. But because the distances may be different, then the speed of each axis (and extruder) will have to be different.
    It's not quite as simple as that because if you think about a G1 Xn Yn En Fn move which axis does the the feedrate (F) apply to? Is it X, Y or E? The answer is neither (or all 3 depending on your point of view). It is actually the feedrate in multi dimensional space with the number of dimensions being the number of axes. (At least, that's how I think of it).

    Ian
    https://somei3deas.wordpress.com/
    https://www.youtube.com/@deckingman

    undefined undefined 2 Replies Last reply 21 Jun 2022, 17:09 Reply Quote 1
    • undefined
      tfjield @deckingman
      last edited by 21 Jun 2022, 17:09

      @deckingman Yes, that all makes sense, and that's how I would expect it to operate. I'm just trying to figure out why the OP isn't getting the full 50 mm of filament on his G1 B42 E50 F480 move. Unless he's just grinding filament...

      @ardenpm Can you confirm that G1 E50 F3600 gives you the full 50 mm of filament?

      undefined 1 Reply Last reply 21 Jun 2022, 17:43 Reply Quote 0
      • undefined
        deckingman @tfjield
        last edited by deckingman 21 Jun 2022, 17:43

        @tfjield said in Incorrect extrusion amount on slow and/or small axis moves:

        @deckingman Yes, that all makes sense, and that's how I would expect it to operate. I'm just trying to figure out why the OP isn't getting the full 50 mm of filament on his G1 B42 E50 F480 move. Unless he's just grinding filament...

        I would think that must be the case. Some time back I did some melt rate testing and high speed printing using a 1.5mm diameter nozzle with a dual heat zone, 6 input hot end (fed with 6 extruders). https://www.youtube.com/watch?v=gc8AciHjf4I and achieved a volumetric flow rate of 72.3 mm^3/sec.

        To put that into perspective, the print consumed 131.7 metre of filament in 73 minutes which gives an extruder feed rate of 1804 mm/minute. So there is no way that a single input, single heater hot end with 0.4mm nozzle could achieve double that at 3600 mm/min.

        Edit. To put it another way, 1.75mm diameter filament has a cross sectional area of almost exactly 3mm^2. So if you could extrude that at 60m/sec (3600mm/minute) then you would be looking at a volumetric flow rate of around 180mm^3/sec or 10,800 mm^3 /minute which is about double what an E3D volcano with large nozzle and elevated temperatures could achieve.

        Ian
        https://somei3deas.wordpress.com/
        https://www.youtube.com/@deckingman

        1 Reply Last reply Reply Quote 1
        • undefined
          fcwilt @deckingman
          last edited by fcwilt 21 Jun 2022, 17:47

          @deckingman said in Incorrect extrusion amount on slow and/or small axis moves:

          It's not quite as simple as that because if you think about a G1 Xn Yn En Fn move which axis does the the feedrate (F) apply to?

          The max speeds for each axis will end up determining how long each axis needs to complete it's move.

          Correct?

          The axis needing the longest time would then impose a limit on all the others axes so they would complete in that time.

          Correct?

          One or more axes might be able to complete their move in that time and have a feedrate that would exceed the specified feedrate F.

          Correct?

          Then that feedrate F would impose its limit on those axes and the feedrate for all other axes would be adjusted so all moves completed at the same time.

          Correct?

          Frederick

          Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

          undefined 1 Reply Last reply 21 Jun 2022, 18:11 Reply Quote 0
          • undefined
            deckingman @fcwilt
            last edited by deckingman 21 Jun 2022, 18:11

            @fcwilt Almost but not exactly. If you think about a 3 dimensional move from a point in space defined as Xa Ya Za and at the end of that move it ends up at a point in space defined as Xb Yb Zb. The we can draw a straight line between Xa Ya Za to Xb Yb Zb. The specified feed rate applies to that (diagonal) line. So unless there is a move purely in one direction with no other direction components, then the actual feed rate for all the individual axes will be lower than the specified feed rate (because the individual axis components would be shorter than the 3 dimensional, "diagonal" line).

            Where it gets hard to comprehend is that the extruder forms a 4th dimension as do any other axes such as my CoreXYUVAB (7 axes plus 6 extruders =13 dimensions).

            Edit - At least I think that's right - but I might be wrong about the extruder(s) - we'd need to ask DC.

            Ian
            https://somei3deas.wordpress.com/
            https://www.youtube.com/@deckingman

            undefined 1 Reply Last reply 21 Jun 2022, 18:22 Reply Quote 0
            • undefined
              fcwilt @deckingman
              last edited by 21 Jun 2022, 18:22

              @deckingman said in Incorrect extrusion amount on slow and/or small axis moves:

              @fcwilt Almost but not exactly. If you think about a 3 dimensional move from a point in space defined as Xa Ya Za and at the end of that move it ends up at a point in space defined as Xb Yb Zb. The we can draw a straight line between Xa Ya Za to Xb Yb Zb. The specified feed rate applies to that (diagonal) line. So unless there is a move purely in one direction with no other direction components, then the actual feed rate for all the individual axes will be lower than the specified feed rate (because the individual axis components would be shorter than the 3 dimensional, "diagonal" line).

              Understand about the diagonal and how the feed rate F applies to it.

              But the extruder needs to complete it's "move" at the same time as the moves of all the other axes.

              Correct?

              So wouldn't it's feed rate limit possibly limit all the other axes?

              Frederick

              Frederick

              Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

              undefined 1 Reply Last reply 21 Jun 2022, 19:52 Reply Quote 0
              • undefined
                deckingman @fcwilt
                last edited by 21 Jun 2022, 19:52

                @fcwilt said in Incorrect extrusion amount on slow and/or small axis moves:

                Understand about the diagonal and how the feed rate F applies to it.

                But the extruder needs to complete it's "move" at the same time as the moves of all the other axes.

                Correct?

                So wouldn't it's feed rate limit possibly limit all the other axes?

                Yes - and I said as much a few posts further up. But what is the point you are trying to make?

                In the example above, the OP is moving B by 2mm and the extruder by 50mm. The extruder speed is limited to 3600 mm/minute or 60mm/sec so (ignoring the acceleration and deceleration phases) 50mm at 60mm/sec will take 1.2 seconds. Yet we know that the specified feed rate is 480mm/minute or 8mm/sec. If we apply that 8mm/sec feedrate to the B axis then a 2mm move should take 0.25 seconds. But the move has to take 1.2 seconds in order to extrude 50mm at the limit of 3600 mm/minute or 60mm/sec (assuming the hot end is capable of achieving that sort of melt rate which I've have demonstrated is so improbable as to be unbelievable). So the B axis will have to be slowed down too, i.e the entire move will take longer than 0.25 seconds (about 1.2 seconds) which is what I said a few posts further up.

                But none of that detracts from the fact that it is highly unlikely that a single input, single heat zone, hot end with a 0.4mm nozzle could extrude 10,800 mm^3/sec which is what it would have to do if the extruder feedrate was 3600 mm/minute. Hence the OP is getting under extrusion.

                Ian
                https://somei3deas.wordpress.com/
                https://www.youtube.com/@deckingman

                undefined 1 Reply Last reply 21 Jun 2022, 20:07 Reply Quote 0
                • undefined
                  fcwilt @deckingman
                  last edited by 21 Jun 2022, 20:07

                  @deckingman said in Incorrect extrusion amount on slow and/or small axis moves:

                  Yes - and I said as much a few posts further up. But what is the point you are trying to make?

                  Just trying to understand what is going on and how it all works.

                  Thanks.

                  Frederick

                  Printers: a small Utilmaker style, a small CoreXY and a E3D MS/TC setup. Various hotends. Using Duet 3 hardware running 3.4.6

                  1 Reply Last reply Reply Quote 0
                  • undefined
                    ardenpm
                    last edited by 22 Jun 2022, 06:58

                    I'm glad I'm not going crazy and that what goes on behind a G1 is actually more complex that it first seems, enough to provoke some discussion.

                    @tfjield I believe the G1 feedrate cap only applies to CNC mode doesn't it, i.e., if you have issued an M453 to switch to CNC mode? That should not affect the Duet if in regular 3D printing mode.

                    @deckingman to answer your question G1 E50 F3600 will absolutely grind filament. However extruder feedrate maximums are often set much higher than the maximum printable feedrate so that a higher rate can be used during retraction, which isn't subject to the same pushing plastic limitations. I don't recall if there is a seperate retraction limit that can be set somewhere.

                    8mm/s is doable on a Hemera with a 0.4mm nozzle, though probably not across a whole print, for priming into air it does fine though, much higher will have issues in my experience.

                    My (possibly incorrect) assumption was that in a G1 move, the movements of the axes would need to be slowed down to accommodate the slowest of any axis (including the extruder) and not just the movement axes. If this is not the case then it would explain why the short travel move forces the extruder to go faster, though I do not believe it is reaching 3600mm/m as that would make a huge honking noise and mess as it grinds away.

                    I think it comes down to the fundamental question, what is the expected behaviour of G1 when the extruder is commanded to move a distance that is greater than the movement axes with such a feedrate that the axes move would complete prior to the extruder move if not slowed down.

                    To my thinking this issue could come up when using a very wide extrusion width with a large nozzle as well, though I haven't looked at that. I guess in those cases you're probably printing more slowly (in movement speed, of course volumetric flow would be higher) anyway.

                    More testing to come though. I'll switch to pure tests in air over the bed and the X-axis just to remove some more variables.

                    Of course, in the end, for my use case I can just slow down, priming at 250mm/m instead of 480mm/m is going to make no real difference, however I do want to get to the bottom of what is happening just for my own understanding.

                    undefined undefined 2 Replies Last reply 22 Jun 2022, 07:31 Reply Quote 0
                    • undefined
                      tfjield @ardenpm
                      last edited by 22 Jun 2022, 07:31

                      @ardenpm The way I read it, it always applies, but it's especially important for CNC mode. But that's just my interpretation. I'll run a test when I get a chance.

                      1 Reply Last reply Reply Quote 0
                      • undefined
                        deckingman @ardenpm
                        last edited by 22 Jun 2022, 09:23

                        Good point about retractions.

                        however I do want to get to the bottom of what is happening just for my own understanding.

                        I thought I'd explained it. A G1 En Fn, there is no axis movement involved so the feed rate will apply only to the extruder. However, a G1 (Axis)n En Fn move will apply the feed rate to the axis. Because your extruder move length is 25 times greater than the axis move length, and because the extruder move must start and end at the same time as the axis move, then the feed rate for the extruder must necessarily be 25 times higher than that of the axis.

                        For info, I too use a purge and wipe system on my 6 input hot end (but without moving an axis concurrently). I purge 100mm at a feed rate of 300 (5mm/sec). In my case that's in the format G1 E100:0:0:0:0:0 F300. So with your 25:1 ratio of extruder to axis move length, if I used G1 B4 E100:0:0:0:0:0 I'd need to use a feed rate of 12 which would give me 300 for the extruder.

                        Ian
                        https://somei3deas.wordpress.com/
                        https://www.youtube.com/@deckingman

                        undefined 1 Reply Last reply 22 Jun 2022, 09:53 Reply Quote 0
                        • undefined
                          ardenpm @deckingman
                          last edited by 22 Jun 2022, 09:53

                          @deckingman Yes I understand your description but my understanding was that is what you were assuming what is happening rather than what is intended to happen. To me it is surprising that the extruder limits are overridden by the axis limits, to me that is a fundamental property of G1 that should be describe somewhere (if it isn't already).

                          Testing just now I think what I am definitely seeing is the extruder racing up to its limits in order to try and match the movement axes, exactly as @deckingman describes. To me this seems counterintuitive and I would have expected the slowest axis to dictate the movement regardless of whether it is the extruder.

                          On review I am also seeing some skipping at 480mm/m which I didn't notice before so I'll probably cap that at 300mm/m, though even at that speed the axes are two far out of sync to stop the extruder racing away.

                          One option might be to reduce the maximum speed on the B axis temporarily in my prime Gcode to prevent this, I guess I can work out how much time the extruder needs to properly extrude the amount of filament I want then work out the fastest I can allow that axis to move while covering the distance needed.

                          @tfjield looks like you are correct, I just dropped minimum down with M203 I1 and did a move of 1mm and that now takes around a minute as expected instead of 2 seconds. So if G1 was working how I originally though (which it seems it is not) then it would have only been able to slow the axis to 30mm/m at the most, which is still pretty slow but no where near slow enough to extrude 50mm of filament.

                          undefined 1 Reply Last reply 22 Jun 2022, 10:35 Reply Quote 0
                          • undefined
                            gloomyandy @ardenpm
                            last edited by 22 Jun 2022, 10:35

                            @ardenpm The way that fedrate is applied to moves that include extrusion is not very obvious (and a little confusing), see https://3dprinting.stackexchange.com/questions/14668/details-of-marlins-feedrate-calculation for another description of what is probably going on...

                            undefined 1 Reply Last reply 22 Jun 2022, 11:00 Reply Quote 0
                            • undefined
                              ardenpm @gloomyandy
                              last edited by 22 Jun 2022, 11:00

                              @gloomyandy Mmm, this adds to the confusion for me since that description matches what my original assumption was:

                              Moves with a nonzero X, Y, or Z component: the feedrate is an ideal, desired speed in 3 dimensions, possibly limited by the max feedrates of each axis (including E) individually, as well as their acceleration profiles.

                              Specifically they say it is limited by the max feedrates of each axis, including the extruder. Though I guess since I am commanding it to move at a feedrate that is below all axes limits the moves are not limited at all, so the extruder is running up to its 3600mm/m limit. That lines up with what @deckingman was assuming as well.

                              In some testing now I can see if I artificially limit my movement axis speed limit the extruder can then keep up then I'm able to get a smooth axis movement over the length of the extrusion. However I need to calculate the expected time of the extrusion move, determine how slow to limit the movement axis to to make it take the same time and then limit its feedrate (then restore it afterwards). This does seem to work though.

                              undefined 1 Reply Last reply 22 Jun 2022, 11:12 Reply Quote 0
                              • undefined
                                deckingman @ardenpm
                                last edited by deckingman 22 Jun 2022, 11:12

                                @ardenpm
                                To understand it fully, you need to be able to comprehend the concept of 4 (or more) dimensional space (something that I find hard to do).

                                ...........my understanding was that is what you were assuming what is happening rather than what is intended to happen.

                                No, I'm not assuming anything. I had a similar query regarding the speeds of my UVA and B axis which run concurrently with X and Y but not necessarily over the same distances. This is how it was explained to me by @DC42 and he writes the firmware so he should know.

                                However I need to calculate the expected time of the extrusion move, determine how slow to limit the movement axis to to make it take the same time and then limit its feedrate (then restore it afterwards).

                                I've already told you how to that.

                                But hey, if you don't want to believe what I say, that's fine. I just wish I hadn't wasted so much of my time trying to help....

                                Ian
                                https://somei3deas.wordpress.com/
                                https://www.youtube.com/@deckingman

                                undefined 1 Reply Last reply 22 Jun 2022, 12:12 Reply Quote 0
                                • undefined
                                  ardenpm @deckingman
                                  last edited by 22 Jun 2022, 12:12

                                  No, I'm not assuming anything. I had a similar query regarding the speeds of my UVA and B axis which run concurrently with X and Y but not necessarily over the same distances. This is how it was explained to me by @DC42 and he writes the firmware so he should know.

                                  Great, that is what I was trying to ask (perhaps clumsily), I wasn't sure if this was known expected behaviour of the firmware or what you were trying to deduce from my explanation of what I was seeing (which could have meant a bug). Obviously if David says that's how it works, then that's how it works.

                                  However I need to calculate the expected time of the extrusion move, determine how slow to limit the movement axis to to make it take the same time and then limit its feedrate (then restore it afterwards).

                                  I've already told you how to that.

                                  Yes, and that's exactly what I used to do it, which was a very helpful idea (I just threw together a spreadsheet to do it by hand but should be able to put that into Gcode pretty easily as well). I only now had the opportunity to test it out. It also took me a few read throughs to fully grasp what was being proposed. I was just reiterating that what is needed is possible but requires some of the juggling you mentioned.

                                  But hey, if you don't want to believe what I say, that's fine. I just wish I hadn't wasted so much of my time trying to help....

                                  I'm not sure what gave that impression, your explanation and idea were definitely of help and appreciated.

                                  undefined 1 Reply Last reply 23 Jun 2022, 10:24 Reply Quote 0
                                  • undefined
                                    ardenpm @ardenpm
                                    last edited by 23 Jun 2022, 10:24

                                    So putting this together now that it is clear what's going on, I'm using a small macro which takes the same B, E and F parameters as my G1 calls but computes the feedrate limit for me, changes it then sets it back to the original value. This seems to be working well and I can now do a nice smooth drop of my priming platform while extruding at the needed rate. Obviously fairly specific to my use case but in case it's helpful to anyone else here it is.

                                    var defaultSpeed = move.axes[4].speed
                                    var extrusionTimeMinutes = param.E / param.F
                                    var newSpeed = abs(param.B - move.axes[4].userPosition) / var.extrusionTimeMinutes
                                    echo {var.newSpeed},{move.axes[4].userPosition},{param.B}
                                    if var.newSpeed < var.defaultSpeed
                                    M203 B{var.newSpeed}
                                    G1 B{param.B} E{param.E} F{param.F}
                                    M203 B{var.defaultSpeed}
                                    else
                                    G1 B{param.B} E{param.E} F{param.F}

                                    Thanks all for the lively discussion.

                                    undefined 1 Reply Last reply 23 Jun 2022, 10:29 Reply Quote 0
                                    • undefined
                                      gloomyandy @ardenpm
                                      last edited by 23 Jun 2022, 10:29

                                      @ardenpm Wouldn't it be easier just to compute a new feedrate and use it directly (as an F parameter) rather than setting a limit and relying on the firmware to apply it?

                                      undefined 1 Reply Last reply 23 Jun 2022, 10:50 Reply Quote 0
                                      • undefined
                                        ardenpm @gloomyandy
                                        last edited by 23 Jun 2022, 10:50

                                        @gloomyandy No, because I don't want to limit the E axis to that feedrate, I want it to run at the specified rate but the B axis much slower than normal. Without this the E axis will run up to its limit to try and sync with the short B axis move time. Without doing this I need to slow down the E axis too much.

                                        undefined undefined 2 Replies Last reply 23 Jun 2022, 11:30 Reply Quote 0
                                        • undefined
                                          deckingman @ardenpm
                                          last edited by 23 Jun 2022, 11:30

                                          @ardenpm I see what you are doing but why not keep it simple and just set M203 E300 (to set say 5mm/sec), then do the G1 move and use M203 E3600 (to restore the feedrate value)?

                                          Ian
                                          https://somei3deas.wordpress.com/
                                          https://www.youtube.com/@deckingman

                                          undefined 1 Reply Last reply 23 Jun 2022, 11:45 Reply Quote 0
                                          23 out of 43
                                          • First post
                                            23/43
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA