Skip to main content
/

Site Navigation

Your Account

Choose Language

Help

Revision to Reducing Stand-Still Noise

Manuel Coenen

+[title|Reducing Stand-Still Noise]
+[toc]
+
+[summary]This requires RepRapFirmware 2.0 or later[/summary]
+
+
+
+== Background ==
+
+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.
+
+=== Available Configuration Parameters ===
+
+TMC2660 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. This register is made up of the following individual values:
+
+{table
+|! Variable
+|! Meaning
+|! Value Range
+|! RRF Default value
+|--
+| TOFF
+| Off time
+| 0..15
+| 4
+|--
+| 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
+|--
+| 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
+
+[code]HSTRT + HEND <= 15[/code]
+
+=== Stand-Still Noise ===
+
+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 and 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 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.
+
+== Tuning ==
+
+To modify the ``TOFF`` parameter one uses the [[Gcode#Section_M569_Set_motor_driver_direction_enable_polarity_and_step_pulse_timing|M569]] command, more specifically the C parameter of this command.
+
+=== Preparations ===
+
+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 [[Gcode#Section_M302_Allow_cold_extrudes|M302 P1]] but then only do a very tiny move like G1 E0.01 - 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 list of all values with all variables kept at their RRF default value except for ``TOFF``
+
+* ``TOFF=0`` -> ``M569 C65968`` (this means motors are off!)
+* ``TOFF=1`` -> ``M569 C65969``
+* ``TOFF=2`` -> ``M569 C65970``
+* ``TOFF=3`` -> ``M569 C65971``
+* ``TOFF=4`` -> ``M569 C65972`` - default
+* ``TOFF=5`` -> ``M569 C65973``
+* ``TOFF=6`` -> ``M569 C65974``
+* ``TOFF=7`` -> ``M569 C65975``
+* ``TOFF=8`` -> ``M569 C65976``
+* ``TOFF=9`` -> ``M569 C65977``
+* ``TOFF=10`` -> ``M569 C65978``
+* ``TOFF=11`` -> ``M569 C65979``
+* ``TOFF=12`` -> ``M569 C65980``
+* ``TOFF=13`` -> ``M569 C65981``
+* ``TOFF=14`` -> ``M569 C65982``
+* ``TOFF=15`` -> ``M569 C65983``
+
+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. 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`` value you found is the most silent (it is advised to add the corresponding value of ``TOFF`` as a comment to that line). Then go on with the next motor.
+
+=== Other Variables ===
+
+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 there exists a tool that lets you configure all variables and creates the appropriate value for the ``M569 Cnnn`` parameter at [https://github.com/wilriker/chopconf-generator|chopconf-generator] (with pre-compiled releases at the [https://github.com/wilriker/chopconf-generator/releases|Releases page]).
+
+Note that this tool also allows output of the result as hexadecimal value but ironically RRF 2.0 does no longer accept hexadecimal input values.
+
+=== Future Development ===
+
+As a result of ``TOFF`` being a major factor of stand-still noise a future version of RRF will have a separate paramter for (most probably) ``M569`` command to only adjust the value of ``TOFF`` without having to deal with hard-to-read bitmasks.
+
+== External References ==
+
+A lot of information can be found at the following sources:
+
+* https://forum.duet3d.com/topic/5392/does-m906-set-rms-or-peak-current/19
+* [https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC2660_datasheet.pdf|TMC2660 Datasheet]
+* [https://www.trinamic.com/fileadmin/assets/Support/Appnotes/AN001-spreadCycle.pdf|Parameterization of spreadCycle™]