KiCAD 3D export + onshape

In my experiments with the rev1 version of the TMC2130 board I found that the motor drivers get quite warm with increased current. If I point a fan just right it would cool the driver enough, but if the air flow was not sufficient the drivers overheat quite easily.

I wanted to improve the cooling on the PrntrBoard motor drivers. The board layout is challenging with the NUCLEO board on the bottom and a bunch of connectors on the top. Achieving good airflow for the Trinamic drivers would not be simple unless I add many many fans.

I tried to design a custom airflow conduit that would direct the air over the drivers without taking too much extra space. To start I did an export of a 3D model of the board and all components from KiCAD – it proved to be an excellent feature. I exported a STEP file, which I then tried to import in onshape. It kind of worked, but the generated assembly was full of small parts which would move all over the place and there was no easy way to tell onshape that this was one solid block of parts (at least I didn’t find an easy way to do that). Not to worry I fired off a copy of Autodesk Fusion 360. Imported the file there and added models for the heatsinks I was using on the board. I also added the IDC connectors to the NUCLEO board (they were not in the KiCAD export). I tried to figure out the assembly feature in Fusion 360, but gave up and exported STEP file again and imported it back to onshape. This time it appeared as one giant part, so I proceeded with my favorite feature – “design part in place”. This lets you design a new part in the context of an assembly and you can use geometry from the assembly as reference.

This is what the current design looks like:

 

And here is how it actually fits on the board, when I created the parts on a 3D printer:

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.

A series of unfortunate events

The long weekend was a perfect time to take some vacation days and work on my projects. Alas the past few days have been nothing but failure after failure. Ahh, let’s make lemonade.

So I started very optimistic – my 3D printer controller board was basically working, and feeling bold I went on “improving” the puny 3D printed (Duplicator I3 mini) that I purchased for this experiment.

For some time I’ve been wanting to add dual extruder support to my printers. The ability to print with PVA support, dual colors – oooh the possibilities. However my previous experience was that such endeavor is feeble at best.

Two and a half years ago I assembled a MendelMax printer with dual extruders and it was not very successful. The design used dual E3D V6 hotends – these were all the rage back then. Unfortunately there was no easy way to level the two extruder heads, so what you end up is one head printing correctly and the other was printing in the air. Even if you get them somewhat leveled one head would print and the other would scrape the filament from the bed. Add to that the head was now super heavy from two sets of steppers and assorted hardware.

Since that experiment I wanted to try a Bowden extruder setup – mainly to reduce the weight of a dual extruder setup. I also was fascinated by the E3D’s Cyclops/Chimera designs and wanted to try one. It seemed like a design that would solve some of the issues I had encountered with the MendelMax setup.

I procured parts for the cyclops/chimera setup some time ago from China, but I was suspicious why this has not become popular setup. Since the E3D designs are open, various suppliers are offering reduced price version of the kit for some time – yet it has not taken the world by storm.

In unrelated observation, I was very impressed by the Wade’s extruder design used in the Lulzbot mini. The geared setup provided so much torque – the extruder would practically push filament cold out of the nozzle – well not really, but close.

Anyhow I got the parts for the hotend, now I needed two extruders and lucky for me E3D came up with the Titan extruder. It was geared 3:1, not too bit as Wade’s masterpiece and affordable, thanks to the people of China.

To drive filament trough the extruders I opted for 2 pancake steppers with 0.9 degree precision from the E3D web site. On paper these were perfect – increase precision, low weight and as added bonus they had 6 pin plug for a  cable of my choosing, instead of the usual pigtails.

All this prep work done, rewind to yesterday where I was going to put it all together. What could possibly go wrong – well everything and more.

First I designed a mount for the cyclops/chimera hotend for the Duplicator I3 Mini. Took a few hours, but I was very happy with it. As added bonus I put a mount for a bed leveling probe.

It was looking very cool when mounted on the printer.

Here I tested the bed level probe and the endstop homing the X axis correctly. Unfortunately the bed level probe did not work out of the box. I tried to use an optron to decouple the probe high voltage output from the sensor input on the controller, but the optron was not pulling enough current to produce a level change on my board. I gave up on the bed level probe for now. I’ll have to design an adapted of some sort for it.

Then I designed a spool stand and a bracket to mount the Titan extruder, because it would not fit on the small printer body.

 

Again it was looking good. The picture is of an earlier design, without the support beam. I added it because the bracket was wobbling too much.

Then I tried to hook the extruder to the 3D printer controller and it was not working. Try as I might to increase the current – nope. It would buzz and wobble, but not spin. I dismantled the whole thing and left the motor alone – it was spinning, but in weird directions – it would change direction on it’s own. I thought the controller was busted or the motor was possessed.

Long story short it was the motor cable. Remember I was so excited that the motor had this plug, instead of cables running out of it.

Instead of splicing cables around you can just buy a cable with the length you need and plug it in the motor and the controller. Well sounds cool, except there is a trick to the cable and not all cables are created equal.

The motor has 6 pins – only four are connected. The signals are A(1), B(3), !A(4), !B(6). Pin numbers are in braces and pins 2 and 5 are not connected. Here A and B are the two motor coils and A and !A are the two ends of the coil A.

Now the connector on the controller board takes the signals in this order: A, !A, B, !B and usually the cables I got are kind enough to swap signals from pins 3 and 4, so the board receives the signals correctly. You can see where this is going. I was unlucky enough to get a straight cable so the signals were not in the right order when the motor was connected to the board.

OK lesson learned. Check the motor cable before using it. I fixed the cable and put everything back together. Still no luck.

This time the motor would try to spin but start to skip steps and would not move the extruder. It would move if I help it with my hand, but that was not a workable solution. I cranked the motor current up and it would move the filament up and down the tube, but it was struggling. I let it be and proceeded to hook everything else to the cyclops hotend.

If you are not following the cyclops/chimera is a hotend which has two configurations. The first is called cyclops: two filaments come in a common heated block and come out via single nozzle. I wanted to try that first, because this way I won’t have to level two extruder heads. It was a bit more complicated setup in the firmware, but I thought it was worth it.

Unfortunately my hopes were crushed again by failure. To spare you the details this design has a few flaws. First the filament path is not straight – in a normal extruder the filament goes in a straight line to the nozzle. In the cyclops design the filament has to bend 90 degrees twice – once it enters the heater and once to go trough the nozzle. This in turn requires much more torque from the extruder.

The second design flow is that the molten filament shares a common path between both intake points. It is possible for molten filament to go up and clog the other intake – this happened to me twice before I gave up on the cyclops.

The third problem I has was with the manufacturing of the heated block – it used way too lax tolerances an filament was oozing out from the heat break threads as well as the “plug screw” thread (a screw that is used to plug a hole on the side of the heater block).

So to conclude the cyclops was a fail. I can get it to extrude from one side, but to switch to the other side it required quite a bit of initial torque. Once you get one side going it was working, but to get it extruding was a challenge, and there was the clogging thing. Stay away.

Disheartened by this failure I dismounted the cyclops and decided to try the chimera. This configuration is more straight forward – is looks like two hotends which share a cooling block, which is a space saving design. There is the problem with leveling the two heads against the bed, but this is eased by holding each head with set screws. Not ideal but workable.

Before completing this setup, I gave up on the E3D pancake steppers – they provided too little torque for the extruders to spin reliably. I’m not sure if the motors are bad, the 0.9 degree thing or what is it, but I could hold the motor shaft with my hand and stop it from moving. If they produced any torque it was measure in mosquitoes not ounces per inch. I put two regular 1.8 degree motors I had lying around – these worked much better even with 30% lower current than the pancake motors.

The chimera setup was too plain to leave alone, so I decided to experiment with another innovation from China – the combined nozzle/heatbreak.

Again on paper it sounded intriguing. Instead of having a nozzle and a heat break tube – both meeting in the heater block. This all in one design would simplify the system. No more careful torquing of the nozzle required. Or so I thought.

Here is a picture of the combined nozzle/heatbreak tube vs a regular heatbreak tube.

I have a feeling you are questioning my sanity at this point. Why would I do this? Well you see a traditional heat break tube has to be machined properly – the sides of the holes have to be polished. This takes time and makes it expensive, so creative folk have decided to save cost by adding a PTFE (Teflon) tube.

This saves on machining the tube, but ruins the whole “all metal” hotend concept, by adding back a piece of plastic. The purpose of an “all metal” design is to be able to allow the heater to reach high temperatures (above 300C) safely. High temperatures are needed to extrude some plastics like Nylon.

The PTFE tube would limit the usable range of the hotend to 260-270C.

In addition because the nozzle and the heat break tube don’t meet in a perfectly straight line there is always the issue with the filament locking and clogging in the heater block – it is not a terribly big problem, but annoying at times.

Enter the promise of the combined nozzle/heatbreak tube. By now you should sense another fail coming.

One thing I did not account for was the amount of heat transferred between the heated block and the cooling block. It was ‘uge. The combined nozzle design was an excellent heat conductor so a large amount of heat was transferred to the cooling block. The cooling block was not able to keep up and heated to the point of melting the mount.

Also because the cooling block was not cool at all, the filament melted inside the Bowden tube clogging it and I was not able to move it up or down. It was complete and total disaster.

For posterity I measured the cooling block temperature: with one of the nozzle heaters at 215C, the cooling block was reaching 63C – not terrible but quite hot. With both heater set to 215C, I measured 91C on the outside, enough to make the mount flexible and to make the filament inside the Bowden tubes flexible as well.

Once again, I had to dismantle the hotend,  cut the clogged Bowden tubes, make a new mount and re-install the original heatbreak tubes. After two dais of failures, I settled to just be able to print something.

I measured the temperature first and with one heater set to 215C, the cooling block was at 36C (28C ambient temperature). With two heaters it climber up to 45C- on the outside and 51C on the inside. Warm but manageable.

So here it is the current setup.

Naturally the left nozzle clogged on the first print. I’m not having a good feeling on this one. Like most E3D setups you have to watch the retraction amount. You have a choice between stringing and nozzle clogging.

On my old E3D V6 I was having lots of similar issues and the cure was to “oil the hotend” – sounded like a bunch of baloney at first, but then I tried it and it really improved my  clogging issues. I should try it on this setup as well.

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.

Making PrntrBoard TMC2130 rev1

New revision (rev1) of my 3D printer controller board arrived a few weeks ago from the board manufacturer (http://jlcpcb.com). I did assemble a prototype with one driver for “smoke test”. Well it did “smoke” only a bit, because I accidentally put one chip in reverse. Lucky for me it was not the Trinamic driver – that one survived.

Anyhow today I made another board – this time with all components populated. Here is how it went up.

Mounted the PCB in an improvised jig to keep it secure on my table. The “jig” is made from 4 small PCBs from a different project. I secured them with blue tape, so they hold the main PCB in place.

Next was aligning the kapton stencil on top of the PCB. The stencil is made by http://oshstencil.com It is not aligned yet.

Here it is aligned on top of the board and secured with another piece of blue tape:

Getting ready to apply solder paste. I use “credit card” squeegee from OshStencil.

Paste away. I usually put too much, but it is easier to have some left over, than scraping the last bit of paste over and over again.

Here it is – paste applied. You can see that my footprint for TR3 needs to be fixed – the paste opening is way too big. Oh well – rev2 I guess.

By the way because my stencil application jig is not particularly sturdy you can see the solder paste is smudged over the fine point IC pads. It is not the end of the world. It makes a few solder bridges, but easily fixable. It is better, when I use solder paste printer, but I don’t have a framed stencil for this board they are $$$.

And it goes in the CHMT48VB pick-and-placer.

And the machine goes – here is a short video clip of the beginning of the job. Note that the board is split in two jobs. The second job is with different set of nozzles. I don’t have the nozzle change in the video – sorry.

The board after all components are placed by the machine. I use the machine only for tedious parts. I place other components by hand.

After manually placing the rest of the SMD parts, the board is ready for solder re-flow. I use hot air gun. I have a T962 oven, but it always seems like too much effort to use it. Here is the result of my hot air application. You can see quite a few bridges on the drivers. Click on the picture for full resolution image.

All cleaned up

Now to solder all true-hole connectors. This is the most tedious and time consuming part. Here it is all done. Front:

And back

I did a quick check and there are no shorts on any power supply lanes. On to testing the firmware.

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

Prntr Board V1

Prntr Board V1

PrntrBoard is a 3D printer controller board designed to work with STM32 NUCLEO dev kits. The current version (V1) supports NUCLEO-64 series kits. The design is being developed on F446-RE kit, but other models could work as well. IMO the STM32F446 NUCLEO-64 kit offers very good performance (180MHz CPU) for the price ($15).

Some features of the board:

  • 5x Trinamic super quiet drivers (TMC2130 or TMC2660)
  • Marlin firmware
  • 4x controllable fans and 2x “always on” fan connectors
  • selectable fan voltage (5V or Vin)

Because the NUCLEO-64 has limited number of IO pins, some compromises had to be made:

  • No sd-card
  • No display support

Generic shortcuts I don’t plan to improve:

  • 5V power supply is external. These are available from various resellers and fairly cheap – less than $1. No need to waste board layout space and component count.
  • Heated bed MOSFET – large heated beds consume a lot of power, and it is challenging to provision the design for > 10A current. External heated bed MOSFETs are very affordable < $10 and claim to support 20A minimum. If you have large bet use one.

Details

I use the daily build of KiCad (soon to be released V5) – let me know if you have trouble opening the files.

Once the design is validated I would add support for NUCLEO-144 kits, these have many more available I/O pins, which would enable more extruders, SD-card and LCD screen utilities to be added. The downside is that they are quite big and I’m trying to limit the design to 10x10cm to reduce the cost of the PCB fabrication.

The current design is using 4 layer board, 6/6 mil clearance, 12 mil via hole size and 20 mil via diameter.

There are two active branches:

  • tmc2130 – the board design for TMC2130 series drivers
  • master – the board design for TMC2660 drivers

Both PCB designs use the QFP version of the driver ICs because they can handle a bit more power.

Status

I have made prototypes of the TMC2130 board design (rev0) – the board has a few bugs, that are corrected in the rev1 version. I have validated the heaters, and fan controls are operational. Working the kinks out of the motor driver wiring.

The TMC2660 branch status is: the rev0 board is fully routed and passes DRC checks. I have not made any prototypes of the board, because 2660 drivers are hard to find due to low stock levels at suppliers.

Software

The software for the board is a clone of Marlin at bugfix-2.0.x branch of my repository. I keep it relatively in sync with the Marlin branch. Note: there are other branches of Marlin as well only the bugfix-2.0.x supports the STM32 microcontroller.

Marlin is using Arduino IDE or Platform IO. I personally had issues with Platform IO not supporting the STM32F4 board, so I use Arduino version 1.8.5. To compile the firmware code, you would need to install the STM32 Arduino port.

Leave a comment if you have any questions.