Microstepping and extruder performance

  • I post this both to get some feedback as to why my journey so far has been as it has, and also to maybe help others undertaking the same journey. Apologies for the length of the post.
    Some weeks ago I bought a Duet Wifi & 7" PanelDue to upgrade my Flsun I3 clone which was running a MKBase GEN L.
    In the process, I also changed to a 24 volt PSU, added an enclosure and a few other things, so I fully expected a it of tweaking would be needed.
    I read all the tutorials etc and ran the configurator using as much of the old Marlin data as was applicable along with any recommendations for various settings, such as using relative extrusion, firmware retracts etc etc. and set my drivers to 16 microsteps plus interpolation with currents around 80% (I have all metal mounts so a little hot running shouldn't be a problem).
    My initial print tests were simple test cubes and I was really excited about the results with very little ringing evident and with how quiet it was.
    But as soon as I tried to print a benchy, the results were horrendous in any area where any amount of retraction was evident.
    Also there was massive amounts of stringing and bridges were horrible.
    This led me down a long path of reducing temps, changing retaction speeds, distances, accelerations, pressure advance, coasting, z hop etc etc until I had a a dozen benchys and extraction towers ranging from complete print failures to just horrible but still nowhere near as good as the GEN L + Marlin. I'd also rechecked steps per mm and tightened and adjusted everything on the printer half a dozen times.
    In desperation I finally decided to try to go back to as close to my GEN L configuration (which printed fairly well) as I could and turned off firmware retraction and relative extrusion.
    The results were much better, although there was still more stringing than I'd like on the retraction towers, but the benchy was not bad.
    Finally I decided that the only thing left was microstepping, so I changed the extruders from 16 + interpolation to straight 256 microsteps (leaving extrusion to absolute).
    The results were immediately vastly improved.
    To see what was the major contributor I switched back to relative extrusion and the results were also very good.
    There's still some tweaking to do and I'll probably go back over accelerations etc, but I'm no longer doubting why I bought this thing.
    Now I HAD read of several people having issues with very short moves when using pressure advance and certain microsteps etc, but never figured that a "simple" benchy would bring these issues to bear.

    I post my configurations and images for information, but as I said I'll now have to go back over these as I had made many changes chasing this rabbit.
    I appreciate any comments that might help me and others get our heads around this issue.


    Firmware Name: 	RepRapFirmware for Duet 2 WiFi/Ethernet
    Firmware Electronics: 	Duet WiFi 1.02 or later
    Firmware Version: 	2.02RC7(RTOS) (2018-12-22b2)
    WiFi Server Version: 	1.21
    Web Interface Version: 	1.22.6


    ; Configuration file for Duet WiFi (firmware version 1.21)
    ; executed by the firmware on start-up
    ; generated by RepRapFirmware Configuration Tool v2 on Sun Jan 06 2019 15:30:46 GMT+1000 (Australian Eastern Standard Time)
    ; General preferences
    G90                                                  ; Send absolute coordinates...
    M83                                                  ; ...but relative extruder moves
    ; Network
    M550 P"Flsun I3 Duet"                                ; Set machine name
    M552 S1                                              ; Enable network
    M586 P0 S1                                           ; Enable HTTP
    M586 P1 S0                                           ; Disable FTP
    M586 P2 S0                                           ; Disable Telnet
    ; Drives
    M569 P0 S1                                           ; Drive 0 goes forwards
    M569 P1 S0                                           ; Drive 1 goes backwards 
    M569 P2 S1                                           ; Drive 2 goes forwards 
    M569 P3 S1                                           ; Drive 3 goes forwards
    M569 P4 S0                                          ; Drive 4 goes backwards
    M350 X16 Y16 Z16 E256:256 I1                           ; Configure microstepping with interpolation
    M92 X100.00 Y100.00 Z400.00 E1433.47:1433.47        ; Set steps per mm
    M566 X600.00 Y500.00 Z60.00 E900.00:900.00           ; Set maximum instantaneous speed changes (mm/min)
    M203 X40000 Y30000 Z1500 E3600:3600      ; Set maximum speeds (mm/min)
    M201 X1800.00 Y1600.00 Z200.00 E1200.00:1200.00           ; Set accelerations (mm/s^2)
    M906 X1250.00 Y1250.00 Z1300.00 E1300.00:1300.00 I30 ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30                                              ; Set idle timeout
    ; Axis Limits
    M208 X0 Y-13 Z0 S1                                     ; Set axis minima
    M208 X213 Y185 Z180 S0                               ; Set axis maxima
    ; Endstops
    M574 X1 Y1 S1                                        ; Set active high endstops
    ; Z-Probe
    M574 Z1 S2                                           ; Set endstops controlled by probe
    M307 H3 A-1 C-1 D-1                                  ; Disable heater on PWM channel for BLTouch
    M558 P9 H5 F120 T6000                                ; Set Z probe type to bltouch and the dive height + speeds
    G31 P500 X-5 Y-37 Z2.34                              ; Set Z probe trigger value, offset and trigger height
    M557 X10:180 Y0:155 S20                             ; Define mesh grid
    ; Heaters
    M307 H0 B0 S1.00                                     ; Disable bang-bang mode for the bed heater and set PWM limit
    M305 P0 T100000 B4138 R4700                          ; Set thermistor + ADC parameters for heater 0
    M143 H0 S130                                         ; Set temperature limit for heater 0 to 130C
    M305 P1 T100000 B4138 R4700                          ; Set thermistor + ADC parameters for heater 1
    M143 H1 S280                                         ; Set temperature limit for heater 1 to 280C
    M305 P2 T100000 B4138 R4700                          ; Set thermistor + ADC parameters for heater 2
    M143 H2 S280                                         ; Set temperature limit for heater 2 to 280C
    ; Calibrate MCU temp
    M912 P0 S-4
    ; Set PID autotune parameters
    M307 H0 A94.1 C310.3 D14.7 S0.60 V24.0 B0
    M307 H1 A211.2 C89.3 D3.6 S0.70 V24.0 B0
    M307 H2 A266.9 C105.6 D4.3 S0.70 V24.0 B0
    ; Fans
    M106 C"Part Cooling_Fan" P0 S0.5 I0 F500 H-1 B0.5                              ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 C"Hotend_Fan" P1 S1 I0 F500 H1:2                           ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 C"Control_Fan" P2 T40:65 H100:101:102 L0.3			; Set fan 3 value, PWM signal inversion and frequency. Thermostatic control is turned on
    ; Tools
    M563 P0 S"Left_Nozzle" D0 H1                         ; Define tool 0
    G10 P0 X-18 Y0 Z0                                    ; Set tool 0 axis offsets
    G10 P0 R0 S0                                         ; Set initial tool 0 active and standby temperatures to 0C
    M563 P1 S"Right_Nozzle" D1 H2                        ; Define tool 1
    G10 P1 X0 Y0 Z0                                     ; Set tool 1 axis offsets
    G10 P1 R0 S0                                         ; Set initial tool 1 active and standby temperatures to 0C
    ;Set pressure advance 
    ;M572 D0:1 S0.4
    ; Set retraction
    M207 S2.5 F3000 T3000 Z0.2
    ; Custom settings
    M200 D1.75                                                      ; set all extruder filament diameters to 1.75mm
    G29 S1                                                          ; Load previously set bed map
    M376 H10                                                        ; set bed compensation taper (H10 means taper over 10mm)
    ; Automatic saving after power loss is not enabled
    ; Custom settings are not configured
    ; Miscellaneous
    T0                                                   ; Select first tool

    Cura Start G Code

    G4 S4 ; Wait 4 Seconds for PanelDue
    G21 ;metric values
    M106 P0 S0;start with the fan off
    M280 P3 S160; Turn off BL Touch Alarm
    G92 X0 Y0 Z0 ; set co-ordinates to zero to allow movement before homing
    G91 ; Switch to use Relative Coordinates
    G1 Z+10 ; makes sure the nozzle & BL Touch isn't going to hit the bed or clips when it homes
    G90 ; Switch back to using Absolute Coordinates
    G10 P0 R{material_standby_temperature} S{material_print_temperature} (set standby and active temperatures for tool 0)
    G10 P1 R{material_standby_temperature} S{material_print_temperature} (set standby and active temperatures for tool 1)
    M291 S0 T3  Homing...
    G28; Home All
    M190 S{material_bed_temperature_layer_0} 	; heat bed
    M291 S0 T3  Waiting for temps...
    G01 X0 Y0 Z0.2 F1200 ; move to edge to wipe any oozed filament
    G0 X1 Y100 F1200 E3 ; wipe and extrude
    G0 Z15 ; lift head
    M291 S0 T3  Printing...;Put printing message on screen
    M83 ; Set extruder to relative movment
    G92 E0 ; reset extruder

    4_1549020085955_IMG_1120.jpg 3_1549020085955_IMG_1119.jpg 2_1549020085955_IMG_1118.jpg 1_1549020085955_IMG_1095.jpg 0_1549020085954_IMG_1094.jpg

  • @owend That all makes perfect sense. You might find this post I did on my blog interesting https://somei3deas.wordpress.com/2018/06/08/why-16x-micro-stepping-is-a-bad-idea-with-mixing-hot-end/

    It was aimed at mixing hot ends where extrusion amounts can be down to 1% of the total. But a quick check on your config.g shows that your steps per mm @16x would be (1433/256x16) 89. That would indicate a direct drive extruder so if you do the maths, you'll see why you need higher micro-stepping for small segment lengths.

    The argument about absolute vs relative extrusion is an old and endless one, but if you think about, the firmware must convert absolute extruder move to relative moves.

  • @deckingman
    I had actually read your blog in my search for answers, but as I said it didn't really seem it could apply.
    After all, I was getting very good results with my GEN L / Marlin setup with 16 microsteps.
    In fact fixed 16 microsteps would have been my next test.

    I'm a little surprised I couldn't find more people having the same issues, because there must be LOTS of direct drive extruders in use and anyone going to a board capable of 256 interpolated steps is almost certainly going to try it believing it has to be better.
    So I'm still unsure what the difference is between the way Marlin and RRF handle movement that gives such different results.
    It may also go some way to explaining why I didn't think the TMC2130 driver upgrade I tried on the GEN L before going to Duet didn't live up to the hype, because in that case I was using interpolation on that as well.

  • administrators

    @OwenD , are you certain that you were running firmware 2.02RC7 throughout all this testing, or did you upgrade part way through? You have very low extruder steps/mm @ x16 microstepping, and there was a bug fix for low extruder steps/mm at 2.02RC6.

    As your extruder has such a low steps/mm value, it's a good idea to use higher than x16 microstepping. You may find that your maximum extruder speed is restricted at x256 microstepping. If so then I suggest you use x128 microstepping so as to put your extruder steps/mm in the 400 to 900 range.

    You are running release candidate firmware, and I recommend that you upgrade to the current stable release, which is 2.02. If you wish to test your printer with x16 microstepping on firmware 2.02, and you get the same bad results, then I'll revisit the bug fix for low extruder microstepping. I tested its effect using artificial moves not an actual print, because only one of my printers has an extruder drive with low microstepping, and that one doesn't show any problems at x16 microstepping.

    It's also possible that it was microstep interpolation that was causing the issues. The interpolation on Trinamic drivers only works well when the steps/second rate changes only slowly, and that might not be the case when printing short segments using extruders with low microstepping. So x16 without interpolation might have worked better than x16 with interpolation.

  • @dc42
    Hi David
    No, initially I was running 2.02. I installed 2.02RC7 when no amount of tweaking seemed to be getting me anything close to a good print.
    I'll switch back to 2.02 stable over the weekend and run tests at 16 without interpolation, 128 & 256 and post the results.
    Just to confirm this is the recommended firmware to carry out these tests?

  • administrators

    Yes, that's the current stable firmware.

  • OK..
    I reinstalled 2.02 and ran the exact same G Code with various micro-stepping settings.
    This is with a direct drive extruder with aprox 350mm bowden.
    Unfortunately I ran out of orange after the first test, so had to change to black.
    Overall, I think 128 microsteps gave the best results.
    On 256, some underextrusion seems evident around the bow directly in line with the anchor chain hole.
    Both the 16 microstep tests seem over extruded in this area.

    I didn't stay and watch most of the prints, but I was nearby during the 16 microstep without interpolation test and I noticed that on occasion there seemed to be steps being missed during un-retract (G11) moves.

    Based on this I'll now stick with 128 microsteps on the extruders and 16 with interpolation on X, Y & Z and start playing with pressure advance and non linear extrusion to fine tune it.

    It might be worth putting some information in the setup pages to the effect that with direct drive extruders, users should select higher range fixed microsteps rather than use interpolation.

    3_1549162438637_256 benchy.jpg 2_1549162438637_128 benchy.jpg 1_1549162438637_16 benchy no int.jpg 0_1549162438637_16 benchy with int.jpg

  • administrators


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