|Product Performed to Expectations:||9|
|Specifications were sufficient to design with:||10|
|Demo Software was of good quality:||9|
|Demo was easy to use:||9|
|Support materials were available:||10|
|The price to performance ratio was good:||9|
|TotalScore:||56 / 60|
The board arrived in a flat box with bubble wraps, together with Infineon's XMC1100 Boot kit board. Although that is an excellent board, I tested the TLE94112EL Shield with an Arduino UNO because I expect that to be the case for most of the users.
The information and the code about the board has been a bit scattered around, it took a little bir of searching and link following to gather it all. Here is everything you will need to use it:
The schematics and pinout are available in the user manual.
Arduino library with examples: https://github.com/Infineon/DC-Motor-Control-TLE94112EL
Getting started with the board is pretty easy. If you have a board in standard Arduino form factor, you can just insert the shield. Like many good shields, all the relevant pins are labeled so, so we can easily scope them as we need, or check if there is a collision between this and any other shields we want to use.
One small caution: Arduino boards have the onboard LED attached to pin 13. Since this is also SPI clock pin, we cannot use the LED for any indication when the shield is attached.
If you want to use the XMC1100 board with the shield, you will have to solder female headers to it.
The shield comes with two chip select inputs, which we have to set with solder jumpers. If you want to stack two of them, or use pin 9 instead 10 as the chip select for some other reason, you need to remove a 0 ohm resistor and put one at the next slot. That way, we can attach two [shield]s on one arduino and use them independently on the same bus. Actually, the software already has two separate tle94112 objects to setup and control them with ease.
To get the library, you can simply clone the repository from github into your Arduino library folder. On a Linux system, that will typically be in ~/Arduino/libraries for the user, or the libraries folder in your Arduino installation for all users.
When the code is in the correct folder, Arduino IDE automatically recognizes it and can include the library or open the examples.
The examples are easy to follow and rather straightforward, a good place to start using the board. All the physical tests below are based on slightly modified example code.
There were two issues with the code that I had to edit. First, the library did not compile due to symbols TRUE and FALSE not being defined, but that was fixed a few days later, so this is not going to be a problem anymore. The other problem was, that the code is written for the XMC1100 board, which has a couple of onboard LEDs, where Arduino boards do not have them. So I deleted the 3 lines corresponding to them. Everything else worked fine without issues.
To use the tle94112, you need to learn a little bit of its logical structure. It has 3 independent PWM generators, and 12 independent half bridges. This give quite a bit of flexibility but comes with some limitations.
Each half bridge can be independently set to one of high, low, floating, or one of the PWM generators. So if we are doing some on/off switching, we can omit the PWM generators altogether.
Each PWM generator can be independently set to 80, 100, or 200 Hz, and can have an 8-bit duty cycle (256 discrete values). This gives us roughly 0.4% resolution. I would have loved 20+Khz PWM control, but that requires some more complex and expensive power electronics, so it is perfectly understandable why it's not an option. For most use cases, especially with motors of less than 1A, these are good options.
So it can control 6 motors independently (or more, with cascading) but what it cannot do is control more than 3 full bridges at different duty cycles. Is this a big limitation? Depends on what you want to do with it. If you want to drive steppers, no issue at all.
The signals are pretty clean when there is no motor attached, as you can see in the shot below.
They get slightly messy with motors, but not too bad, considering these noname generic DC motors from China.
And here is The board with an Arduino UNO, driving 5 separate H-bridges.
When I forcefully stalled two motors and forced 2A current through the chip, it rapidly started getting warm. I did not stall enough to trigger thermal shutdown, but I believe that's what would happen. It is nice to see it can sustain high current for a couple of seconds.
The TLE94112EL is one of the rather interesting pieces of hardware I have got my hands on. Driving 6 DC motors, or 3 stepper motors with only 4 pins is definitely cool. Add one more pin and you can add another shield. In practice, however, I am struggling to find a use case. It is definitely a great tinkering and learning tool. Also it is probably the most compact solution in the market if you want to drive so many motors.
It can also be a very convenient LED driver, as it can control 12 channels, or 4 separate RGB strips (or 3 RGBW strips). However, the only 3 independent PWM setting limitation will have an impact. This can be worked around with some clever hacks (like using 3 PWM channels are 3 intermediate levels, and limit the use case to 4 different brightness levels only.)
For someone just getting started with robotics, I would recommend using PWM controlled servos and one of those PCA9685 or similar PWM generators. For someone who wants to leave those servos behind and learn more advanced electromechanics, this shield seems like a great option.
As a robot developer by profession, I would still prefer something with 6 individual PWM inputs and direction/enable inputs, but that setup would be more expensive and definitely not compact as a TLE94112EL chip. If you can live with the 3 independent generator limitation, this is an excellent device.