Extruder thermal control board

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.

~V

The TMC2660 board was a bust

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.

Bummer 🙁

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.

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:

 

Enclosure for the PRNTR board in OnShape

I finally got annoyed enough by the mess of cables and decided to finish an enclosure for the PRNTR board. I finished designing the bottom half.

This is what it looks like in the OnShape assembly:

View from another angle:

Closeup of the final assembly – the outer fan duct:

A look over the whole board:

And finally this is what it looks like, when powered up:

All 3D component designs are available in OhShape here.

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:

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:

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.