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

    RRF 3.5.0-rc1: shaking/rattling in Stealthchop

    Scheduled Pinned Locked Moved Solved
    Beta Firmware
    2
    7
    347
    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.
    • NeoDueundefined
      NeoDue
      last edited by

      The Snapmaker printer I just finished with replacing the original controller with a Duet 3 6HC has "Mocotech" steppers - a 42HD2428 for the X and the U axis, and a 42HD4428 on the Y axis.

      The X and Y motor (but, as it seems, not the U stepper - might have something to do with my last finding, see below) have a strange issue with Stealthchop: the moment the stepper driver switches mode, the motor... well, makes strange noises.

      First, I checked the mechanics and found nothing.

      Second attempt: since I have two identical motors on X and U, I swapped those. Result: the issue stays with the X motor

      • if I replace the X motor with an unused one and
      • if I switch the driver between X and U (both in config.g and flipping the connectors)

      Third attempt: if I run the stepper drivers in Spreadcycle mode, the issue is gone! I then played around with the values of tcoolthrs, thigh und tpwmhrs which had set to 100mm/s (value taken from what I could extract from the original Marlin source code - the original board had TMC2209 stepper drivers), and I could find that the issue occurs at the speed when the driver switches between Spreadcycle and Stealthchop. Depending on the motor speed, you either get a rattling noise (as if the motor would skip some steps) at lower speeds - or a... - hm, "squawking" fits probably best - noise at higher speeds (might also steps being skipped or such, but faster...)

      I also found that I can temporarily "cure" the issue if I let the XY carriage slowly move around for an extended period of time (verified twice by now). As soon as I do a test print at higher speeds, the issue returns however. This might also explain the seemingly unaffected U stepper - I simply did not start print tests with the second hotend yet.

      Any ideas what might cause this and how it might be cured...?

      In case it helps:

      M122
      === Diagnostics ===
      RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.1 (2023-08-31 16:19:24) running on Duet 3 MB6HC v1.02 or later (standalone mode)
      Board ID: 08DJM-956BA-NA3TN-6JTDL-3SN6L-998UU
      Used output buffers: 5 of 40 (40 max)
      === RTOS ===
      Static ram: 154852
      Dynamic ram: 123592 of which 0 recycled
      Never used RAM 64332, free system stack 136 words
      Tasks: NETWORK(2,nWait,14.8%,228) HEAT(3,nWait,0.0%,323) Move(4,nWait,0.0%,214) CanReceiv(6,nWait,0.0%,941) CanSender(5,nWait,0.0%,335) CanClock(7,delaying,0.0%,343) TMC(4,nWait,8.7%,61) MAIN(1,running,76.4%,137) IDLE(0,ready,0.0%,30), total 100.0%
      Owned mutexes: WiFi(NETWORK)
      === Platform ===
      Last reset 02:05:35 ago, cause: software
      Last software reset at 2023-10-04 19:48, reason: User, Gcodes spinning, available RAM 63708, slot 0
      Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
      Error status: 0x04
      Aux0 errors 0,0,0
      MCU temperature: min 45.2, current 45.5, max 45.8
      Supply voltage: min 23.8, current 23.9, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes
      12V rail voltage: min 12.0, current 12.5, max 12.8, under voltage events: 0
      Heap OK, handles allocated/used 99/5, heap memory allocated/used/recyclable 2048/1532/1432, gc cycles 24
      Events: 0 queued, 0 completed
      Driver 0: standstill, SG min n/a, mspos 280, reads 8957, writes 0 timeouts 0
      Driver 1: standstill, SG min n/a, mspos 232, reads 8957, writes 0 timeouts 0
      Driver 2: standstill, SG min n/a, mspos 904, reads 8957, writes 0 timeouts 0
      Driver 3: standstill, SG min 0, mspos 8, reads 8952, writes 6 timeouts 0
      Driver 4: standstill, SG min n/a, mspos 2, reads 8958, writes 0 timeouts 0
      Driver 5: standstill, SG min n/a, mspos 2, reads 8958, writes 0 timeouts 0
      Date/time: 2023-10-04 21:53:46
      Slowest loop: 4.90ms; fastest: 0.08ms
      === Storage ===
      Free file entries: 20
      SD card 0 detected, interface speed: 25.0MBytes/sec
      SD card longest read time 2.4ms, write time 0.0ms, max retries 0
      === Move ===
      DMs created 125, segments created 15, maxWait 2018145ms, bed compensation in use: none, height map offset 0.000, ebfmin 0.00, ebfmax 0.00
      no step interrupt scheduled
      Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
      === DDARing 0 ===
      Scheduled moves 7652, completed 7652, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 1], CDDA state -1
      === DDARing 1 ===
      Scheduled moves 0, completed 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, chamber heaters -1 -1 -1 -1, ordering errs 0
      Heater 1 is on, I-accum = 0.0
      === GCodes ===
      Movement locks held by null, null
      HTTP is idle 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
      File2 is idle in state(s) 0
      Queue2 is idle in state(s) 0
      Q0 segments left 0, axes/extruders owned 0x80000003
      Code queue 0 is empty
      Q1 segments left 0, axes/extruders owned 0x0000000
      Code queue 1 is empty
      === Filament sensors ===
      Extruder 0 sensor: no data received
      Extruder 1 sensor: no data received
      === CAN ===
      Messages queued 18675, received 0, lost 0, boc 0
      Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 10375/0/0
      Tx timeouts 0,0,10375,0,0,8300 last cancelled message type 30 dest 127
      === Network ===
      Slowest loop: 20.62ms; fastest: 0.07ms
      Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
      HTTP sessions: 2 of 8
      = Ethernet =
      Interface state: disabled
      Error counts: 0 0 0 0 0 0
      Socket states: 0 0 0 0 0 0 0 0
      === WiFi ===
      Interface state: active
      Module is connected to access point 
      Failed messages: pending 0, notrdy 0, noresp 0
      Firmware version 2.1beta4
      MAC address 70:04:1d:be:ad:b8
      Module reset reason: Power up, Vcc 0.00, flash size 4194304, free heap 225020
      WiFi IP address 192.168.178.31
      Signal strength -55dBm, channel 2, mode 802.11n, reconnections 0
      Clock register 00002002
      Socket states: 0 0 0 0 0 0 0 0
      === Multicast handler ===
      Responder is inactive, messages received 0, responses 0
      

      Initially I had Input Shaping and Pressure Advance on, but turned that off since I found here some users have issues their steppers with these active.

      gloomyandyundefined 1 Reply Last reply Reply Quote 0
      • NeoDueundefined NeoDue marked this topic as a question
      • gloomyandyundefined
        gloomyandy @NeoDue
        last edited by

        @NeoDue It is almost always a bad idea to have the drivers switch from stealthchop to spreadcycle, you pretty much always get the results you are hearing/seeing. Operate them all of the time in either one mode or the other.

        NeoDueundefined 1 Reply Last reply Reply Quote 0
        • NeoDueundefined
          NeoDue @gloomyandy
          last edited by NeoDue

          @gloomyandy just to make sure I understand correctly: I don't actively switch them, the TMC driver does that itself at a predefined speed, which is controlled by the tpwmthrs value, at least as far as I understand the data sheet...

          Thus, do I understand you correctly that I should simply set that value so high that the driver always stays in StealthChop?

          gloomyandyundefined 1 Reply Last reply Reply Quote 0
          • gloomyandyundefined
            gloomyandy @NeoDue
            last edited by gloomyandy

            @NeoDue You have three choices really...

            1. Set D3 and the V value so high (actually I think you set it to a low value, running M569 P<drive no> will show you the actual switch over speed) that the driveer stays in stealthchop mode all of the time.
            2. Set D3 and set V so that the switchover point is at a very low speed (pretty much the moment it moves), so that all of the moves are in effect using spreadcycle, but the driver will be in stealthchop when not moving. This can help stop motors from "hissing" when stationary.
            3. Set D2 so that the driver is always in spreadcycle.

            Take a look at this page: https://docs.duet3d.com/User_manual/Connecting_hardware/Motors_tuning and maybe search the forum for other posts on spreadcycle and stealthchop to get a feel for the advantages of both.

            NeoDueundefined 1 Reply Last reply Reply Quote 0
            • NeoDueundefined
              NeoDue @gloomyandy
              last edited by

              @gloomyandy Thanks, I know that one - I was just unsure if I understood you correctly 😉

              Okay, then I will try that, thanks. My intention was to use StealthChop where it would be useful, i.e. more silent than SpreadCycle (which is somewhere around 100mm/s for my printer). But it feels as if that automatic tuning mechanism of the TMC does some stuff it should not do...

              gloomyandyundefined 1 Reply Last reply Reply Quote 0
              • gloomyandyundefined
                gloomyandy @NeoDue
                last edited by

                @NeoDue If you see the page I linked to there is an explanation of what happens when you switch at a high speed.

                NeoDueundefined 1 Reply Last reply Reply Quote 0
                • NeoDueundefined
                  NeoDue @gloomyandy
                  last edited by NeoDue

                  @gloomyandy thanks for pointing that out - I did not keep that sentence in mind when I read this page.

                  Then I consider this question answered for now... the only open question is: why does it work as it should after the slow-motion exercise?

                  Edit: in case someone stumbles upon this: this thread here (https://forum.duet3d.com/topic/18010/duet-3-stealthchop-2-tuning-for-nema23/27) describes the problem in more detail (sadly, no real solution there as well from what I can see, just a nice video where @fractalengineer got his stepper to croak the Star Wars melody 🤣 )

                  2nd Edit: Instead of following the advice "all three values equal" on https://docs.duet3d.com/User_manual/Connecting_hardware/Motors_tuning I used the following values:

                  M569 P0.0 D3 H5 V25      ; H set to a low value to keep microstepping active (5 simply worked fine for me...), V set to a value *above* the maximum printer speed (check with M569 P0.0)
                  M915 P0.0 T1             ; T set to a low value to disable CoolStep
                  
                  1 Reply Last reply Reply Quote 0
                  • NeoDueundefined NeoDue has marked this topic as solved
                  • NeoDueundefined NeoDue referenced this topic
                  • NeoDueundefined NeoDue referenced this topic
                  • First post
                    Last post
                  Unless otherwise noted, all forum content is licensed under CC-BY-SA