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

    Resonance, spreadCycle and stealthChop

    Scheduled Pinned Locked Moved
    Tuning and tweaking
    13
    85
    14.1k
    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.
    • garethkyundefined
      garethky @matt3o
      last edited by

      @matt3o said in Resonance, spreadCycle and stealthChop:

      @garethky I mean proper stepper drivers... not the 1-chip-embedded drives like trinamic. Gecko drives come to mind ( https://www.geckodrive.com/gr214v-bulletproof-high-resolution-stepper-drive.html ), but there are dozens of them.

      I don't know, maybe? There are a lot of alternatives on the way to servos: better drivers, "better steppers", closed loop steppers etc. I could spend time and money trying all of those out or I could skip straight to the end game and get a conclusive answer.

      My vibration/noise happens at constant speeds in long moves. I don't think that focusing on the Acceleration/Jerk/Jounce will fix that. My bet is the motor's physical design has to change to enable smoother operation.

      1 Reply Last reply Reply Quote 1
      • garethkyundefined
        garethky
        last edited by

        I did some investigations today around SealthChop tuning. I found that my machine resonated worst at 55mm/sec. So I have a test that runs a loop around the bed and sweeps from 40mm/sec to 65mm/sec in 5mm/sec increments. There is a HUGE difference between 55 and 60. 55 is a horrible screech and 60 sounds like what you expect from StealthChop.

        So one aspect I had ignored until now was auto-tuning StealthChop. Basically, are we even getting StealthChop if we don't do the tuning procedure right? The manual says you have to apply power, enable stealth chop mode, pause for 130ms and than make a medium speed move of at least 8 steps, but ideally 400 full steps. My homing procedure did not do that exactly, so I added this to the end of my homeall.g:

        ; StealthChop Calibration
        
        ; log driver state first
        M569 P0
        M569 P1
        
        ; first toggle between Spread Cycle and StealthChop modes to enter the calibration phase
        M913 X30 Y30
        M569 P0 D2
        M569 P1 D2
        M569 P1 D3
        M569 P0 D3
        M913 X100 Y100
        
        G91                      ; use relative positioning
        
        ; apply current to the motors
        G1 Y0 F1000
        ; dwell for at least 130ms
        M400
        G4 P135
        M400
        ; move Y by at least 400 full steps. 
        ; The move needs to be made at a "medium speed", I think RPM > 10
        G1 Y20 F6000
        
        ; log driver state after
        M569 P0
        M569 P1
        
        G90                      ; back to absolute positioning
        

        It did not make any difference at all in the noise in my test. My logs don't show a lot of tuning going on vs what already happened via homing:

        # before
        Drive 0 runs forwards, active low enable, timing fast, mode stealthChop, ccr 0x08053, toff 3, tblank 1, thigh 16 (234.4 mm/sec), tpwmthrs 16 (234.4 mm/sec), pwmScaleSum 17, pwmScaleAuto 1, pwmOfsAuto 24, pwmGradAuto 0, pos 200
        Drive 1 runs in reverse, active low enable, timing fast, mode stealthChop, ccr 0x08053, toff 3, tblank 1, thigh 16 (234.4 mm/sec), tpwmthrs 16 (234.4 mm/sec), pwmScaleSum 15, pwmScaleAuto 0, pwmOfsAuto 23, pwmGradAuto 0, pos 840
        
        # after
        Drive 0 runs forwards, active low enable, timing fast, mode stealthChop, ccr 0x08053, toff 3, tblank 1, thigh 16 (234.4 mm/sec), tpwmthrs 16 (234.4 mm/sec), pwmScaleSum 17, pwmScaleAuto 1, pwmOfsAuto 24, pwmGradAuto 0, pos 200
        Drive 1 runs in reverse, active low enable, timing fast, mode stealthChop, ccr 0x08053, toff 3, tblank 1, thigh 16 (234.4 mm/sec), tpwmthrs 16 (234.4 mm/sec), pwmScaleSum 17, pwmScaleAuto 2, pwmOfsAuto 23, pwmGradAuto 0, pos 840
        
        • I don't understand why pwmGradAuto is always 0 ❓
        • pwmScaleAuto does seem to change, slightly 🤷
        1 Reply Last reply Reply Quote 0
        • garethkyundefined
          garethky
          last edited by

          Yep, I was doing it wrong! @DC42 to the rescue:

          https://forum.duet3d.com/topic/16297/help-needed-with-duet-3-6hc-tmc5160-stealthchop-config/64?_=1612995436610

          So we need to kill the motor power with M18, then make a tiny move.

          So now I get real tuning values in my logs!! 😮

          # (log truncated to make it easy to read)
          Drive 0 pwmScaleSum 22, pwmScaleAuto 0, pwmOfsAuto 23, pwmGradAuto 22, pos 632
          Drive 1 pwmScaleSum 23, pwmScaleAuto 0, pwmOfsAuto 27, pwmGradAuto 19, pos 600
          

          And I can hear the difference! My 55mm/second resonance is gone. Its not gone at every step frequency but its an improvement. @matt3o do you have something like this in your homing script??

          1 Reply Last reply Reply Quote 1
          • garethkyundefined
            garethky
            last edited by garethky

            After some more testing this is a mixed bag. So tantalizing but still imperfect. I tested with different speeds to perform the auto tuning and different move lengths. I tried switching between StealthChop and Spread Cycle at different speeds. And I tried going back to 1.8 degree motors.

            With the 0.9 degree motor I found:

            • With tuned StealthChop slow moves are pretty much silent
            • With tuned StealthChop speeds between about 110mm/sec and 170mm/sec are incredibly noisy. Much worse than Spread Cycle.
            • Trying to switch between StealthChop and Spread Cycle at 100mm/sec causes the machine to loose steps.
            • The best performance was switching from StealthChop to Spread Cycle at ~57mm/sec. But there were scary "popping" noises near the transition speed that I could not get rid of.

            Knowing what I know now, I figure I have never heard tuned Stealth Chop on the 1.8 degree motors, so back on the Tool Changer they went:

            • Slow moves are very quiet but with a low pitched rumble that wasn't there with the 0.9's
            • Moves in tuned StealthChop above about 180mm/sec screech badly.
            • I can tune the cut over from StealthChop to SpreadCycle to a higher speed, ~75mm/sec
            • With that setting test sweeps from 50mm/sec to 200mm/sec in 10mm/sec increments don't turn up any objectionable screeching

            But (and there is always a but right?) when you print with this setup it becomes apparent that the drivers do the StealthChop/SpreadCycle switch every time there is a hard change of direction. This causes a loud jerk/bang noise which isn't acceptable. Forcing StealthChop for printing works great until there is a rapid move and it screeches.

            When it is quiet, its truly quiet, way quieter than it ever was with the 1.8 motors. It is quieter than my Prusa for some moves! The cheap/easy answer then is to run it in StealthChop all the time and limit all moves to a max speed of ~150mm/sec. Maybe put the printer on a big block of foam to damp out the rumble.

            This is the script that I'm using. In my HomeAll.g I home X & Y, then run this, then home X, Y, Z, C.

            
            ; StelthChop Calibration
            
            G91                     ; use relative positioning
            
            M18                     ; cut all motor power
            M915 P0 T5              ; set coolstep threshold (disables stall detection)
            M915 P1 T5              ; set coolstep threshold (disables stall detection)
            M569 P0 D3 H16 V16      ; set stealthChop mode, set tpwmthrs and thigh
            M569 P1 D3 H16 V16      ; set stealthChop mode, set tpwmthrs and thigh
            
            ; log driver state after reset
            M569 P0
            M569 P1
            
            M564 H0                 ; disable safe moves
            
            ; apply current to the motors
            G1 Y0.02 F1000
                        
            ; dwell for at least 130ms
            G4 P250
            
            ; For CoreX/Y: move Y by at least 400 full steps, this moves both motors
            ; The move needs to be made fairly fast
            G1 Y100 F6000
            
            ; dwell for at least 130ms
            G4 P250
            
            ; move back to the starting location to speed up homing
            G1 Y-100 F6000
            
            ; log driver state after tuning
            M569 P0
            M569 P1
            
            M564 H1                 ; enable safe moves
            G90                     ; back to absolute positioning
            

            If you run M569 P0 and your pwmGradAuto value is 0, you haven't auto-tuned and you are not getting the benefits of StealthChop.

            I don't fully understand what M915 P0 T5 does. T5 should set the Coolstep control register to the value 5 in binary. But I also see documentation saying this is some sort of speed. Leaving it out breaks the tuning.

            And I'm not saying I won't still put servo's on it... in just doing my due diligence first 😉

            dc42undefined matt3oundefined 2 Replies Last reply Reply Quote 0
            • dc42undefined
              dc42 administrators @garethky
              last edited by

              @garethky, thanks for the update!

              Duet WiFi hardware designer and firmware engineer
              Please do not ask me for Duet support via PM or email, use the forum
              http://www.escher3d.com, https://miscsolutions.wordpress.com

              garethkyundefined 1 Reply Last reply Reply Quote 1
              • garethkyundefined
                garethky @dc42
                last edited by

                @dc42 thanks! Can you say what T5 in M915 P0 T5 is actually doing?

                dc42undefined 1 Reply Last reply Reply Quote 0
                • dc42undefined
                  dc42 administrators @garethky
                  last edited by

                  @garethky said in Resonance, spreadCycle and stealthChop:

                  @dc42 thanks! Can you say what T5 in M915 P0 T5 is actually doing?

                  It's rather technical. See sections 5 and 6.7 of the TMC2660 datasheet. Unless you understand what you are doing, I suggest you remove that T5 parameter.

                  Duet WiFi hardware designer and firmware engineer
                  Please do not ask me for Duet support via PM or email, use the forum
                  http://www.escher3d.com, https://miscsolutions.wordpress.com

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

                    @garethky This is very interesting, can you confirm which drivers you are using (5160/2209/2660)? Having recently switched to 0.9 e3d steppers on a CoreXY I'd like to get rid of some of the noise as well!

                    @dc42 If/when you have have tuned a motor would it make sense to read the tuning values and then set them at startup (rather then tuning each time)? Is it possible with RRF to set all of the required register values (and which ones are they?).

                    1 Reply Last reply Reply Quote 0
                    • garethkyundefined
                      garethky
                      last edited by garethky

                      @gloomyandy I'm using the Duet 3 with the TMC2160 TMC5160

                      @dc42 removing the T5 parameter breaks the tuning! Nothing I have ever tried worked properly till I tried that suggestion.

                      WARNING: its smarter me from the future, everything below this line is WRONG! Leaving it here to demonstrate the confusion:

                      I'm technical 🤣. But even better, @Kolbi made a spreadsheet so we can have visual aids:

                      Screen Shot 2021-02-11 at 2.21.01 AM.jpg

                      T5 sets all of the bits related to Stall Guard to 0/off. But it sets SEMIN to 5 or really 160. My guess is that the important part is assigning all the stall guard fields to 0. The value 5 is probably something that should be tuned.

                      My machine config has no other calls to M915 except for the C axis. So there is some voodoo here about writing zeros to that register that I don't see documented in the manual. Maybe its TMC2160 specific?

                      1 Reply Last reply Reply Quote 0
                      • garethkyundefined
                        garethky
                        last edited by

                        @dc42 I think the documentation is confusing people, me included, so I went to he source code:

                        Setting the T param on the 22XX chips does nothing:
                        https://github.com/Duet3D/RepRapFirmware/blob/7c571137d68a1a2de0d79e2dc1741793a96c7279/src/Movement/StepperDrivers/TMC22xx.cpp#L611

                        Only the 51XX chip family writes the register:
                        https://github.com/Duet3D/RepRapFirmware/blob/7c571137d68a1a2de0d79e2dc1741793a96c7279/src/Movement/StepperDrivers/TMC51xx.cpp#L513

                        The register it writes to is TCOOLTHRS see here. The documentation for M915 says that T sets the "CoolStep control register", which I think a whole lot of users assumed was the "CoolStep config register" referenced here. The config register is written to but only via the set stall detect threashold and set stall detection filer.

                        So the calculator that people are using doesn't do what they think it does. There is no way to write all the bits of the CoolStep config registers with M915. Any large values supplied to the T parameter get truncated to 20 bits and shoved into TCOOLTHRS. I don't think anyone pointed out this confusion.

                        I think the documentation here and here should be updated to say that T writes to TCOOLTHRS. The only accurate description of how this works is here.

                        Also, my Duet3 board has 5160's, verified by inspection.

                        1 Reply Last reply Reply Quote 0
                        • matt3oundefined
                          matt3o @garethky
                          last edited by matt3o

                          @garethky said in Resonance, spreadCycle and stealthChop:

                          After some more testing this is a mixed bag.

                          [snip]

                          I read your interesting report and it's exactly my experience. In real life printing I can't use switching from stealth to spread, jolts and lost steps... it's a nightmare. At "high" speed stealth is not usable, not just for the noise but it loses steps. Unfortunately that happens already at around 130mm/s (with my motors).

                          So honestly I don't know what else to do apart throwing more money into motors or trying a corexyuv.

                          Long story short, I don't think this is an issue that can be solved with stealthchop

                          1 Reply Last reply Reply Quote 1
                          • garethkyundefined
                            garethky
                            last edited by garethky

                            @matt3o said in Resonance, spreadCycle and stealthChop:

                            I read your interesting report and it's exactly my experience. In real life printing I can't use switching from stealth to spread, jolts and lost steps... it's a nightmare. At "high" speed stealth is not usable, not just for the noise but it loses steps. Unfortunately that happens already at around 130mm/s (with my motors).

                            So honestly I don't know what else to do apart throwing more money into motors or trying a corexyuv.

                            Long story short, I don't think this is an issue that can be solved with stealthchop

                            Agreed. I'm happy that I got it to work but unhappy with being limited to 150mm/sec. I'd like to see 300 max when loaded with a tool and maybe 500 when no tool is loaded.

                            I'm going to try the 1.8 degree 2 Amp steppers that the Voron community are recommending. But that is the last stepper I'm going to mess with. Seeing the StealthChop results we know its not the mechanical system that's at fault.

                            matt3oundefined JuKuundefined 2 Replies Last reply Reply Quote 1
                            • matt3oundefined
                              matt3o @garethky
                              last edited by

                              @garethky said in Resonance, spreadCycle and stealthChop:

                              I'm going to try the 1.8 degree 2 Amp steppers that the Voron community are recommending.

                              if they are the Moons 1.8° 2A, don't do it, I have them, they are good but they don't solve the issue (you just move the resonance to a different frequency). Also to be really fair, I get a much better surface texture with 0.9° on my corexy.

                              garethkyundefined 1 Reply Last reply Reply Quote 0
                              • JuKuundefined
                                JuKu @garethky
                                last edited by

                                Would it be possible to add a command to write directly to the driver control registers for those who know what they are doing? (I would love to kill my chips in experimenting, my system has two more drivers than I really need!😂 )

                                matt3oundefined 1 Reply Last reply Reply Quote 0
                                • matt3oundefined
                                  matt3o @JuKu
                                  last edited by

                                  @JuKu only @dc42 can answer that

                                  1 Reply Last reply Reply Quote 0
                                  • garethkyundefined
                                    garethky @matt3o
                                    last edited by

                                    @matt3o said in Resonance, spreadCycle and stealthChop:

                                    @garethky said in Resonance, spreadCycle and stealthChop:

                                    I'm going to try the 1.8 degree 2 Amp steppers that the Voron community are recommending.

                                    if they are the Moons 1.8° 2A, don't do it, I have them, they are good but they don't solve the issue (you just move the resonance to a different frequency). Also to be really fair, I get a much better surface texture with 0.9° on my corexy.

                                    I have the Moons now. The Voron recommendation is the Stepper Online 17HS19-2004S1. I'm going with 1.8 because top speed is related to steps/second in the driver. I don't hold out much hope but it was cheap to try.

                                    matt3oundefined 1 Reply Last reply Reply Quote 1
                                    • matt3oundefined
                                      matt3o @garethky
                                      last edited by

                                      @garethky keep us posted!

                                      engikeneerundefined 1 Reply Last reply Reply Quote 0
                                      • engikeneerundefined
                                        engikeneer @matt3o
                                        last edited by

                                        @matt3o not sure if you've seen it before, but @Nxt-1 went through a lot of noise reduction stuff on his big delta a few months ago and did a very good job of writing it up. He even tried reinforcing the printer with concrete struts! In the end I think the maim source of noise was the motors themselves, so he got best results by fitting a torsional damper onto the motor shaft itself. I'm toying with the idea of getting some for my printer now too.

                                        There's three long threads on it, but the final one sums it up best:
                                        https://forum.duet3d.com/topic/18281/battling-sources-of-vibration-and-noise/82

                                        E3D TC with D3Mini and Toolboards.
                                        Home-built CoreXY, Duet Wifi, Chimera direct drive, 2x BMG, 300x300x300 build volume
                                        i3 clone with a bunch of mods

                                        matt3oundefined 1 Reply Last reply Reply Quote 1
                                        • matt3oundefined
                                          matt3o @engikeneer
                                          last edited by

                                          @engikeneer thanks for the heads up, I'll have a look at that post, I made all kind of tests and I'm 99% sure the problem is with the motor shaft itself (not even the motor body). So what you say makes a lot of sense to me

                                          1 Reply Last reply Reply Quote 0
                                          • garethkyundefined
                                            garethky
                                            last edited by

                                            So the StepperOnline 17HS19-2004S1, I'll admit I was skeptical. It doesn't sound any quieter in Stealth Chop mode, if anything its noisier. But in Spread Cycle, its significantly quieter and smoother than the Moons. So quiet that I think I could live with them in Spread Cycle mode in general and leave them on the printer. That's a big deal if you are on the Duet 2 and don't have access to Stealth Chop.

                                            The other big difference is the low frequency rumble is greatly reduced.

                                            I don't know why any of this is so?

                                            The moons are 1.04 Ohm and 2.2mH
                                            The Stepper Online motor is 1.4Ohm and 3.0mH

                                            matt3oundefined 1 Reply Last reply Reply Quote 2
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA