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

[3.3] 6HC+3HC+SBC Stuttering Motion on Small Contiguous Segments

Scheduled Pinned Locked Moved Solved
Tuning and tweaking
3
8
555
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
    poofjunior
    last edited by poofjunior 30 Aug 2021, 18:53

    Hey folks, I've got an issue that looks eerily similar to this one. In a nutshell, a series of small contiguous line segments (like the hull of a Benchy) cause the printer head's XY motion to "stutter" as it travels through those moves. For slow speeds, this manifests as blobs. For faster speeds, this looks like smaller blobs but can also look like weird discolorations (testing on a somewhat translucent filament).

    I've tried:

    • running prints with XY Jerk cranked up to 3000 mm/sec
    • running prints with the firmware on 3.3 on both the 6HC and 3HC expansion

    but the problem persists, and I can visually observe the print head stuttering (and hear motion slow down too) during these sorts of moves.

    My setup is:

    • 1x Duet 6HC Mainboard + 1x Raspberry Pi 4 (SBC Mode) connecting to XYZZZU motor outputs on a Jubilee
    • 1x 3HC Expansion board connected to an Orbiter Extruder and copper E3D V6 Hotend

    Diagnostic outputs for firmware versions are:

    M122 B0
    === Diagnostics ===
    RepRapFirmware for Duet 3 MB6HC version 3.3 (2021-06-15 21:45:47) running on Duet 3 MB6HC v0.6 or 1.0 (SBC mode)
    Board ID: 08DJM-956L2-G43S4-6J1FG-3SJ6L-KB6UG
    Used output buffers: 1 of 40 (15 max)
    === RTOS ===
    Static ram: 150904
    Dynamic ram: 61808 of which 456 recycled
    Never used RAM 141024, free system stack 202 words
    Tasks: SBC(ready,5.0%,328) HEAT(delaying,0.0%,331) Move(notifyWait,0.0%,352) CanReceiv(notifyWait,0.0%,799) CanSender(notifyWait,0.0%,374) CanClock(delaying,0.0%,339) TMC(notifyWait,7.2%,93) MAIN(running,87.8%,922) IDLE(ready,0.0%,29), total 100.0%
    Owned mutexes: HTTP(MAIN)
    === Platform ===
    Last reset 00:01:40 ago, cause: power up
    Last software reset at 2021-08-23 12:37, reason: User, none spinning, available RAM 138136, slot 0
    Software reset code 0x0012 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0440f000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
    Error status: 0x00
    Step timer max interval 155
    MCU temperature: min 36.2, current 36.5, max 36.5
    Supply voltage: min 24.0, current 24.0, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes
    12V rail voltage: min 12.0, current 12.1, max 12.1, under voltage events: 0
    Heap OK, handles allocated/used 0/0, heap memory allocated/used/recyclable 0/0/0, gc cycles 0
    Driver 0: position 0, standstill, reads 17703, writes 0 timeouts 0, SG min/max not available
    Driver 1: position 0, standstill, reads 17701, writes 0 timeouts 0, SG min/max not available
    Driver 2: position 0, standstill, reads 17701, writes 0 timeouts 0, SG min/max not available
    Driver 3: position 0, standstill, reads 17701, writes 0 timeouts 0, SG min/max not available
    Driver 4: position 0, standstill, reads 17702, writes 0 timeouts 0, SG min/max not available
    Driver 5: position 0, standstill, reads 17702, writes 0 timeouts 0, SG min/max not available
    Date/time: 2021-08-30 19:18:23
    Slowest loop: 0.29ms; fastest: 0.04ms
    === Storage ===
    Free file entries: 10
    SD card 0 not detected, interface speed: 37.5MBytes/sec
    SD card longest read time 0.0ms, write time 0.0ms, max retries 0
    === Move ===
    DMs created 125, maxWait 0ms, bed compensation in use: none, comp offset 0.000
    === MainDDARing ===
    Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
    === AuxDDARing ===
    Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
    === Heat ===
    Bed heaters = 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamberHeaters = -1 -1 -1 -1
    === GCodes ===
    Segments left: 0
    Movement lock held by null
    HTTP* is doing "M122 B0" in state(s) 0
    Telnet is idle in state(s) 0
    File is idle in state(s) 0
    USB is idle in state(s) 0
    Aux is idle in state(s) 0
    Trigger* is idle in state(s) 0
    Queue is idle in state(s) 0
    LCD is idle in state(s) 0
    SBC is idle in state(s) 0
    Daemon is idle in state(s) 0
    Aux2 is idle in state(s) 0
    Autopause is idle in state(s) 0
    Code queue is empty.
    === CAN ===
    Messages queued 27, received 39, lost 0, longest wait 0ms for reply type 0, peak Tx sync delay 4, free buffers 49 (min 49), ts 15/15/0
    Tx timeouts 0,0,0,0,0,0
    === SBC interface ===
    State: 4, failed transfers: 1, checksum errors: 0
    Last transfer: 1ms ago
    RX/TX seq numbers: 2755/2755
    SPI underruns 0, overruns 0
    Disconnects: 0, timeouts: 0, IAP RAM available 0x2c810
    Buffer RX/TX: 0/0-0
    === Duet Control Server ===
    Duet Control Server v3.3.0
    Code buffer space: 4096
    Configured SPI speed: 8000000Hz
    Full transfers per second: 36.08, max wait times: 18.2ms/0.0ms
    Codes per second: 0.31
    Maximum length of RX/TX data transfers: 3592/868

    on the mainboard and

    M122 B1
    Diagnostics for board 1:
    Duet EXP3HC firmware version 3.3 (2021-06-15 16:12:41)
    Bootloader ID: not available
    Never used RAM 158696, free system stack 4400 words
    Tasks: Move(notifyWait,0.0%,160) HEAT(delaying,0.0%,104) CanAsync(notifyWait,0.0%,69) CanRecv(notifyWait,0.0%,82) CanClock(notifyWait,0.0%,71) TMC(notifyWait,7.3%,63) MAIN(running,91.4%,338) IDLE(ready,0.0%,39) AIN(delaying,1.3%,263), total 100.0%
    Last reset 00:01:41 ago, cause: software
    Last software reset data not available
    Driver 0: position 0, 420.0 steps/mm, standstill, reads 63628, writes 15 timeouts 0, SG min/max 0/0, steps req 0 done 0
    Driver 1: position 0, 80.0 steps/mm, standstill, reads 63633, writes 11 timeouts 0, SG min/max 0/0, steps req 0 done 0
    Driver 2: position 0, 80.0 steps/mm, standstill, reads 63633, writes 11 timeouts 0, SG min/max 0/0, steps req 0 done 0
    Moves scheduled 0, completed 0, in progress 0, hiccups 0, step errors 0, maxPrep 0, maxOverdue 0, maxInc 0, mcErrs 0, gcmErrs 0
    Peak sync jitter 0/13, peak Rx sync delay 178, resyncs 0/0, no step interrupt scheduled
    VIN: 24.3V, V12: 12.2V
    MCU temperature: min 30.2C, current 31.4C, max 31.7C
    Ticks since heat task active 141, ADC conversions started 101669, completed 101668, timed out 0, errs 0
    Last sensors broadcast 0x00000002 found 1 146 ticks ago, loop time 0
    CAN messages queued 947, send timeouts 0, received 832, lost 0, free buffers 37, min 37, error reg 110000
    dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 0

    on the 3HC expansion board.

    Finally, I should mention that this setup prints some good-looking small parts with simple geometry like XYZ calibration cubes.

    If anyone has any suggestions, I'm happy to give them a go. Cheers, and thanks!

    1 Reply Last reply Reply Quote 0
    • undefined
      Phaedrux Moderator
      last edited by 30 Aug 2021, 19:52

      Can you post your config.g file?

      Have you tested with 3.4 Beta 3 yet? It's available on the unstable branch.

      https://github.com/Duet3D/DuetSoftwareFramework/wiki/SBC-Setup-Guide#unstable-package-feed

      Z-Bot CoreXY Build | Thingiverse Profile

      undefined 1 Reply Last reply 30 Aug 2021, 20:12 Reply Quote 0
      • undefined
        poofjunior @Phaedrux
        last edited by 30 Aug 2021, 20:12

        @phaedrux can do! Here's my config.g file.

        I'll mention that I'm currently just printing PLA at ambient bed temp, and the bed heater is completely unplugged. A couple extra notes on hardware:

        • This is a toolchanger, so the U-axis is devoted to the tool locking mechanism
        • 3 Drives are devoted to Z axis motion
        • Only 1 tool (Orbiter + E3DV6 Copper Hotend) is currently provisioned (at the bottom of the config)
        ; Jubilee CoreXY ToolChanging Printer - Config File
        ; General setup
        ;-------------------------------------------------------------------------------
        M111 S0 ; Debug off
        M929 P"eventlog.txt" S1 ; Start logging to file eventlog.txt
        ; General Preferences
        M555 P2 ; Set Marlin-style output
        G21 ; Set dimensions to millimetres
        G90 ; Send absolute coordinates...
        M83 ; ...but relative extruder moves
        ; Stepper mapping
        ;-------------------------------------------------------------------------------
        ; Connected to the MB6HC as the table below.
        ; Note: first row is numbered left to right and second row right to left
        ; _________________________________
        ; | U(Lock) | Y(Right) | X(Left) |
        ; | Z(Back) | Z(Right) | Z(Left) |
        M584 X0.2 Y0.1 ; X and Y for CoreXY
        M584 U0.0 ; U for toolchanger lock
        M584 Z0.3:0.4:0.5 ; Z has three drivers for kinematic bed suspension.
        M569 P0.1 S0 ; X stepper reverse direction
        M569 P0.2 S0 ; Y Stepper reverse direction
        M906 X{0.9*sqrt(2)*2000} ; LDO XY 2000mA RMS the TMC5160 driver on duet3
        M906 Y{0.9*sqrt(2)*2000} ; generates a sinusoidal coil current so we can
        ; multply by sqrt(2) to get peak used for M906
        ; Do not exceed 90% without heatsinking the XY
        ; steppers.
        M569 P0.0 S0 ; U Toolchanger Lock reverse direction
        M906 U{0.7*sqrt(2)*670} I60 ; 70% of 670mA RMS idle 60%
        ; Note that the idle will be shared for all drivers
        M906 Z{0.7*sqrt(2)*1680} ; 70% of 1680mA RMS
        ; Kinematics
        ;-------------------------------------------------------------------------------
        M669 K1 ; CoreXY mode
        ; Kinematic bed ball locations.
        ; Locations are extracted from CAD model assuming lower left build plate corner
        ; is (0, 0) on a 305x305mm plate.
        M671 X297.5:2.5:150 Y313.5:313.5:-16.5 S10 ; Front Left: (297.5, 313.5)
        ; Front Right: (2.5, 313.5)
        ; Back: (150, -16.5)
        ; Up to 10mm correction
        ; Axis and motor configuration
        ;-------------------------------------------------------------------------------
        M350 X1 Y1 Z1 U1 ; Disable microstepping to simplify calculations
        M92 X{1/(0.9*16/180)} ; step angle * tooth count / 180
        M92 Y{1/(0.9*16/180)} ; The 2mm tooth spacing cancel out with diam to radius
        M92 Z{360/0.9/4} ; 0.9 deg stepper / lead (4mm) of screw
        M92 U{13.76/1.8} ; gear ratio / step angle for tool lock geared motor.
        ; Enable microstepping all step per unit will be multiplied by the new step def
        M350 X16 Y16 I1 ; 16x microstepping for CoreXY axes. Use interpolation.
        M350 U4 I1 ; 4x for toolchanger lock. Use interpolation.
        M350 Z16 I1 ; 16x microstepping for Z axes. Use interpolation.
        ; Speed and acceleration
        ;-------------------------------------------------------------------------------
        M201 X2500 Y2500 ; Accelerations (mm/s^2)
        M201 Z100 ; LDO ZZZ Acceleration
        M201 U800 ; LDO U Accelerations (mm/s^2)
        M203 X18000 Y18000 Z1600 U9000 ; Maximum axis speeds (mm/min)
        M566 X500 Y500 Z500 U50 ; Maximum jerk speeds (mm/min)
        ; Endstops and probes
        ;-------------------------------------------------------------------------------
        ; Connected to the MB6HC as the table below.
        ; | X | U |
        ; | Y | - |
        ; | Z | - |
        M574 X1 S1 P"0.io0.in" ; homing position U1 = low-end, type S1 = switch
        M574 Y1 S1 P"0.io1.in" ; homing position X1 = low-end, type S1 = switch
        M574 U1 S1 P"0.io3.in" ; homing position Y1 = low-end, type S1 = switch
        M574 Z0 ; we will use the switch as a Z probe not endstop
        M558 P8 C"0.io2.in" H3 F360 T6000 ; H = dive height F probe speed T travel speed
        G31 K0 X0 Y0 Z-2 ; Set the limit switch position as the "Control Point."
        ; Note: the switch free (unclicked) position is 7.2mm,
        ; but the operating position (clicked) is 6.4 +/- 0.2mm.
        ; A 1mm offset (i.e: 7.2-6.2 = 1mm) would be the
        ; Z to worst-case free position, but we add an extra 1mm
        ; such that XY travel moves across the bed when z=0
        ; do *not* scrape or shear the limit switch.
        ; Set axis software limits and min/max switch-triggering positions.
        ; Adjusted such that (0,0) lies at the lower left corner of a 300x300mm square
        ; in the 305mmx305mm build plate.
        M208 X-13.75:313.75 Y-44:341 Z0:295
        M208 U0:200 ; Set Elastic Lock (U axis) max rotation angle
        ; Machine Heaters and temperature sensors
        ;-------------------------------------------------------------------------------
        ; Bed
        M308 S0 P"0.temp0" Y"thermistor" T100000 B3950 A"Bed" ; Keenovo thermistor
        M950 H0 C"0.out0" T0 ; H = Heater 0
        ; C is output for heater itself
        ; T = Temperature sensor
        M143 H0 S130 ; Set maximum temperature for bed to 130C
        M307 H0 A589.8 C589.8 D2.2 V24.1 B0 ; Keenovo 750w 230v built in thermistor
        ; mandala rose bed
        M140 H0 ; Assign H0 to the bed
        ; Tool definitions
        ;-------------------------------------------------------------------------------
        M92 E681 ; Orbiter 0 steps per mm
        M350 E16 I1 ; 16x microstepping for Orbiter 0 Axis. Use interpolation
        ; Tool steppers on expansion board 1 (adapt this to your own set up)
        M201 E3600 ; Orbiter 0 Max Speed (mm/min)
        M203 E600 ; Orbiter 0 Max Accel (mm/s^2)
        M566 E300 ; Orbiter 0 Max Jerk (mm/min)
        M584 E1.0 ; Orbiter 0 on 3HC Board 1
        M569 P1.0 S0 D2 ; Orbiter 0 Reverse Direction and Spreadcycle Mode
        M906 E450 ; 500mA peak
        ; E does not support expressions in 3.2.0-beta4
        ; Tool Thermistors and Heaters
        M308 S1 P"1.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"t0_heater" ; Orbiter 0 thermistor
        ; Sx = Sensor Number
        M950 H1 C"1.out0" T1 ; Heater for extruder out tool 0
        ; Hx = Heater number
        ; Tx = temp sensor number for this heater
        ; M307 H1 A1252.3 C361.3 D5.3 V24.0 B0 ; from pid tuning without sock
        M307 H1 A811.4 C309.4 D4.7 V24.0 B0 ; With sock
        M143 H1 S300 ; Maximum temp for hotend to 300C
        ; Fans
        M950 F1 C"1.out3" ; Define Hotend Fan output
        M106 P1 S255 H1 T45 C"HeatBreakCool0" ; S = Speed of fan Px
        ; Hxx = heater for thermo mode
        ; T = temps for thermo mode.
        M950 F2 C"1.out6" ; Define Part Cooling Fan output
        M106 P2 C"t0_part_cooling_fan"
        M563 P0 S"Tool 0" D0 H1 F2 ; Px = Tool number
        ; Dx = Drive Number
        ; H1 = Heater Number
        ; Fx = Fan number part cooling fan
        G10 P0 S0 R0 ; Set tool 0 operating and standby temperatures
        ; (-273 = "off")
        M572 D0 S0.05 ; Set pressure advance
        G10 P0 X0 Y36.62 Z-3.3 ; Set Tool 0 XYZ Carriage Offsets
        M501 ; Load saved parameters from non-volatile memory

        Ooh--I was wondering if there was a way to use the package manager to get the unstable packages. I'll give that a whirl now. Thanks for the pro-tip and the quick reply!

        undefined 1 Reply Last reply 30 Aug 2021, 20:46 Reply Quote 0
        • undefined
          deckingman @poofjunior
          last edited by 30 Aug 2021, 20:46

          @poofjunior The usual cause of that kind of behaviour is extruder jerk set too low. there may be other reasons, but that;s the most common one. You have yours set to 300 mm/min (5mm/sec) which isn't desperately low but might be low enough to cause your issue. Remember that any print move will be a combination of XY and E (and maybe Z) and that each of those axes and the extruder have to be synchronised to begin and end at the same time. So at the end of every short segmented move, X and Y will continue to slow down until the extruder reaches it's instantaneous speed threshold (jerk) before it starts the next short segment and so the entire machine can end up running really slowly and appear to stutter. Suggest you try setting extruder jerk to 3000 or some other high values (I use 3600) and then moves will complete using the lowest of XY jerk values, rather than being constrained by the extruder setting. Setting it "silly high" will do no harm because unless it too low, extruder jerk pretty much only applies to extruder only moves which also involve a change of direction (of which there are no such moves).

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

          1 Reply Last reply Reply Quote 1
          • undefined
            Phaedrux Moderator
            last edited by Phaedrux 30 Aug 2021, 20:58

            Sometimes our configs can get a little too convoluted and complex for our own good. Can you verify that the values are actually as you expect them by sending M92 M350 M201 M203 M566 M906 M913 by themselves to see what the firmware reports back as the current settings?

            I'd say Deckingman is also spot on about the low jerk values.

            Z-Bot CoreXY Build | Thingiverse Profile

            undefined 1 Reply Last reply 30 Aug 2021, 21:18 Reply Quote 0
            • undefined
              poofjunior @Phaedrux
              last edited by 30 Aug 2021, 21:18

              @deckingman I tried bumping jerk up to 3000mm/min before posting since that's what I suspected also.

              @Phaedrux can do! (Yeah, this config confuses me too. I'm open to structural feedback there though!)

              M92
              Steps/mm: X: 200.000, Y: 200.000, Z: 1600.000, U: 30.578, E: 681.000
              M350
              Microstepping - X:16(on), Y:16(on), Z:16(on), U:4(on), E:16(on)
              M201
              Accelerations (mm/sec^2): X: 10000.0, Y: 10000.0, Z: 100.0, U: 800.0, E: 10000.0
              M203
              Max speeds (mm/min)): X: 18000.0, Y: 18000.0, Z: 1600.0, U: 9000.0, E: 8000.0, min. speed 0.60
              M566
              Maximum jerk rates (mm/min): X: 1000.0, Y: 1000.0, Z: 500.0, U: 50.0, E: 3000.0, jerk policy: 0
              M906
              Motor current (mA) - X:2546, Y:2546, Z:1663, U:670, E:450, idle factor 60%
              M913
              Motor current % of normal - X:100, Y:100, Z:100, U:100, E:100

              I'll mention that these get overwritten in the slicer, so this is what the Slicer is currently printing the part at. Superslicer is also lowering acceleration on outer perimeters to about 1500mm/sec^2 and then bumping it back up to 10000mm/sec^2 for everything else.

              Finally, I just updated to 3.4 Beta 3, and I'm partway through a benchy hull. I can say that, audibly, I can't hear the stuttering anymore. And visually, the hull just looks wayy better overall so far. I'll post again for the final verdict, but updating to the latest unstable release may very well have fixed it!

              undefined 1 Reply Last reply 30 Aug 2021, 21:52 Reply Quote 0
              • undefined
                poofjunior @poofjunior
                last edited by 30 Aug 2021, 21:52

                And it looks like switching to 3.4beta3 has totally fixed the stuttering! Thanks a bunch for the hand folks!

                undefined 1 Reply Last reply 31 Aug 2021, 07:09 Reply Quote 0
                • undefined
                  deckingman @poofjunior
                  last edited by 31 Aug 2021, 07:09

                  @poofjunior Glad it's fixed. On the structure of your config.g file, it's generally best to put each command on a single line or at least on separate lines but consecutively. The reason being that there are some dependencies and orders of sequences. For example the motor mapping must come before any commands which affect those motors. You seem to have got away with it but mapping the extruder motors way later in the file to the axes motors might come back to bite you in the future. I divide my config into sections such as "motors", "sensors", "heaters", "fans", "tools" etc and put all related commands in each section.

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

                  1 Reply Last reply Reply Quote 1
                  3 out of 8
                  • First post
                    3/8
                    Last post
                  Unless otherwise noted, all forum content is licensed under CC-BY-SA