The TMC2130 version of the PRNTRboard is working very well. I’ve been using it for over 6 months on my soldering robot project. It is very stable and reliable.
I didn’t have time polishing the Marlin firm ware for it. I wanted to make the SD-card work on the F407 Nucleo-64 replacement board. Alas every time I look at the Marlin code, I loose all hope and start doing something else.
A few months ago I started working again on the TMC2660 version. This was the first variant I routed successfully, but I ran into trouble with controlling the drivers over SPI and switched my effort to the TMC2130 version. Long story short, when the TMC2130 was in a good shape I started looking back at the TMC2660 version. It is on rev 5 now and I’m really happy with the layout. In my opinion it looks much better than the TMC2130.
I managed to produce a working Marlin firmware for the TMC2660 board and tested a few motors. So far it works like a charm.
My only gripe is that while the mate black finish looks awesome, it is absolute PITA to clean the solder residue from it. I washed this board 3 times and you can still see some spots on it.
As a kick all thru-hole pins on the Nucleo-F407 board underneath are soldered using my soldering robot. On the TMC2660 I soldered the two headers with the robot.
Last but not least I started working on a version with TMC2209 drivers – these are quite capable and low cost compared to other Trinamic offerings.
I was very frustrated with my failure to get the TMC2660 board variation running. I checked and double checked the connections, alas the steppers would not move at all.
I purchased one TMC2660-BOB kit from digikey and started experimenting with it, instead of my board. At first, I had the same failure – the stepper would not move at all. The software was a very simple Arduino sketch – what would be that wrong. Since the kit was designed by Trinamic, the hardware should be proper. Alas, no luck. I declared the TMC2660 chip cursed and moved to my soldering machine project.
Yesterday I decided to give the test jig one more try. After a few failed attempts. I spotted an error in the Arduino code – I was passing the incorrect CS pin in the driver setup. DUH!!! After a quick fix it was working.
Then I moved back to my original goal to test the thermal dissipation ability of my TMC2660 PrntrBoard design. I connected my board and started to torture test the motor driver. Unfortunately I was not able to run the driver past 1.5A RMS, which is a shame. I’ll try using a different motor with higher coli resistance. Anyhow here is an image from my thermal camera of the top of the ship:
The chip has no heat-sink and runs at 54C. This is not bad at all. much cooler than the TMC2130 version. The board seems to be dissipating quite a bit of the energy.
Here is a picture of the bottom of the board:
The bottom is at 45C in the center, which I think is quite good thermal conductivity of the board layers.
I feel good about the board thermal capabilities. If I add heat-sinks on the top and the bottom it should be able to run at 2A RMS and above with active cooling.
For a while now I had this idea – create a small board which controls the extruder heaters and fans.
Why – you ask? Well hear my theory. I have this old printer – the RigidBot. It has dual extruder – all direct drive. However I noticed that when it starts to work my temperature readings become very noisy.
Initially I was puzzled, why the noise. After some investigation I noticed that the noise is present only after the printer motors are on. If I switch the motors off (via G-code command) the temperature line in OctoPrint becomes smooth again. It turns out the motor current is creating EMF interference with the thermisor wire.
So I was thinking instead of routing all these wires back and forth, I can build a small board with a cheap CPU that controls the temperature. I can also outsource the control of the cooling fans and even add local display etc.
All the wires needed would be power and some way to communicate between the main board and the extruder daughter board. Audio cables are relatively cheap and well shielded – I can use one for I2C or Serial communication.
In a dual extruder setup one can save quite a bit of wires: two pairs of power wires for the heaters, two pairs for the thermistors, another two pairs for the extruder fans and one or two pairs for parts cooling fans. All these could be replaced with one pair for power and an audio cable for communication – the rest of the wires are all local to the board. Well one has to mount the board somewhere close to the hotends.
Long story short, the first version of the board was not a grand success. The power supply was very noisy and the temperature readings from the ADC were so unreliable, that it was throwing the PID into a weird loop.
Here is the second installment of the board. The power is now dual stage – a buck converter to 5V and then LDO to 3.3V for the micro controller. The LDO filters the noise from the buck converter.
The brain is STM32F030 micro controller. There are 3 fan connectors with tachometer inputs, so in theory the board can alarm if the fan stops working, just like the Prusa MK3. There are 2 thermistor inputs, 2 heater MOSFETS as well as 2 thermocouple controller inputs – for MAX31855 or MAX31865 or similar.
In the next version the voltage the fans would be select-able to whatever the input is (12V or 24V) or 5V. There is a bunch of unpopulated extension pins and an LCD connector for extra fanciness.
I was testing the PID in Arduino code and it works quite well this time.
Just for fun I decided to try my thermal camera to see if there are any hot spots. The picture is with the heater 1 working.
No surprises, the heater MOSFET is a bit warm. The hottest spot is on the buck converter – 37C. Don’t be alarmed by the bright colors 37C is barely warm to the touch.
I’m still trying to figure out what should I use as software platform. Arduino is simple, but somewhat limiting. The STM32 CumeMX is another option. There is MBed and FreeRTOS options if I want to try multi tasking. Oh decisions, decisions.
I dusted off my trusty pick and place and made one of the newly received TMC2660 driver boards.
Since it’s the first time I test this setup I populated only one of the driver chips – the X axis.
Alas it was all in vain. After fighting with it for several days, the motor would not spin properly. Either my stepper driver configuration so completely busted (although I double and triple checked) or the driver chip is fried. One of the phases works, but the other sends no current to the stepper motor.
Also I was trying to fit some automotive fuses on the board – you know for protection. Alas the fuse holders I ordered are very flimsy and don’t fit the fuses at all. Ordered a different set, but have to wait.
In my previous tests my PrntrBoard prototype was having some issues talking to the TMC2130 motor driver chip. It took a while, but I figured out the issue – the SPI library was not initializing correctly, so the chip was using the SPI0, hardware block, while on my board the drivers are hooked to SPI1 pins.
A few configuration settings later and Marlin was booting up, without complaining. In the process of debugging I also created a small test program to control the motor driver. You can see it here.
From that work I found that the motor driver chip was getting quite hot if I set the motor current at 900mA. The default was 600mA – it was getting warm but not as bad. Anyhow I decided I want to further stress the thermal design of the board and ordered this 4 channel thermometer.
The thermometer arrived today and I set to use it for a few tests. Keep in mind the accuracy of the thermometer is questionable at this point. I did a very simple test:
at ambient room temperature all 4 channels showed values within 0.3 degree Celsius.
I held all 4 probes in my hand and all 4 showed 35.1C – again within 0.2C of each other.
First I tried to test the extruder heater control logic. From previous attempts I know it was working, but I wanted to see how accurate the temperature is. I set the printer to heat the E1 to 180C:
M104 T1 S180
This is a video from that test. My thermometer shower 163.5C or thereabouts – so there is a significant offset between the firmware and the thermometer. I also verified with an infrared thermometer and it was showing ~160C. So it seems the thermistor setting is not quite correct. The bad thing is that this heater came from China and I have no clue what thermistor they used, so I’ll have to measure it a few times to determine the correct parameters that should go in the firmware. That would be a post on its own.
Disappointed from my temperature control test, I set to test the thermal design of the board. I added a thermocouple to the bottom of the board – where the motor driver ship is mounted.
as well as a second thermocouple on top of the chip
This was to test a theory, which suggested that the chip dissipates more heat on the bottom side.
Attempt one was not very conclusive. This was using Marlin, I enabled the extruder motor and with the default settings it had 600mA of drive current and 300mA standby current, but this was not enough. The driver chip was barely at 30C and both top and bottom were at similar temperature.
Attempt two almost ended in a disaster. I used the above test program to make the motor running with 900mA drive current, but the program had an unfortunate side effect of leaving the extruder heater on. I smelled smoke and turned the power off. The smoke smell was from the extruder heater melting the temperature probe cable.
Crisis averted and on to attempt number three. My test program was spinning the motor, the power consumption was about 0.5A at 12V. The chip was heating with steady rate, even with my big fan blowing over the board. It was clear the board would not sustain such current. However the top and bottom of the chip were within 1-2C of each other. I decided that maybe the fan was interfering with the measurements and thus ensued attempt number five.
The chip was heating rapidly, but finally you can see the top was 5C hotter than the bottom. Another observation was how quickly things cooled down after the power was turned off.
After all this what is the conclusion:
the motor driver does get hot on the top, so putting a radiator on the top has some merit
my thermal design sucks, and I decided to re-route the bottom of the board, so there is a large copper area with no traces which can dissipate the heat from the chip.
the thermistor coefficient needs to be calibrated in the firmware
on the bright side almost all controls are working and Marlin is operational to a degree.