The good old TMC2130 chip has fallen out of favor thanks to newcomers like the TMC2208/9. It is still top-shelf stuff and the preferred driver by Prusa for the Einsy Rambo as well as their MMU control board.
New chips are cheaper and cad drive more current, but the 2130 sill has one thing you can’t beat – it can handle voltages up to 46V.
Here is an example of a motor driver in the same PCIe form factor with external 3.5mm power terminal block. This allows the driver to use high voltage for example 36V or 42V to drive beefier motor.
The solder jumper on the bottom can be shorted and then the driver would take power from the carrier board.
I wanted to push my TMC2209 driver design to high-er current. The driver chip is relatively small and even at moderate 1.3A RMS motor current it gets very hot very fast.
Now to be fair 1.3A RMS is probably more than enough to drive most NEMA17 stepper motors. However every once in a while one can get a 1.6A motor or in my case a 1.7A motor. Now in most cases it is not required that you drive the motor with it’s maximum rated current, I just wanted to push the driver and see how it fairs under load.
Here is a picture of my very messy desk with the test setup:
I have my 1.7A NEMA17 motor on a linear rail I used for the test. Above it you can spot my Seek Compact Pro thermal camera. It is not the most accurate instrument, but does the job +/- 5 degree C.
The driver board has one 14x14x7mm heat sink on the driver chip and one 25x25x5mm heat sink on the back of the board, There is also a low RPM 5V 40mm fan blowing air horizontally across the driver boards.
First I configured the driver to use 1.6A RMS current and run a series to G1 X100;G1 X0 commands to move the axis back and forth. I used relatively slow speed, because from my experience this heats the driver the most. This test was uneventful (aka no smoke or major errors), so I proceeded to configure the driver to use 1.7A RMS current.
Here is a picture of the temperature of the board after about 15 minutes of moving the axis back & forth:
The hottest spot is around 54C. While the colors are very dramatic, this is quite cool for this type of setup.
The back side was about 45C:
In conclusion the test was very successful. In previous experiments the drivers would heat up to 70C. In this setup 54C was quite reasonable for the amount of current the driver was handling.
Here is a picture of the driver boards. I tested all of them and they worked flawlessly out of the box.
These are the semi-assembled controllers. I use semi-assembled, because only the SMT components were populated and I have to spin my soldering robot to work on the thru hole connectors.
Next I tested the sensorless homing capability of the TMC2209 drivers. After some tuning of the sensitivity parameter is works very well. You can see one linear rail axis homing with no sensors in this video:
I also decided to work on improving the mounting of the drivers to the board. The driver boards were not very stable in the PCI Express slots and I designed these little plastic holders to fix them in place.
They are bolted to the bottom of the controller PCB. The drivers are very well affixed in place.
While I was trying to get my 2004 LCD panel to work with the controller, I found that not all “standard” EXP1 and EXP2 connectors have the same orientation. At first I though that the SKR 1.3 board, just has them backwards, but I then found this article on the RepRap discussion forum. It appears that the original schematics had an error and now some boards/displays are just backwards. I quickly flipped the connector on my 2004 display and with worked, but this can be quite frustrating.
I made a small PCB that one can use to flip the polarity of the connectors. “To flip or not to flip” seems to be ongoing question.
First my woes with the TMC2209 driver boards are ongoing. The company making the PCBs called that they could not complete my last two prototype designs. The issue was that I didn’t pay attention to the fabrication capabilities and used the wrong design rules.
Long story short I had to re-wire part of the board to meet their spec and submit another order. Alas that meant I have to wait another two weeks for the boards to appear 🙁
In the mean time I was trying to test what I can with the rev1 prototype I had. I tested the heaters and thermistors are working. Now it was turn to my old nemesis – the LCD panel.
The software for these LCD panels is remarkably convoluted and not at all supported on STM32 series of MCUs. I had to write two more drivers for the U8G library, but finally some good progress:
I got the FYSETC mini 12864 panel to work. To finish the week, I also verified the SD-card interface is working.
QFN packages and I could not get on the same page. I made one prototype of the V1 design with TMC2209 drivers and only 3 out of 5 worked. I had to re-solder them 3 times just to get them to talk to the CPU. I was just thinking these are just hard on my aging hands and eyes.
I found countless YouTube videos of people soldering chips with QFN packages and it all seems so effortless. I thought I just suck at this.
Yesterday I made some driver board for the V2 design with the 2209 drivers and again had to re-solder the chips, followed the YouTube guides and no luck. Two would move the motors in very strange way and consume quite a bit of power and one plain would not move.
Here is one of the dreaded beasts
I was ready to give up, when I decided to check the driver datasheet for the recommended PCB land pattern. I thought maybe I’m missing something.
For background I downloaded a KiCAD footprint from somewhere and foolishly assumed since it was for Trinamic drivers, it should be correct. Oh well, lesson learned.
Turns out this chip has oversized exposure pad. It is so big that it would touch the pads for the pins on the PCB. It is very likely some of the pins on my board are just shorted to the ground via the die pad underneath.
This is the chip footprint I downloaded:
Looks pretty normal, except the center pad (29) is 3x3mm size. According to the TMC2209 datasheet, the pad on their chip is 3.7×3.7 mm size. Look what happens when I update the center pad size to match the datasheet:
The pin pads are almost connected to the center pad. I resized the pins to match the spec and this is the result
GRRR, All I have to say is “^@%$@^%$!”
I ordered a new set of driver boards with the fixed footprint.
Many thanks to the awesome team at JLCPCB. I’m really impressed by the speed and the exceptionally low prices. I ordered a set of prototype boards for the V2 design on Oct 28th and they arrived today at my door. Total 8 days including shipping from China.
Here it is 150x105mm 2 layer board:
I ordered the 2660 drivers also from JLC, but I don’t like the red mask color:
The 2660 driver is 4 layer board with “gold fingers” – this is code for the board edge PCIe connector.
The purple board is the 2209 driver. That board is from ohspark. No much difference between the two, except the ENIG finish is standard on oshpark and the purple color is dope. The JLC board comes with a little chamfer around the connector, which is nice.
This is what the driver board looks like plugged in a PCIe slot.
Reflecting on the PrntrBoard V1, there are many good things that I managed to accomplish:
all 3 versions of the board (2130, 2660 and 2209) were functional
the board features were good
driver cooling was excellent
When I started 2 years ago, there were very few 32-bit boards with comparable features. Now there is quite a bit of them. I was trying to find what makes one design more popular than the other and in addition to the board features it comes down to flexibility.
In PrntrBoard V1 I was trying to provide superior cooling solution compared to the tiny replaceable driver board used everywhere. However that choice came at the expense of a monolithic design, which was expensive to make and costly to evolve. Every time I wanted to use a different driver chip I had to re-design the whole board from scratch. It was not going to be sustainable in the long run.
Announcing the PrntrBoardV2: combining all lessons learned and expanding the versatility of the design.
First major change is that the motor drivers are no longer part of the board. Because I still find the original Pololu driver form factor very limiting, I designed the motor driver carried boards to use PCIe slots instead of pin headers.
Here is what the carrier board looks like
The board has 32-bit Arm micro controller – my favorite STM32F407. There are 6 stepper motor slots, with support for 6 thermistors or 6 thermocouples (vie external boards).
There are 4 power MOSFET outputs (1 bed and 3 heaters) and 5 low power MOSFET outputs for fans or LEDs.
Connectivity is via traditional USB, micro-sd card. There are 2 more serial ports for a smart LCD controller and WiFi extension.
I have the traditional RAMPS LCD expansion headers, which should support a variety of LCD screen designs.
Last but not least there are 8 end stops and the ability to route the stall detection signal from the steppers to individual end stops or a global “Alarm” signal.
Drivers are on separate boards with PCIe card edge connectors. This is what the TMC2660 version looks like
And this is what the TMC2209 version looks like
I added some mounting holes next to the PCIe slots so the drivers would not wiggle out of the slot with extensive vibrations.
These driver boards are much larger than the Pololu drivers, which would allow for superior cooling and the ability to have more board real estate for complex designs and or big driver ICs.
In addition the driver boards are mounted vertically on the carrier board, which saves space on the carrier board and allow for excellent air flow trough the drivers with a pair of 40mm fans.
Last but not least because of the reduced requirements on the carrier board, I can use 2 layer instead of 4 layer board, which makes the cost even lower.
I can’t wait to make a few of these and run them trough some tests.
I did some simple thermal tests on the TMC2209 board. In theory these driver chips can supply up to 2A RMS current to the motors. Silent StepSticks with the same drivers are rated around 1.2 to 1.4A depending on the manufacturer.
The test setup
I used all passive cooling. Ambient temperature was 25C. I used a small 9x9x12mm heatsink on top of the driver chip. These are commonly used on the TMC2209 StepStick boards from China (FYSETC or BIGTREETECH). These are not great, but that is what I could fit in the space. I’ll try to move some of the capacitors to make space for a larger heatsink.
On the bottom I used a 20x14x6 heatsink. Not ideal, but that is what I had laying around. There is enough space for a much larger one (25x25x8 for example).
I used a Seek thermal camera “mounted” on a small microscope stand and connected to my old Nexus 5X phone.
First I tested it at 1A RMS current. I use several very slow speed motion commands (G1 Y250 F50 followed by G1 Y0). I found that slow speed motion is much more challenging to the driver heat wise.
After about 20 minutes it board heated to about 47C on the top:
The heatsink was barely warm to the touch. In my experiments the top of the drivers always heats up more than the bottom, probably because of the relatively large thermal mass of the PCB itself.
Next I ran the board at 1.4A RMS. This was more challenging test for the heat dissipation. It took a while for the temperature to stop rising. It stabilized at around 64C on the top:
And around 55C on the bottom:
In the picture the heatsink looks “cool” because the camera can not compensate for the different emissivity of the bare aluminum.
Both top and bottom heatsinks were considerably hot to the touch. Not “burn your fingers” hot, but “I cant keep my fingers longer that 5 seconds” type of hot.
In both cases I did not get any over-temperature warnings from Marlin. I would say 1.4A is the limit on convection heat dissipation of this board in this configuration.
The Seek camera has around +/ – 5C accuracy.
I did one last test at 1.8A RMS. This was on the extreme side of the capabilities of the board. The temperature of the driver kept climbing slowly. Once it reached around 75C on the top I got an overheat alarm in Marlin, so I turned the power off.
I’m confident with some active cooling the driver would be able to run at this setting, because it took quite some time to get to the alarm.
I just got Marlin to boot and move the motors. Had to make some tweaks to the serial port configuration, because I have unique setup (X, Y and Z share one serial port) and the two extruders share another. I also use proper hardware serial ports, not the SoftwareSerial library. At the moment the code requires special patches to the STM32Duino core and the Trinamic library so it can properly support serial half-duplex communication.
On separate topic, I got a prototype of an LCD i/o board for the Nucleo-F407. I tested it with the REPRAP_DISCOUNT_SMART_CONTROLLER and was working flawlessly.
Here it is connected to my soldering machine:
The very first prototype had a bug, hence the little red wire. This adds support for the traditional EXT1 and EXT2 connectors that are popular with other boards. Graphics panels would require a little work, to convince marlin to use the second SPI hardware block.