Fine Tuning TMC2660 drivers to a specific motor(s)?



  • Good day everyone!

    I have a rather advanced question, which I can't quite wrap my mind aroud.
    I've recently assebled a CoreXY machine and when I run it at the speeds under 60mm/s I get quite a noticeable vibration coming from the motors, to which the whole frame resonates and makes nasty noize. All the mechanical stuff has been checked dozen of times and I can't see any problems there. Also, when I move gantry by hand with motors off, I don't any vibration, like I'd get when the actual motors are moving it. So, chanses are 9 of 10 that the default settings of the drivers are not quite matching the motors I'm using.

    I've tried any possible current in the range of 800mA to 1800mA

    If I run motors with belts removed, they do seem to run quite smooth

    The vibration frequency does seem to match full step frequency

    Drivers are configured to run in x16 microstepping, with interpolation on and spreadCycled forced to be on by a GCode command

    If I disable the interpolation and run drivers in x16 the audiable differnce is minimum, compared to interpolation on

    The type of motors I am using are kinda on the far end of the NEMA 17 stuff, so my guess would be that default mid-range settings of chopper register are not quite matching whatever I'm using. I went through the TMC2660 datasheet (pages 33-34) and it does say, that drivers could tuned to better match a specific motor type to be used. This can be achieved by setting a certain values in CS and HSTRT and HSEND register, based on the calculations using the formulas provided in the datasheet.
    Also, a quote from datasheet on this matter:

    As experiments show, the setting is quite independent of the motor, because higher current motors
    typically also have a lower coil resistance. Choosing a medium default value for the hysteresis (for
    example, effective HSTRT+HEND=10) normally fits most applications. The setting can be optimized by
    experimenting with the motor: A too low setting will result in reduced microstep accuracy, while a
    too high setting will lead to more chopper noise and motor power dissipation.
    When measuring the
    sense resistor voltage in motor standstill at a medium coil current with an oscilloscope, a too low
    setting shows a fast decay phase not longer than the blanking time. When the fast decay time
    becomes slightly longer than the blanking time, the setting is optimum. You can reduce the off-time
    setting, if this is hard to reach.

    Highlite in black is somewhat I am experiencing - vibration/noize and motors getting hotter then I'd expect - at 70% set current they heat up to ~70C after half hour of operation.

    So, I have few questions:

    1. Has anyone tried to play around with the settings mentioned above?
    2. Are the CS and HSTRT+HEND accesible using any GCode?
    3. Can anyone advise a NEMA17 motor that is known for sure to be dead silent when driven by TMC2660? Just in case... 🙂

    The setup is following:

    1. 24 V supply
    2. DuetWiFi with latest firmware (updated yesterday)
    3. Motors used - "Longs Stepper Motor" 17HS8403N with following specs
      Rate Voltage - 3.1V
      Rate Current - 2.5A
      Resistance - 1.25Ohm
      Inductance - 1.6mH

    Any help or feedback is welcome.

    P.S.: if there is a test point to check Vsense on the driver, I can connect a scope to see exactly whats happening....


  • administrators

    1. Search for other posts on motor noise at standstill to see what other users have tried.
    2. You can set the entire chopper control register using M569.
    3. There are no test points on the sense resistors, but the sense resistors are easy to probe.

    HTH David



  • Thanks for the reply.

    Keyword "standstill" did, in fact, bring me to a guide that responses to most of my questions above:
    https://duet3d.dozuki.com/Wiki/Reducing_Stand-Still_Noise
    However, to properly use the formulas from Trinamic (instead pf just poking around) I need to know the CS value from SGCSCONF register (stallGuard/coolStep related) that is used by RRF.
    Unfortunatelly, this article on the WIKI does not provide such kind of info:
    https://duet3d.dozuki.com/Wiki/Stall_detection_and_sensorless_homing

    Can you please advise, what is a default CS value, used by RRF?

    Kind regards


  • administrators

    If you send M569 P# where # is the driver number, it will report the current value of the chopper control register at the end of the line.


Log in to reply