Incorrect extrusion amount on slow and/or small axis moves
-
I have a small purging platform on my
B
axis which I want to move down by about 1-2mm during the time I am extruding over the top of it. So I might have a command like this (let's say B is at 44 and E is relative as usual):G1 B42 E50 F480
I would expect this to pull in 50mm of filament over the time it takes for the B axis to move from 44mm to 42mm, however I am seeing significantly less than this being pulled in by the extruder (and I am not skipping steps). The feedrate requested is well below the limit of both the B axis and the extruder. If I slow it down with:
G1 B42 E50 F250
Then the extruder pulls in about the correct amount. I can reproduce the same type of behaviour with just the normal X axis extruding into air so it doesn't seem to be specific to my B axis.
It's obviously an unusual amount of filament to extrude with such a small change in axis position however this is for a purge and is exactly what I need to be doing. Is there are setting somewhere that is imposing a limit I'm not aware of?
My guess is I am also fundamentally misunderstanding something about how G1 moves are made. I would have thought, if I am positioned at X0 Y0 and call
G1 X10 F1
the extruder would move at a maximum of 1mm/m so the move should take at least 10 minutes (likely longer due to acceleration etc). However the moves are much faster than that, it is of course very slow but doesn't take anywhere near minutes to complete).What I'm trying to achieve is moving my B axis through that 2mm in about the time it takes to extrude 50mm of filament at an extrusion rate which would be reasonable for my extruder. Right now I am having to fake this somewhat by moving the E and B axis independently a bit at a time due to the above issue.
I'm on RRF 3.4.1 and I haven't configured pressure advance so that shouldn't be affecting it (I assume it defaults to being off).
-
Instead of using the letter B try changing your code to use U.
B is, by default, a rotary axis. That may be contributing to your problems.
Frederick
-
@fcwilt I configured B as a linear axis already though and as mentioned I can reproduce on X so I don't believe that is the issue. Was definitely one of my first thoughts as well.
-
At least I think I am doing that right. This is how my B-axis is defined:
M584 B9 R0 S0
-
@ardenpm said in Incorrect extrusion amount on slow and/or small axis moves:
At least I think I am doing that right. This is how my B-axis is defined:
M584 B9 R0 S0
That doesn't look right at all. The "9" after the "B" is the driver number but I'm not aware of any Duet board which has 10 stepper drivers (0 to 9). Usually, the driver number is in the format board.driver so 0.1 would be driver 1 on the main board, 2.3 would be driver number 3 on expansion board 2 etc. Although if no board number is specified, then the default would be the first (main) board. Unless maybe you have a old Duet2 Ethernet or Wifi with the Duex5 expansion board? I'm not sure if the drivers are numbered as a continuous block in that case.
As for your main issue, I'd suggest that you switch to relative positioning before doing your B axis move - at least for testing. So if you want to move it 2mm, use G91 followed by G1 B2 Ennn, then use G90 to put it back to absolute. The problem with using absolute coordinates is that you have to constantly remember where the B axis is. So if it happens to be at 44 and you send G1 B42, it'll move 2 mm. But if you repeat that command, then B will not move at all because it's already at 42.
I have a theory on what might be happening but I need to know the steps per mm, the acceleration and jerk settings for both the B axis and the extruder, and a couple of other things. So can you please post your complete config.g and config_override.g if you use it.
-
@ardenpm said in Incorrect extrusion amount on slow and/or small axis moves:
At least I think I am doing that right. This is how my B-axis is defined:
M584 B9 R0 S0
I think that's right. That's E6 on the DueX5?
-
I would still try changing to U just in case the R and S parameters are not actually doing what the documentation says they do.
Frederick
-
@fcwilt I can certainly test on U, though if it does the same thing with the X axis it seems unlikely that would make a difference. It's a bit of a pain to switch over given all of the config but will test.
@tfjield @deckingman Yes, correct, it's on a DuetX5 which is why the high motor number. Relative positioning is not really appropriate for my use case since I would then need to track the current position between tool changes due to differing tool heights. It's not an issue to keep track of with absolute since the tool change scripts are always moving the axis back to the same position and offsets are then used between tools.
Full configuration is attached below.
-
@ardenpm I've had a look at your config.g. I see from that, that this is a tool changer. Can you confirm that you are using Bowden tubes rather than direct drive? Can you do one quick test which is to remove the filament from the hot end and try your G1 Bnn Enn F480 without the hot end connected? My thinking is that 480mm/min being 8mm/sec is quite fast, especially if you use a 0.4mm nozzle and a standard hot end. So it might simply be that you are trying to push filament in faster than the hot end can melt and extrude it (or you may have a partial blockage). Either way, taking the hot end out of the equation will eliminate one possible cause.
-
@deckingman I will do some further experiments tomorrow when back at my printer. I have all direct drive Hemera extruders, thsoe under test do have 0.4mm nozzles however I haven't had any issues extruding that amount of filament at 480mm/m into free air when not including the other axis in the movement. I will try this again to double check though. Unfortunately since it's not a bowden I can't easily take the hotend out of the equation. I will say though that when the Hemera skips steps, it's usually fairly obvious. I could temporarily connect a bowden to that axis to be sure of course.
-
@ardenpm Thinking about this some more, if we say G1 B2 E50 F480, what we are actually saying is move the B axis by 2 mm at a feed rate of 480mm/minute while extruding 50mm of filament. Check my maths but a feed rate of 480mm/minute is 8mm /sec so a 2mm move will take 0.25 seconds. But then if we look at the extruder, because the extruder move and axis move are synchronised, we are saying move the extruder 50mm in 0.25 seconds which is a (crazy for a hot end) feed rate of 200 mm/sec or 12,000 mm/minute. But this will be capped to 3,600 mm/minute by your M203 setting for the extruders so the entire move will slow down by a factor of about 4. But 3,600mm/minute is 60mm/sec which is too fast I would suggest.
Essentially, if the feed rate applies to the axis and the extruder is in sync with the axis (in that it must start and stop it's move at the same time) then the feed rate for the extruder must vary proportionally with the ratio between the axis movement and the extruder movement - in this case 25 times higher.
Usually, extruder move lengths are significantly less than axis move lengths so the extruder usually moves much slower than the axis, but in this (unusual) case, the extruder move is greater than the carriage move by a factor of 25:1.
I guess what you would need to do is determine the maximum extruder feedrate for your hot end then divide this by 25 (or whatever the ratio of extruder move to axis move is) to determine the feedrate for the axis. Or you could change your M203 for the extruder to equate to the maximum feedrate but this might be unwise if you later changed to a bigger nozzle or higher melt rate capability extruder. Or you could just just use a slow feedrate
-
@ardenpm said in Incorrect extrusion amount on slow and/or small axis moves:
My guess is I am also fundamentally misunderstanding something about how G1 moves are made. I would have thought, if I am positioned at X0 Y0 and call
G1 X10 F1
the extruder would move at a maximum of 1mm/m so the move should take at least 10 minutes (likely longer due to acceleration etc). However the moves are much faster than that, it is of course very slow but doesn't take anywhere near minutes to complete).I found this question interesting and did a little searching. Turns out there is a minimum allowed feedrate for G1 (found in the docs for G1):
- For CNC users especially: RRF has a default minimum movement speed of 0.5mm/sec. In firmware 2.03 and later this can be changed using the I ('i') parameter of the M203 command.
And under M203 it's confirmed:
- Innn Minimum overall movement speed (firmware 2.03 and later), default 30mm/min
So your
G1 X10 F1
is essentiallyG1 X10 F30
and should take about 20 seconds. Does that sound right? -
@deckingman I'm following this thread with interest!
Everything you said makes sense to me. You said that because his extrusion rate is capped the entire move will slow down. Silly question, but do we know that that is actually what happens? Is it possible that the move just extrudes less material because it extrudes at 3,600 mm/min for 0.25 sec? But if that were the case, even at a feedrate of 250 mm/min it would still only extrude 28.8 mm of filament...
-
@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). -
@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? -
@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.
-
@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
-
@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.
-
@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
-
@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.