Making a DIY 3D-Printer Run Silent

3d-printing
arduino

#1

I recently watched a video that explains how to make a custom 3-D printer more silent with a TMC2130 chip. Here is the original video: click here. The video was a little hard to follow, so this post will be for clearing details that were a bit vague. I will also provide better diagrams to help with wiring as well as provide a list of Digi-Key parts.

Important Things to Note

  • This post talks about the Prusa custom printer and the RAMPS 1.4 board for motor driving. Other customer 3D printers may be able to use this special silent stepper technology.
  • This works with 8-bit boards.
  • The wiring is specific to the RAMPS 1.4, but any similar driver board with similar pin configuration can be used according to the video.
  • We do not carry the RAMPS 1.4 board.
  • The post assumes the user has a soldering iron, wire strippers, and wire cutters.
  • The firmware software used is the latest version of Marlin, available here.

What is the TMC2130?

The TMC2130 is also known as the Silent Step Stick, part number 1460-1187-ND; manufacturer’s part number TMC SILENTSTEPSTICK SPI. This little driver has the ability to connect to a motor controller and use an algorithm to reduce the amount of current used and therefore make the operation smoother and more silent. The advantage of this silent driver is that no extra tuning with a potentiometer is required.

Hardware Configuration

The first action mentioned is soldering the headers on the silent step stick. The item has a 16 DIP type design, but not all pins need to be plugged into the driver board. I have made a quick diagram to represent this:
SolderingPinDiagram
The “top” of the board is where the small copper pad is on top, not the integrated chip that is soldered on the board. As the man in the video explains, the integrated chip faces away from the user while the heat-sink pad faces towards the user. If the board is soldered the other way, it was done incorrectly. The next step is inserting four boards into the Ramps board and wiring the headers that are facing up. Here is a pinout diagram of the Ramps 1.4 board:


The silent stepper sticks are inserted where the black borders are, the blue boxes are where the Aux pins are located, and the red box is where the Endstop pins are. The silent step sticks are inserted so the Diag pin is facing left (towards the terminal blocks for power). The wiring diagram in the video was quickly done and didn’t provide connections to a breadboard that they mentioned in the beginning.

There was an unconnected wire in the diagram on the video, but I believe that was drawn as if there were another extruder, E1. When it comes to the actual wires, wire jumpers are typically easier to deal with. If the Auxillary connections are male headers, then the following suggested part list is recommended:

Digi-Key Part Number Manufacturer Part Number Price Per Unit Quantity
1528-2182-ND 64 3.19 USD 1
1460-1187-ND TMC SILENTSTEPSTICK SPI 12.73 USD 4
438-1143-ND TW-FP-20 7.90 USD 1 (x10 Per PKG)
1568-1792-ND PRT-09140 3.95 USD 2 (x10 Per PKG)

Here is the completed cart for all these parts: https://www.digikey.com/short/pq3b0q

For the number of physical wires used, 438-1143-ND requires 7 minimum wires and 1568-1792-ND at 15 wires. The female to female connections are between the CS wires of all four drivers to the male headers of the Aux 3 connection and the Diag pins to the end stops. The male to female wires are for the other connections between the drivers to the breadboard and the breadboard to the Aux connectors.

If the Aux connections do not have male headers in place, there is a slight change in wire selection, the breadboard and silent step are the same quantities and part numbers:

Digi-Key Part Number Manufacturer Part Number Price Per Unit Quantity
438-1143-ND TW-FP-20 7.90 USD 1 (x10 Per PKG)
1568-1792-ND PRT-09140 3.95 USD 2 (x10 Per PKG)
1568-1512-ND PRT-12795 1.95 USD 1 (x20 Per PKG)

Here is the cart for these wire jumpers: https://www.digikey.com/short/pq3b1r

This time (1568-1512-ND) a male to male wire is needed for connecting the breadboard to the connection points on the Aux ports. 3 Female to Female (438-1143-ND) wires for connecting the Diag pins to the end stops. Finally, all the other wires (16 of 1568-1792-ND) are male to female jumpers.

Software Configuration

After the latest version of Marlin is downloaded, open the .ino file in the Arduino IDE. There should be a bunch of tabs open for different files for the firmware. Click the one that says Configuration_adv.h. Use Ctrl + F to search for 2130. Enable the HAVE_TMC2130 by deleting the // in front of that code line. Be sure to install the TMC Arduino Library by clicking the Sketch menu, Include Library, and then Manage Libraries. Search for 2130 and download the latest release. Beneath the HAVE_TMC2130 there are lines for each motor used. For the video, the E0, X, Y, Z motors are used, so he uncommented those lines:

//#define X_IS_TMC2130
//#define Y_IS_TMC2130
//#define Z_IS_TMC2130
//#define E0_IS_TMC2130

The rest can stay commented. If an extruder motor is being used, scroll down past Z_CURRENT and Z_MICROSTEPS and uncomment the lines:

//#define E0_CURRENT 1000
//#define E0_MICROSTEPS 16

The default value for the R_Sense is recommended by the guy in the video. It is okay to play around with the HOLD_MULTIPLIER. 0.2 is the lowest it can go without problems and 1 is the max. Leave interpolate alone. The current can be adjusted per motor beneath that. The number to the right of the _CURRENT is in milliAmps. It is recommended to stay around 1 or 1.2 A (RMS). He uses 800mA in the example. Again, scroll down to determine whether Stealthchop will be used or Spreadcycle (comment or uncomment those lines). Stealthchop is recommended if a silent operation is desired. This will leave the motors weaker and is not optimal for high precision use. Spreadcycle is used if a faster operation is desired, but this will be louder. There is a compromise called Hybrid mode which can use a combination of both, but he recommended using one or the other. Then turn on Automatic Current Control (located where Hybrid mode is) and turn on sensorless homing. Play with values in sensorless homing if a noticeable change is observed, but the defaults should be okay for most printers. Add the following lines after Y_Homingsensitivity:

#define X_HOME_BUMP_MM 0
#define Y_HOME_BUMP_MM 0

These lines keep the printer from bumping into the axis too often. Upload the firmware to test if things are running smoothly.

Troubleshooting Code Issues

The end of the video has firmware suggestions if certain problems arise. If the axis only moves one way, go to configuration.h and change ENDSTOP_INVERTING to false. If the axis moves the wrong way, go to configuration.h and chagne ENDSTOP_…_DIR or flip the motor connector.