I am one of the road testers for the Infineon DC Motor Shield w/ TLE94112EL for Arduino and this project is the first part of the road test blogging. This is the motorised evolution of the 3d printer filament roll holder and monitor for Arduino and it is also the second Arduino project I publish in this area.

I have made and used for months the filament roll support based on the mechanics illustrated in the mentioned project but some filament issues have not yet been solved by this tool.

When it is used by 3D printers filament - usually almost robust - is pulled by the extruder while the roll is placed nearby free to rotate. I have observed meaningful differences in the material behaviour depending on the usage level, based on 1Kg filament rolls. A new filament spool flows almost well but the force applied by the extruder should be relatively relevant. The extruder motor (a Nema17 stepper motor) is not damaged but the two gears of the extruder collect particles of the plastic material due the applied force; this requires extruder maintenance after a while to avoid clogging of the filament in the hot end. These particles tends to detach and mix with the clean filament while it is feeding the hot end nozzle increasing clogging problems and a general more frequent nozzle wear; this occurs more frequently with 0.3 mm diameter nozzles.

When the filament roll is half used and more its spirals become smaller and in some environmental conditions the filament tend to break too frequently.

Long print jobs become less reliable; for example I can't leave the printer working alone for an entire night without controlling it. Thus the idea to make a controlled filament feeder figured a precise series of issues to solve.


  • Make the automated engine almost simple and easy to reproduce
  • Reduce as much as possible the number of non-3D printable components to make it
  • Reduce as much as possible the stress applied to the extruder while printing
  • Use a low cost and easy to program micro controller board
  • Use the weight load sensor to keep under control che filament consumption and filament feeding
  • Manage the environmental noise interfering with the filament weight measures


Also using a single 3D printer we frequently manage more filament rolls (different colors) not all at the same level depending on the print job we are doing. Using an Arduino and the TLE94112EL shield motor controller may result the most reliable and cheaper solution: the board can control up to 6 different brushed motors with simple commands. This Infineon board has its own half bridge motor controller including three different frequencies PWM channels: 80, 100 and 200 Hz. In practice this means running motors sending commands from Arduino keeping the MCU free to other tasks while motors are running.



Choosing the design approach

Respect to the mechanical components the design approach should comply some essential requisites. The most important is the possibility to make corrections and upgrades to the mechanical prototype if testings does not reach the expected results. We should also consider the applied forces to every part: it is not a good practice designing the entire complex component (but possible) to avoid issues some frequent issues:


  • Different parts of the same structure requires different levels of robustness
  • Too long single-printing time
  • Difficulty positioning the 3D printed object requiring as less as possible support material
  • Difficulty refining the entire object
  • If something goes wrong in a part the entire object should be reprinted and a lot of material will be trashed with a single-object approach
  • Difficult adapting the same design to different versions of the model


Making the right choice in the 3D design means saving a lot of prototyping and production time, a considerable quantity of filament and creating an adaptable structure. To say this in one word: 3D parametric model

An adaptable design means also a model reusable building; the same structure can be reused with a different kind of motor, different bearings etc. Thanks to a modular design it was possible approaching a solution for this project after a first prototype with a different and not reliable motion transmission solution..


Introducing the TLE94112LE Arduino shield


One of the limits I have experienced with other motor control shields for Arduino (but not only) is that they uses the features of the same micro controller (i.e. PWM and other GPIO pins); this means that your board becomes dedicated to these tasks while only few other resources (MPU and GPIO) are available for other uses. To stay on the same topic of this project many 3D printer controllers based on Arduino clones experience this kind of limits. Having the possibility to put my hands on the TLE94122LE Arduino shield for road testing, the most evident advantage of the IC the board is based on is just its completeness. Arduino board communicates with the board via the SPI protocol using just only two pins (or three if you stack two different TLE94112 shields on the same Arduino). Every command you send to the shield is processed autonomously by the IC without consuming MPU resources. Another remarkable feature of the Infineon board is the possibility to control up to six brushed motors with three programmable PWM channels. This means that Arduino can setup one or more motors, start then continue working on other tasks. This shield revealed perfect to support up to six different filament rolls at the same time that is just one of the main goals of this project.

Considering the possibility to manage six different filament spools with a single Arduino + shield the micro controller cost impact of every single filament controller less than 5 Euro.


3D Printer Filament Dispenser.png

Functional design and components

As shown in the image above this project is not extremely complex to assemble starting from the kit; HX711 do his job very well (a well working Arduino library is available on GitHub) sending to Arduino the load cell readings. By the other side the TLE94112LE shield (with its own library too, thanks to the Infineon developers) manages all the motor part.



Arduino UNO R3.jpg XMC1100_Boot-Kit.jpg

This project has been developed in several steps making (and discarding) early prototypes using Arduino UNO R3 and Infineon XMC1100 Boot KitXMC1100 Boot Kit Arduino compatibile. By a hardware point of view there was no difference at all but I should say that the higher processor speed and more available memory of the XMC1100 made the difference in the general performances: the systems - that works perfectly with Arduino - show better responsiveness and performances when running on the Infineon board. One of the advantages using the XMC1100 board is the availability of more internal resources (memory and MCU speed).


Weight sensor

After doing some experiments in several directions I saw it was possible to control the entire system - monitoring and automatic feeding - with a single sensor; with some experience managing data in the right way a load cell able to dynamically measure the filament spool weight variations can provide all the information we need.

IMG_20170612_144450.jpg IMG_20170613_143006.jpg

I  used an inexpensive load cell in the range 0-5 Kg (less than 4 Euro) sold together with a small breakout board of the HX711 AD Amplifier, an IC adapt to manage the load cells sensors. There was not interfacing problems as the Arduino library is available on GitHub (HX711).


Motion hardware

Spool rotation is obtained by a couple of 2:1 demultiplied gears moved by a 280 rpm brushed motor. The motor is a McLennan instrument DC geared motor McLennan instrument DC geared motor 90:1 with a rated current of 50 mA and a max no-load current of 20 mA (see the attached datasheet). This brushed geared motor fits the specifications of the TLE94112LE DC motor controller shield.


Obviously also similar characteristics geared motors can be used as well.


Filament spool driver

The spool driver is the base where the filament spool rotates free. The weight sensor is the mid support of the two-layers base so the system is able to detect the weight variations in the various conditions.

IMG_20170701_140929.jpg IMG_20170613_143006.jpg

To avoid as much as possible the friction during rotation I have used four bearings while on the bottom part of the base the HX711 breakout board is fixed with a couple of screws.

Only six wires should be connected to the Arduino shield:


  • 5V and GND (from Arduino) power line for the HX711 IC
  • Two signal lines from the HX711 IC (to Arduino I/O pins 4 and 5)
  • Two power lines from the brushed motor connected to out 1 & 2 of the shield (TLE94112LE power lines)


Mechanics and motion design

Mechanic design needed two different prototypes. Before seeing in depth the steps I followed there is a short foreword we should say about 3D printing and mechanic design.

When we need 3D printing to build - no matter how complex - moving parts and in general mechanical elements we should always consider that there will be some forces, static of dynamics, that will be applied to the prototype while it is working. Knowing before what are the kind of forces applied to our 3D printed structure it is essential to decide important parameters:


  • 3D printing orientation: always reduce as much as possible the extra-material used to create supports while printing, large surfaces grant better adhesion so it is good to place them to the bottom on the printing bed
  • Layer thickness: a too thick layer (i.e. 4 mm) makes printing fast but we loose definition. I always use 2 mm layers that are a good compromise between final quality and printing speed
  • Solid fill density: excluding the first experiments I have done with my first 3D printer, it is very rare I fill objects more than 75% and I strongly suggest never to fill objects less than 15-20% to avoid very crap results.


But the first step that can dramatically change the quality and robustness of the resulting 3D printed piece is the CAD design. Designing single objects like cases, puppets, gadgets CAD choices is not influencing too much the final result but when we have many moving parts I consider a must designing compound objects for at least two reasons:


  1. Depending on the role of every part it is possible to decide separately the better fill density
  2. The compound object - just like in this case - can be easily modified and upgraded without impacting the entire structure and reducing the number of elements to reprint

3D Parts.jpg 3D Top.jpg

The two images above shows all the parts to be printed from the first prototype design. You can see the two green pulley used to manage the movement; the first idea was using a tooth belt for the transmission but when the prototype was built the solution revealed almost bad. The gallery below illustrated several rendering of the mechanics design before I started 3D printing the parts.


{gallery} Model rendering

Assembled 02.jpg

Asssembled 01.jpg

Exploeded 01.jpg

Exploeded 02.jpg


Exploeded 03.jpg

Exploeded 04.jpg

Exploded 07.jpg

Exploded 06.jpg

Exploded  05.jpg

Assembled 06.jpg

Assembled 04.jpg

Final 01.jpg

Final 02.jpg


After 3D printing then assembling the first prototype the tooth belt transmission was not working well. The tension of the belt required a more robust support than the structure I designed. The rest of the parts instead was working perfectly. As the complete structure was built with different parts it was sufficient to replace the two tooth pulleys with a couple of gears; I had to reprint only these two replacements and the issue was solved.

The video below shows the final solution and the making of refining and assembling the first prototype


In the second part we see the commands and software logic: 3D Printer Filament Automatic Dispenser for Arduino - #2 Connection and Software