Impossible to set extruder micro stepping above 16ms
-
I'm using a Duet3 wit RRF 3.11 and a Pi4/4GB on a CoreXY
I would like to set micro stepping of the extruder to other values than 16ms, but as soon as I do this, I get underextrusion. Same behaviour regardless wheater I place M92 before M350 or visa versa. Did read the instructions for both carefully and cannot find any solution.
Here is my config.gAny help appreciated.
-
@observatoer What is the specification of your extruder motor? I see it has quite a high motor current and steps per mm, so maybe it is high inductance and can't handle a high step rate.
How are you measuring the underextrusion, with the filament sensor defined in config.g? Or visually, when printing, or some other method? Have you tested that your extruder can cope with the speed, acceleration and jerk set in config.g? What are your slicer extrude and retraction settings?You have a lot of custom settings for E in your config.g:
; Drives M569 P0 S0 D2 ; Extruder; physical drive 0 goes backward <<Extruder>> SpreadCycle M584 E0 X1 Y2 Z3:4:5 ; set drive mapping: Achtung. Z Motoren P3=Z3,P4 = Z4 und P5=Z5!! Sonst funktioniert Leveling nicht. M92 X200 Y200 Z3200 E822 ; Steps/mm (for the default 1/16 microstepping) M350 E16 I0 ; configure microstepping w/o interpolation. can be adjusted by M350 in Terminal M906 X{2000 * 0.95} Y{2000 * 0.95} Z{2000 * 0.8} E1119 I20 ; set motor currents (mA) and motor idle factor in per cent M203 X16000.00 Y16000.00 Z800.00 E3600.00 ; set maximum speeds (mm/min) = 200mm/s. M201 X1400.00 Y1400.00 Z80.00 E2000.00 ; set max. accelerations (mm/s^2) M566 X720.00 Y720.00 Z40.00 E1520.00 ; set maximum jerk (instantaneous speed changes) (mm/min) M569 P0 V250 H5 ; E - Set tpwmthrs so StealthChop runs up to 73.6mm/sec M915 E T125 ; E - Set CoolStep threshold to 7.2mm/sec
The above list is the settings that a relevant to E, pulled from the config.g. I'm listing these in case anyone spots an issue.
Overall, I would try simplifying the setup for E, then testing what maximum speed/acceleration/jerk you can achieve. Then add the custom settings, and see if this affects the maximum speeds. Unfortunately, there's no magic for this, you just need to test.
Ian
-
Thanks for the check. I have changed:
- Extruder motor LDO-42STH25-1404 by same motor
- Placed M92 in front of M350
- Placed M92 in front of M350
- Reduced Jerk to 500
- Reduced current to 800
- Reduced the speed
- Retraction is 0.4mm @30mm/s
- PA = 0.025
- Tested extrusion of 100mm wich was OK, but the immediately after this started print is heavily under extruded.
I cannot find any parameter except exactly telling the steps in M92 and exactly the micro steps in M350. This also works only for 16 micro steps.
I have to assume, this is a bug in 3.11. or a hardware defect on my Duet3.
-
Hi,
Have you tried testing without any special settings for the extruder?
How did you perform the 100mm extrusion test?
Thanks.
Frederick
-
@observatoer To be sure, do this
M350 X16 Y16 Z16 E16 ; Set microstepping to 16X
M92 X200 Y200 Z3200 E822; set steps per mm for 16 x microsteppingThen change micro-stepping by using a second M350 - e.g.
M350 E32 ; change micro-stepping for the extruder to 32X. This will recalculate the correct steps per mm automatically without needing a second M92.
You can enter the second M350 via the console at any time. So for example, use only the first M350 and M92 in your config.g, calibrate the extruder by extruding 100mm of filament at say 5mm/sec. Then enter the second M350 (E32) and repeat the 100mm extrusion. Let us know if you still get 100mm or something different.
-
@fcwilt Yes, I have removed all the detail setting for E.
The 100m test is just the usual 120mm marking on the filament and then extruding 100mm at 5mm/s speed. Measuring if there are 20mm left at the end.Non of the changes returned a normal extrusion. I gave up and set the extruder to 16 micro steps which works.
-
@deckingman
Thank you. This is exactly where I started and I followed your guideline and the description of M350 and M92. Non of this worked which I assume there is a bug.I did 100mm testing with all the settings and got exactly 100mm filament thru the extruder. Just not during printing, where there is a very obviously under extrusion happening.
-
@observatoer said in Impossible to set extruder micro stepping above 16ms:
@deckingman
Thank you. This is exactly where I started and I followed your guideline and the description of M350 and M92. Non of this worked which I assume there is a bug.I did 100mm testing with all the settings and got exactly 100mm filament thru the extruder. Just not during printing, where there is a very obviously under extrusion happening.
I suggest that you change the title of this thread which is quote "Impossible to set extruder micro stepping above 16ms". Because we have now established that it is indeed possible.
Given that you can extrude 100mm of filament with both 16X and 32X micro stepping, then your under extrusion problem during printing must lie elsewhere. What print speed, layer height, filament type and temperature are you using? What do you have in slicer start gcode.
What happens if you start a print with the configuration as I described with 16X micro stepping, then change part way through by sending M350 E32? Do you immediately get the under extrusion or is there a delay?
Can you share a sample of the gcode file that you are experiencing problems with.
-
@observatoer Are you saying it calculates the steps per mm incorrectly after changing the microstepping with M92? eg:
27/08/2020, 21:56:37 M350 Microstepping - X:16(on), Y:16(on), Z:16(on), E:16(on) 27/08/2020, 21:56:41 M92 Steps/mm: X: 80.000, Y: 80.000, Z: 400.000, E: 420.000 27/08/2020, 21:56:55 M350 E256 27/08/2020, 21:56:58 M350 Microstepping - X:16(on), Y:16(on), Z:16(on), E:256 27/08/2020, 21:57:04 M92 Steps/mm: X: 80.000, Y: 80.000, Z: 400.000, E: 6720.000
If you can show the output of M350 and M92 before and after a change, that would be helpful.
Otherwise, look at the motor. According to the specs here, https://www.filastruder.com/products/ldo-stepper-motors-all-types it has an inductance of 5.5mH. If you put the rest of the numbers into the EMF calculator at https://www.reprapfirmware.org/, you get:
(Ignore the Drive settings and just put the steps per mm in)
As soon as you double the steps per mm to 1600, you get back EMF problems, and the speed at which motor torque drops halves:
This only gets worse as you increase motor current or steps per mm. I expect that's where your problem is.Ian
-
@droftarts Thanks again for your help in solving this challenge.
I did some tests, where I stated with the config.g values for stepping:
M92 X200 Y200 Z3200 E822
M350 E16 X32 Y32 Z16 E16 I1
M906 E500
The system voltage is set to 29.6V @LRS-350-24.Then, I did some changes with M350 to see the results. Right in the beginning, I changed the Extruder from E16 to M350 E8. The result was not right because it was not 411 but 205.500.
The print started and did go on with a under extrusion. The layer height was just 0.10-0.11 instead of 0.2mm.I got an under extrusion just from the start even so the values in the config.g are correct.
Here is a photo of the print (please ignore the abused Fight Club print surface)
Here the log of the print with the changes and the feedback of the Duet3:
28.8.2020, 10:46:47 Printing paused at X217.4 Y41.2 Z0.4
28.8.2020, 10:46:47 Printing paused at X217.4 Y41.2 Z0.4
28.8.2020, 10:45:40 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000
28.8.2020, 10:45:36 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16
28.8.2020, 10:45:34 M350 E16
28.8.2020, 10:45:20 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 3288.000
28.8.2020, 10:45:15 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:64
28.8.2020, 10:45:14 M350 E64
28.8.2020, 10:44:46 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 1644.000
28.8.2020, 10:44:41 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32
28.8.2020, 10:44:38 M350 E32
28.8.2020, 10:44:09 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16 <<<<<<< correct layer hight and correct adjustment of microsteps and steps/mm. Layer = 0.2mm
28.8.2020, 10:44:03 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000 <<<<<<< Until here, the layer hight was just 0.10-0.11 instead of the gcode value of 0.2mm
28.8.2020, 10:43:59 M92 E822
28.8.2020, 10:43:15 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 411.000
28.8.2020, 10:43:10 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16
28.8.2020, 10:43:04 M350 E16
28.8.2020, 10:42:37 M906
Motor current (mA) - X:1900, Y:1900, Z:1600, E:800, idle factor 20%
28.8.2020, 10:42:34 M906 E800
28.8.2020, 10:41:56 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 6576.000
28.8.2020, 10:41:51 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:256
28.8.2020, 10:41:48 M350 E256
28.8.2020, 10:40:38 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000
28.8.2020, 10:40:34 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32
28.8.2020, 10:40:25 M350 E32
28.8.2020, 10:39:46 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 3288.000
28.8.2020, 10:39:40 M350 E128
28.8.2020, 10:39:09 M906
Motor current (mA) - X:1900, Y:1900, Z:1600, E:450, idle factor 20%
28.8.2020, 10:39:06 M906 E450
28.8.2020, 10:37:50 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 1644.000
28.8.2020, 10:37:43 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:64
28.8.2020, 10:37:37 M350 E64
28.8.2020, 10:36:36 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000
28.8.2020, 10:36:29 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32
28.8.2020, 10:36:26 M350 E32
28.8.2020, 10:36:11 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16
28.8.2020, 10:36:06 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 411.000
28.8.2020, 10:35:23 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 411.000
28.8.2020, 10:35:19 M)2
Error: Failed to parse major M-code number ()2)
28.8.2020, 10:35:13 M350 E16
28.8.2020, 10:34:47 M906
Motor current (mA) - X:1900, Y:1900, Z:1600, E:500, idle factor 20%
28.8.2020, 10:34:42 M906 E500
28.8.2020, 10:33:09 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 205.500 <<<<<<Here, the stepping was changed from initial E16 to E8, but the steps have been divided by 4 instead of 2 <<<<<<
28.8.2020, 10:33:00 M350 E8
28.8.2020, 10:30:36 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.00028.8.2020, 10:29:04 Leadscrew adjustments made: -0.050 0.125 0.229, points used 4, (mean, deviation) before (0.135, 0.154) after (-0.000, 0.107)
28.8.2020, 10:29:04 Height map loaded from file heightmap.csv
28.8.2020, 10:29:04 Warning: The height map was loaded when the current Z=0 datum was not determined. This may result in a height offset.
28.8.2020, 10:27:13 M32 "0:/gcodes/Extrusion_test_CoreXY_PLA_0.2000mm.gcode"
File 0:/gcodes/Extrusion_test_CoreXY_PETG_0.2000mm.gcode selected for printing
28.8.2020, 10:22:42 Upload of Extrusion_test_CoreXY_PLA_0.2000mm.gcode successful after 0s*Config.g started with these values:
M92 X200 Y200 Z3200 E822
M350 E16 X32 Y32 Z16 E16 I1Basically, I see two issues:
- The start extrusion is not right, even so the parameters are correct.
- The first calculation by changing with M350 is wrong.
I hope, this helps to find or explain the topic.
-
Another interesting thing:
If I have a config.g with this values:
M92 X200 Y200 Z3200 E822
M350 E16 X32 Y32 Z16 E32 I1..and I switch of and on the machine, I get this in the console:
28.8.2020, 12:07:28 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000
28.8.2020, 12:07:22 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16(on) <<<<E16 instead of E32 <<<<Look like the steps/mm are correct calculated for X, Y and Z, but not for E.
Checked the config.g for other instances of M92/M350 but there are non. The above ones are the only ones.
-
@observatoer you have two E entries in that config line. There's and E16 at the start, then an E32 at the end
@observatoer said in Impossible to set extruder micro stepping above 16ms:
M350 E16 X32 Y32 Z16 E32 I1
I wonder if this could be the source of your issues?
-
@engikeneer Thanks for pointing it out. It was a mistake, introduced by me with this test. To reconfirm, I have done the test again and started with E32 in M92.
Here is the console log of my changes during the print:
28.8.2020, 14:12:56 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 1644.000
28.8.2020, 14:12:52 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32
28.8.2020, 14:12:49 M350 E32
28.8.2020, 14:12:29 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16
28.8.2020, 14:12:22 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000 >>>>> correcting the steps healed the under extrusion. Normal layer from here
28.8.2020, 14:12:15 M92 E822
28.8.2020, 14:12:05 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 411.000
28.8.2020, 14:11:59 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:16
28.8.2020, 14:11:15 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 411.000
28.8.2020, 14:11:10 M350 E16
28.8.2020, 14:10:08 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 1644.000
28.8.2020, 14:10:03 M350 E64
28.8.2020, 14:09:28 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000
28.8.2020, 14:09:24 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32
28.8.2020, 14:09:20 M350 E32
28.8.2020, 14:08:48 M92
Steps/mm: X: 400.000, Y: 400.000, Z: 3200.000, E: 822.000 >>>>undee extrusion from start
28.8.2020, 14:08:42 M350
Microstepping - X:32(on), Y:32(on), Z:16(on), E:32(on)<<<<< startet with this config.g
M92 X200 Y200 Z3200 E822
M350 X32 Y32 Z16 E32 I128.8.2020, 14:07:33 Leadscrew adjustments made: 0.148 0.125 0.051, points used 4, (mean, deviation) before (0.096, 0.035) after (-0.000, 0.005)
28.8.2020, 14:07:33 Height map loaded from file heightmap.csv
28.8.2020, 14:05:26 M32 "0:/gcodes/Extrusion_test_CoreXY_PLA_0.2000mm.gcode"
File 0:/gcodes/Extrusion_test_CoreXY_PLA_0.2000mm.gcode selected for printingSame wrong start and miscalculation for E.
-
@observatoer I don’t see any incorrect calculation. You said you started with M350 E32 and M92 E811. It should have been M350 E16, with E811 steps per mm. So it’s not surprising it underextruded, which you eventually correct with M92.
Do you really need more extruder resolution than 811 steps per mm, at 16x microstepping?! Like you’ve already found out, your motor can’t handle it at the speeds you print.
Ian
-
I understand, if I setup E to 32 and ask by M350, to get the correct steps/mm wich would be in this case 1644. But, it is giving me 822 which is wrong for E32. And I get under extrusion.
Interesting for me, the values for X, Y and Z are calculated and displayed correct for X32, Y32 and Z16. Just not for E.The stepper can handle up to 256 micro steps and reports the astronomic step count correctly, if I correct the initially wrong handled E value. No under extrusion. Just questionable, if it's really extruding wis 256 micro steps or just reporting a value.
-
<<<<< startet with this config.g
M92 X200 Y200 Z3200 E822
M350 X32 Y32 Z16 E32 I1This is what you said it is set to in config.g. If you send M350 E32, nothing has changed, so steps per mm are still 822. When you sent M350 E64, the steps per mm were correctly doubled. This isn’t the firmware getting it wrong!
The stepper can handle up to 256 micro steps
Of course it can. At slower step rates. But microstepping beyond 16x is, in general, pointless. The spec sheet for your motor says the step accuracy is 9 degrees +/- 5% which is pretty standard. That means that there’s a 10% swing in accuracy at FULL step. It’s why Gecko drives only use 10x microstepping; you won’t get any more accuracy from the motor by increasing microstepping. However, using interpolation is worth it, as the driver can smooth the transition between steps.
and reports the astronomic step count correctly
Do you mean the Duet reports the step count? The motor definitely doesn’t.
If you send M122 while printing, you can see if the motor is skipping steps. Look at the ‘Driver’ lines, eg:
Driver 0: standstill, reads 37420, writes 12 timeouts 0, SG min/max 0/0 Driver 1: standstill, reads 37422, writes 11 timeouts 0, SG min/max 0/0 Driver 2: standstill, reads 37422, writes 11 timeouts 0, SG min/max 0/0 Driver 3: standstill, reads 37422, writes 11 timeouts 0, SG min/max 0/0 Driver 4: standstill, reads 37423, writes 11 timeouts 0, SG min/max 0/0 Driver 5: standstill, reads 37423, writes 11 timeouts 0, SG min/max 0/0
The ‘SG min/max’ shows the minimum and maximum torque on the motor. If ‘max’ is 1023, the motor has stalled/skipped steps.
The issue here is that you have a pancake stepper as an extruder motor, with high inductance, that cannot step fast enough for the speed you want to print at, when you increase the E steps per mm. Get a more appropriate motor if you want to use high step rate and fast speed.
Ian
-
@droftarts Thank you Ian. Is there any specific motor you would recommend for this application?
-
@observatoer I don’t really know what you’re trying to achieve. Faster speeds? On an extruder there’s many other limitations, eg how quick you can melt filament. Higher accuracy, ie more steps per mm? Gearing down the extruder would be a better bet than increasing microstepping for the reason I said above, but you may lose high speed. Both? Good luck!
Ian
-
@droftarts In the first place, I would really like to understand the behaviour of this software. Not more and not less.
As per description, if I set the M92 line for the correct steps at 16 micro step, I can change the steps/mm by typing M350 plus the command and value for X, Y, Z and E.
This is what I have done with this line:M92 X200 Y200 Z3200 E822
These are the correct steps for a rate of 16 micro steps.
The next line in config.g is this:
M350 X32 Y32 Z16 E32 I1
I understand, the M350 command adapts step rates other than the baseline 16 in M92 to the mentioned values.
If I then type M92, I shall get the new calculated values for X, Y Z and E. Correct?
Why do I get the correct new M92 value vor X(=400@32), Y(=400@32) and Z(=3200@16) and an wrong Value of E. It shall be E1644 (for the requested 32) and is reported as E844.
Is there a difference, why these values are reported like this?And regarding the stepper; I did reduce the current to 500mAh but this did not change anything regarding the above mentioned behaviour. Sorry, if I cannot describe it any better,
-
@observatoer right, I see where the problem is. If you set M92 and M350 in config.g, that’s the values used. Even if M350 is after M92, the M92 definition is not assumed to be at 16x microstepping. It would be strange to explicitly set something in the config.g, and for the firmware to then alter it. If you exclude M350 from config, or the E parameter, I would expect it defaults to 16x.
Any subsequent M350 changes M92. I appreciate this is not clear in the Gcode entries for M92 and M350.
Edit: the configuration tool puts M350 in config.g before M92. Though I think the order doesn’t matter in confi.g.
Ian