Completed redesign of the TMC2660 branch

I spent a lot of time getting the PrntrBoard tmc2130 version to work. I’m at the point where I’m quite happy with it and don’t see major further changes. The tmc2660 branch did not get a lot of attention in the mean time.

So I spent a weekend completely re-designing the tmc2660 board. I ported all changes from the tmc2130 version. There is now a dedicated ground plane layer and routing it much easier.

I opted to put all drivers on one side of the board. Unfortunately limiting the size to 10x10cm (or 3.9×3.9 inches), I could not fit all drivers in one row.  Hopefully cooling would not be major PITA as it was on the tmc2130 version.

Here is a screenshot of the 3D rendering of the redesigned board:

Please excuse my mistake, the top row of power connectors is facing backwards. Fortunately these are symmetrical and I can simply solder them the other way.

Here is a view from the top:

I used very aggressive layout for the connectors and I ended with some spare space in the middle of the board. I was thinking to add two automotive type fuse holders for extra protection. I haven’t quite settled on what fuse holder to use. Here are two renderings with the footprints in KiCAD:

And view from the top:

All changes have been pushed to my GitHub design repository page. The version with the fuses is in the tmc2660-fuse branch.

Controller brain – replaced

While I was working on porting Smoothieware to run on my 3D printer controller, I was going back and forth between my trusted NUCLEO-64 F446 devkit and a new acquisition from china – the “Black VET6“. That was a very capable board with onboard SPI EEPROM, battery backup, micro SD card and USB connector – all this for less that $10 from aliexpress.

While the NUCLEO has the advantage of build-in ST-LINK debugger, I was missing the SD-CARD connector and the extra pins to work with.

The NUCLEO-64 uses only 64-pin micro-controller package and I was running out of available IO pins. For example on the Rev3 of my controller I has to use every last pin to be able to connect an LCD screen – and even then sharing the SPI bus between the screen and the TMC drivers was causing some issues.

Here comes a proposed solution for this issues: a NUCLEO-64 form factor board designed with a 100-pin MCU (STM32F407VE):

This was my very first try and I did not have all parts available yet, so you can see some unpopulated pads.

The board is the same size as NUCLEO-64, and has the same dual row connector on the back:

Here is a “fuzzy” picture of the two boards side by side:

The USB connector is micro-usb, which I think is more available. There is a micro-sd card slot and a plethora of expansion ports for future extensions like LCD panel, WiFi module or even more extruders.

I also added some SPI EEPROM so we can save settings etc. Last but not least there is a power supply module which provides 5V up to 3A from 12 to 24V input. The 5V and 3.3V from the CPU board are connected to the motor controller board so there is no need for an external 5V buck converter anymore.

The only slight disadvantage is that now I have to use external ST-LINK adapter to program the board and an external serial-to-usb adapter for debugging.

Here is a little video comparing the two boards side by side:

Tested LCD interface

I had one RAMPS discount full graphics controller laying around from my RigidBot. I did use it with the original controller and decided to test it with the PrntrBoard.

In Rev1 and Rev2 of the board I did not have enough pins on the LCD connector to be able to use all buttons on the panel. In the Rev3 I used every last pin of the tiny 64-pin package and I just got enough (or so I thought).

I learned the SPI used by the LCD panel is not very standard and had to fight with Marlin to make the TMC drivers and the LCD co-exist on the same SPI bus.

Finally I was able to use the panel:

One of the pins I used for the button input did not quite cooperate, so I have only one button + the rotary controller for the UI. Lucky for me both Marlin and Smoothieware were functioning with that configuration.

I had to disable the TMC diver monitoring, because the LCD controller was getting confused by the SPI communication with the TMC drivers. I think I can create a small breakout board with a few AND gates to alleviate this interference.

Here is a video of the panel working in Smoothieware:

 

More progress on the Smoothieware for STM32

After a few unsuccessful attempts, I got Smoothie to move my stepper motors on the PrntrBoard controller.

At first the smoothie had a bug in the SPI dirver and was unable to talk to the TMC2130 chips. Fixed that, then the steppers still would not move.

I can see the drivers were sending current, because my power supply would start the fans up, but zero steps. I spend the day trying to diff the configuration between Marlin and Smoothie, but nothing was wrong. Finally caught a bug in the Stepper timers and lo and behold movement.

I’ll make a video of my Rigidbot running Smoothie on STM32 next week.

Smoothieware on the PRNTRboard

Thanks to the huge work by Matt Baker, I now have Smoothieware V1 booting on the Prntrboard. Matt did an excellent job with the initial port of Smoothie to the STM32 series of CPUs. I did some tweaks and added a target for the NUCLEO-64 board I’m using. After a few weeks of work it does boot and I can verify the temperature controller works.

It does not have all features of the original Smoothie board (no SD-card and no Network) but I do have better drivers – TMC2130.

Here is a picture of me testing the hot end heater control:

The heater was set to a “safe” 55 degree Celsius. I would say the PWM control for the heater is much “smoother” on the Smoothieware.

My port of Smoothieware V1 is on github. My working branch is stm32f4. I also have stm32f4-tmc2130 with the TMC patches.

https://github.com/ghent360/Smoothieware-STM32F4

Here is a picture of the heater setup:

PrntrBoard TMC2130 redesign is complete

When I was working on the new layout for the TMC2660 branch of the board, I used a dedicated ground plane and turned out this was awesome. It simplified lots of the routing as well as added good heat dissipation capabilities to the board.

I wanted to try and redo the layout of the TMC2130 branch with this technique. In addition I wanted to swap the location of the E1 motor driver and the 5V input connector, before the E1 driver was crammed in the corner and it was challenging to get good routing of the power pins. By swapping the position with the 5V power connector there is a bit more space.

The third thing I wanted to try was to reverse the position of the STM32 NUCLEO board – in the previous design it was sticking out in an unsightly manner.

So here it is new layout all complete. DRC checks pass.

In a slightly different perspective:

You can see the NUCLEO does not block the mounting hole on the lower left corner anymore (MK4).

Here is a look from the bottom:

The motor driver have large area on the bottom for heat dissipation. You can also see the large rectangle area on the bed heater control MOSFET on the top.

I also added a few extra power connectors – two for Vin and two to the 5V rail, to hook cooling fans for the case. You can see two of them on the low left corner in the last picture.

Note: while the last picture shows the STM32F411 CPU, the board actually required the STM32F446 version. The only 3D model I found for the NUCLEO STM32 dev kit was with the STM32F441 part, so that is why it is on the images.

PrntrBoard first 3D print

I got this cute little 3D printer from the local MicroCenter two days ago. I know, I know, not everyone has MicroCenter around.

Anyhow, the printer is Wanhao Duplicator I3 Mini, it is OEM made for MicroCenter as “PowerSpec” brand. It is not the pinnacle of engineering, but it is quite amazing when it comes to cost cutting. Very minimal design – just the basics, but quite usable.

It has this cute front panel with graphic LCD:

I believe Monoprice sells a version of this printer with better features. It’s a good choice if you are looking to get into the hobby and don’t want to break the bank. The Monoprice version is $50 more expensive, but has way better features like heated bed and wifi support.

Here is a “torture test” I printed with the printer in it’s stock configuration with the sample filament that came with it. It is not bad at all.

The main reason I got this printer was to test my 3D printer controller board (open source designs on github.com here). I wanted something small that would fit on my desk and this printer was an excellent choice. Naturally I butchered it to connect my controller:

After a day of tweaking the Marlin firmware, I managed to get it to work:

I printed for about 3 hour yesterday, constantly checking the motor drivers for overheating, but they were not even breaking a sweat.

The motors are very quiet, unlike my screeching power supply on the video. Next, I’ll have to design a box for the controller, it is quite unsightly sitting like that with all cables.

PrntrBoard V1 updated with thermocouple interface

After a few idle weeks, I finally decided to order the current rev1 of the TMC2130 board design. I found this web site (pcbshopper.com) which compares the price of various PCB manufacturers and matches them with your board specifications.

As luck would have it, a day after I sent the files to the board manufacturer (jlcpcb for the rev1), I had an idea of adding thermocouple interface.

Here is the rev2 of the board with dual thermocouple connectors. It should work with MAX31856, MAX31855 as well as the good old MAX6675 chips. All of these are based on some form of SPI interface, and I just added them to the bus.

Because I used all I/O pins, if you decide you need thermocouples, you’ll have to sacrifice the two controllable extruder cooling fans. Most 3d printers come with “always on” cooling fans anyway.

The thermocouple connectors use generic SPI(MISO, MOSI, SCK, CS) + 5V power and GND pins. In theory one could connect other things, with appropriate software patch.

PrntrBoard – bringing it to live May 13th.

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.

Well, ’till next time

~V