As a side-effect of using highly configurable and advanced stepper drivers such as TMC2660 it makes it necessary to sometimes tune things based on the actual hardware used. This also goes for reducing noise of the motors. This depends on a lot of factors amongst others are motor current, resonance of motor mount, current micro-step position on the motor end as well as a lot of parameters set to the stepper drivers.
How to modify these parameters
From RRF 2.02 onward these values can be modified using the F, B,H,Y and V switches for the M569 command for a specific driver.
Prior to that (from RRF 2.0 onward the configuration register could be modified directly using the "C" switch on M569. This is not longer required from RRF 2.02 onward
Available Configuration Parameters
Trinamic drivers have multiple parameters to set that can have an influence on the sounds of motors. These are all combined in the so called Chopper Control Register aka CHOPCONF that is set to the drivers by RRF.
On the TMC2660 this register is made up of the following individual values (note it is not necessary to directly modify the register from RRF 2.02 onward, this is shown here for interest only):
|Variable||Meaning||Value Range||RRF Default value|
|HSTRT||Hysteresis start value||0..7||3|
|HEND||Hysteresis end (low) value||0..15||3|
|HDEC||Hysteresis decrement interval||16, 32, 48, 64||16|
|RNDTF||Random TOFF time||0, 1||0|
|CHM||Chopper mode||0, 1||0 (=spreadCycle)|
|TBL||Blanking time||16, 24, 36, 54||36|
All separate values are encoded in a bit mask and sent as one value from RRF to the stepper drivers.
There are some inter-dependencies on these values but most notable is
HSTRT + HEND <= 15
For the registers of the other Trinamic drivers, see the individual datasheets.
Most of the time users report very silent steppers while they are moving but unpleasant noises when drivers are standing still. There are various methods implemented in RRF like idle-current-reduction that should address these but sometimes it can be necessary to do a more fine-granular tuning on one or more motors to achieve the lowest noise-level.
The most influence on stand-still noise has been found in the TOFF parameter so that is what this guide will focus on. Of course you are free to also change all other parameters but they have been found to make at most a very marginal impact.
As mentioned before tuning these parameters is highly hardware specific and even if one printer uses the same type of motors for all axes it will probably also be necessary to tune the parameter(s) for each motor separately. Also sometimes the default value already is the best.
To modify the TOFF parameter one uses the M569 command, more specifically the C parameter of this command.
Starting with RRF 2.02 the M569 command has been extended with a new Fnnn parameter to set the TOFF value directly without using the rather hard-to-read CHOPCONF register bitmask.
This requires RepRapFirmware 2.0 or later.
Only tune one motor at a time with no idle-current-reduction. Do it as follows
- Activate the motor to be tuned by either homing it (for a moving axis) or moving it in case of an extruder motor (you might have to disable cold extrusion prevention with M302 P1 but then only do a very tiny move like G1 E0.01 to prevent grinding of filament - that will be sufficient to activate the motor)
- If necessary disable all other motors by issuing M84 <motor designations go here>
- Disable idle-current reduction for the motors with M906 I100
Modifying the CHOPCONF Register
Next step is to actually modify the value in the CHOPCONF register of the driver for the motor being tuned.
It follows a table of all values with all variables kept at their RRF default value except for TOFF
|TOFF||Command RRF <= 2.01||Command RRF >= 2.02||Comment|
|0||M569 C65968||This will turn the motor off completely. This is not a valid value for the Fnnn parameter.|
|1||M569 C65969||M569 F1|
|2||M569 C65970||M569 F2|
|3||M569 C65971||M569 F3|
|4||M569 C65972||M569 F4||Default|
|5||M569 C65973||M569 F5|
|6||M569 C65974||M569 F6|
|7||M569 C65975||M569 F7|
|8||M569 C65976||M569 F8|
|9||M569 C65977||M569 F9|
|10||M569 C65978||M569 F10|
|11||M569 C65979||M569 F11|
|12||M569 C65980||M569 F12|
|13||M569 C65981||M569 F13|
|14||M569 C65982||M569 F14|
|15||M569 C65983||M569 F15|
All of these commands need to be extended to address the motor being tuned by adding the apporiate Pnnn parameter where nnn corresponds to the driver number starting at 0. So usually X=0, Y=1, Z=2, E0=3, E1=4, etc. So a full command to set the Y axis motor to a TOFF value of 8 would be M569 C65976 P1 or M569 F8 P1 using RRF 2.02 or later.
Nothing else needs to be added. The effect (if any) will be immediately after issuing the command.
Generally TOFF values above 10 will give a very unpleasant high-pitched noise but you can of course still try all values to be sure.
Once you have found the best setting for this motor amend the M569 command in your config.g with the Cnnn|Fnnn value you found is the most silent (it is advised to add the corresponding value of TOFF as a comment to that line in case you are using the Cnnn parameter). Then go on with the next motor.
As said before the other variables in CHOPCONF seem to have very little effect on stand-still noise but if you still want to test these the following switches can be added to the M569 command (RRF2.02 or later):
Bnn Blanking time (tbl) in the chopper control register, 0 to 3. See the TMC driver datasheet.
Hnn'' thigh'' parameter for those stepper driver chips that support it. Send M569 P# (where # is the driver number) with no additional parameters to see how this translates into mm/sec. See also the V parameter.
Yaa:bb or Yaa:bb:cc Hysteresis start, end and decrement values in the chopper control register. See the TMC driver datasheet for the meaning.
Vnnn tpwmthrs parameter for those stepper driver chips that support it. This is the interval in clock cycles between 1/256 microsteps below which the drivers will switch from stealthChop to to spreadCycle mode. Only applies when the driver is configured in stealthChop mode. Typical value are from 100 (high speed) to 4000 (low speed). Send M569 P# (where # is the driver number) with no additional parameters to see how this translates into mm/sec.
Directly editing the CHOPCONF register
Note that this tool also allows output of the result as hexadecimal value but RRF 2.0 no longer accepts hexadecimal input values.
HSTRT, HEND & HDEC
It was found to make a very subtle difference on very slow movements to tune these two parameters. In tests best combination where always with
HEND <= HSTRT
but your mileage may vary so feel free to try any combination you want.
RRF < 2.02: Using the chopconf-generator from above and a small batch script can provide a list of all possible combinations and will make sure that only valid combinations are created.
RRF >= 2.02: You can use the new M569 Ynn:nn:nn parameter to tune these values. The first number is HSTRT, the second is HEND. The third number is optional and is to set HDEC. Note that this value has to be given as 0..3 corresponding to 16, 32, 48 and 64 respectively.
Blanking time can be set via M569 Bnn and takes the value 0..3 corresponding to 16, 24, 36 and 54 respectively.
As a result of TOFF being a major factor of stand-still noise RRF 2.02 introduced a separate parameter Fnn for M569 command to only adjust the value of TOFF without having to deal with hard-to-read bitmasks.
A lot of information can be found at the following sources: