Three popular, cheap motordriver boards that are available on chinese webstores are the MX1508, L9110S and TB6612.
This board can drive two motors independently. It is an H-bridge configuration for each motor and so can drive the motors in either direction. It is rated at 1.5A on each motor with a peak of 2.5A.
The module itself is not really breadboard friendly. The pin spacing is 0.1″ but the various connectors are at aberrant spacing.
The MX1508 from Shenzhen Guanghui Electronics Co., Ltd. has a working voltage of 1.8-5Volt, but can drive motors with an operating voltage of 2-9.6 Volt. The module however, has only 1 Voltage input, that supposedly can take 2-10 Volt. The digital part of the MX1508 however is fed through a 220 ohm resistor with the resulting voltage being capped by what I presume to be a zenerdiode of 5 Volt. With most hobby motors being either 6 or 12 Volt, 10 Volt may not be the most practical voltage.
When analyzing the PCB, one odd thing becomes clear: Pin 4 (VDD1), the input for the operating voltage of Motor A, seems to be not connected to anything. Yet the module works. Connecting it (to pin 8) seems the right way to go though. It is very well possible that it is an unintentional mistake in the PCB.
The MX1508 has no fly back/free-wheeling diodes present, though they are advised by the chip manufacturer. As a result, there might be big spikes on the powerline when you are reversing the direction, which could lead to problems with other devices connected. Connect the motor like in the figure to the right. Controlling a DC motor with an H-bridge such as the MX1508 is in fact quite simple. Yet there is a library available.
The only (currently) available datasheet is in chinese. It advises to put a 100nF over each motor output, something that is not done on the module PCB. The MX1508 is also sold (e.g. by LCSC) under the alias TC1508.
There is also an MX1208 with a current of 1.3A (2A peak). These are only available as a bare chip, not as a module.
Although the chinese webstores market the MX1508 as a replacement for the L298N motordriver, that is with its 46 Volts and 4 amp total, quite a strech.
So, if 10 Volt motorvoltage is not enough, there is the L9119S from Asic. The available module has in fact two L9110 chips, as they each control only one motor. The module can control 2 motors that according to the datasheet can be 2.5-12V with a maximal continuous current of 800mA , with a peak of 1.5~2 Amp.
The labeling on the input pins can be a bit confusing, but it is like this:
- B-IA: Motor B Input A
- B-IB: Motor B Input B
- GND: ground
- VCC: 2.5V-12V DC
- A-IA: Motor A Input A
- A-IB: Motor B Input B
The L9110 chips each have 2Vcc and Ground pins, but there is no indication that these should get different voltages (like one for the chip and one for the motor) and on the module PCB all grounds are connected and all Vcc’s are connected. There is however a small point of concern in using the module with a non-TTL level like 12 Volt: The inputs are pulled up via 10k resistors to the Vcc. That means that if you use 12 Volt DC for the motor and a 3v3 microprocessor to control the motor, on a LOW level there will be possibly flowing 1.2 mA into the uC pin. That does not need to be a major problem, but it is something that needs to be taken into account. If it is a problem, a simple optocoupler circuit can be put in between. An ILQ615 or TLP281-4 (available as pre-built module) is very suitable for this. If you want to make it yourself, 4 of the below circuit should do:
The optocoupler is left open collector as the input pins of the L9110 module already do have pullups. Other than an optocoupler a transistor or Fet can be used as well.
This circuit does invert, but that can easily be fixed in software. The TLP281 module referenced above has added transistors the un-invert the signal.
Though motors are easy to control with an H-bridge such as this one, there are several libraries for the L9110S.
The datasheet is very minimal. There is one table that is worth a closer look:
according to this table a voltage of 2.5Volt on its input pins is considered a HIGH. that means that both 5Volt Arduino’s as well as 3V3 ESP’s or Raspberry Pi’s can be used. However, this is at 9Volt Vcc. The datasheet gives no info at all about this level if fed with 12 Volt. If an optocoupler is used as described above, this should not be a point of concern.
The TB6612 from Toshiba is another relatively cheap board available at chinese webstores. It can drive 2 DC motors (or one stepper) with 1.2A per channel (3A peak). It runs at 2.7V-5V logic (2.7-5.5V according to some sources). The motor voltage is separate from the 2.7-5.5 Volt logic voltage. Good for motor voltages from 4.5V up to 13.5V. The H-bridge is built with FETs and it comes with built in kick-back diodes.
The control of the TB6612 is a bit akin to the L293. Where usually the speed of a motor in an H-bridge is controlled by a PWM signal on one of the 2 control pins, the TB6612 has a seperate PWM pin, next to the 2 control pins. It can be pulled up if not used. So you set the direction with 2 pins and the speed with a 3rd pin. Of course it is still possible to use the H bridge control pins with PWM. It also has a standby pin to rapidly disable both motors. Connect to ground to disable, pull-up for normal operation. On the ‘Chinese’ boards, it is usually left floating. The adafruit module has it pulled up to 5V via a 10k resistor.
Though DC motors are easy to control with an H-bridge such as this one, there is a library for the TB6612.
The L293D for a long time has been a workhorse among the motordrivers. The module displayed here is available cheaply and works well (but read on).
Contrary to some other L293D boards it comes with a 78M05 (the DPAK chip on the board) stabilizer that takes the motor voltage and brings that back to 5Volt to feed the L293 chip. The Vcc pins on the module are therefore outputting 5Volt with 0.5A max current, you don’t have to provide 5Volt to this board.
The 5 pins at the bottom do not have a silkscreen label, but their function is clarified in the picture. The Vcc is connected to pin16 (Vcc1). That pin is the 5V supply for the chip (and you can feed your micro controller from it.
The ‘Vin’ on the screw connector is attached to pin8 (Vcc2) which is for the 4.5-36V motor voltage. On this particular module the Enable pins are pulled HIGH with jumpers. These Enable pins can also be used for PWM, but with the Enable pin HIGH, PWM can also be fed to the IN pins.
This particular module does not seem to follow the cooling PCB recommendations made in the datasheet, so an additional heat sink may be necessary.
A problem rose when I wanted to use the module with 12 Volt, which should be well within its specs. A pair of 0.6 amp motors did well on a smooth surface but on a more demanding surface (grass), the motors seemed to shut down, which I attribute to thermal shut down of the L293. This also happened when I fed the same motors with 6 Volt.
I have no experience with the somewhat simpler modules such as these that come without a 7805:
Though the first 3 modules are clearly no competition for the L298, how do they compare to the L293?
|Current||1.5A||800mA||1.2A||1A (0.6 for 293D)|
|PeakCurrent||2.5A||1.5-2A||3A||2A (1.2 for 293D)|
Given the fact that all these modules are fairly small and come without heatsink, it is my opinion they are only suitable for toy style motors that operate well within the specs of the chip. For any more serious work at least a heatsink should be added.
Other popular motordriver boards -especially in 3D printers- are the A4988 and DRV8825. You will find a very good discussion of those two in this comparison. The various TMC2xxx drivers (such as the TMC2200 or TMC2208) are generally seen as more silent (and more expensive) replacements for those.
For anyone interested in using the more powerful TB6600 or TB6560 modules or the TB67S109AFTG chip for say a NEMA23 or NEMA24 motor, you will find an excellent article here. If you consider those drivers, consider the the digital DM556 or DM542 drivers as well.