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|
|Hysteresis start value||0..7||3|
|Hysteresis end (low) value||0..15||3|
|Hysteresis decrement interval||16, 32, 48, 64||16|
|Random TOFF time||0, 1||0|
|Chopper mode||0, 1||0 (=spreadCycle)|
|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.01to 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>
- If necessary disable all other motors by issuing
- Disable idle-current reduction for the motors with
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||Command RRF <= 2.01||Command RRF >= 2.02||Comment|
|0||This will turn the motor off completely. This is not a valid value for the |
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.
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.
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
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: