Category Archives: Motor Controllers

20A ++ Motor Driver

I would like to make a small 3P Motor Controller for 20A and it’s plenty of SO8 size HEXFET’s that can do the job. The challenge is how to get the PCB to support this without going to large. I made this draft that I will try out.


This is a snap from the EDA showing the PCB at the end of a 28mm wide stick. The SO8 HEXFET’s go edge to edge so you can drill a hole to take the output between them. R1, R2 and R3 are current sensors. The picture below show a 3D of the components. I have not completed routing, but I should have plenty of space for the 12 signals (2 x 3 PWM. 3 x BEMF, 3xCurrent Sense) on the other side..


The idea is to mount a flat heatsink on top of the HEXFET’s and shunts.


One trick is that I on the back side aligne the holes with 2P and 3P screw connectors to give me the option to use those as well. I will need to give this driver a test to see if I actually can get 20A out of the PCB. I am aware that some of the small ESC’s claim to deliver far more than this, but dissecting a few I found that they claim more current than the datasheet on their HEXFET’s. And they also use inner layers only that is far less efficient than Outer layers. They do however provide a nice array of 12 HEXFET’s with a heatsink. All in all buying an ESC for 6.- USD claiming 30A you have to give guys who created this some credit.

Just for the record, 20A continuous equals much higher motor current’s, but I don’t like overselling. The HEXFET I am using have 170A peak. It will be january before I receive everything I need, but I will be fuzing HEXFET’s and PCB’s to find their limits.

The challenge with current sensors in this is that you need to scale for maximum meaning you get very little on small motors. This is actually also why I fancy making specialized Motor Controllers for small motors, but the STM32F303CB comes in 48 pin package with motor drivers and programmable op amps perfect for this job.


The drawing above shows a normal copper lane (illustrated), but if you look at the PCB layout you will notice that it makes it rather easy to add solder mass to deliver higher currents. This will also be tested to see what we can get out of this design.

DRV10983 Motor Driver

I tend to end up with ST on MCU and TI on motor drivers. This is accidental as I always look for what is out there at a reasonable price and availability. I started with DRV8313, but abandoned it because the PCB ended up to complex for a 1A controller. Looking for a simpler concept I found DRV10983. It has a simple digital/analogue interface to tick a motor. But, it also provides an I2C interface allowing access to the more complex parts of a motor controller.

I like this chip because it is small, deliver 2,5A on 8-28V and allow 2,5A to be easily routed on a PCB. Looking at its datasheet and digging into the I2C interface I must admit that this chip impress me. This is an abstract from the datasheet:

  • 3 Phase sinusoidal algorithm.
  • 8-28V input
  • 2.5A continuous, 3A peak.
  • Build in Hexfet’s
  • Separate 5V or 3.3V PSU (100mA)
  • Single current sensor possible
  • BEMF sensing build in
  • Analogue, Digital or I2C interface
  • Build in EEPROM
  • Current monitoring/protection
  • Temperature protection
  • Voltage monitoring/protection
  • Lock protection if motor stops
  • Speed control on analogue, PWM or I2C
  • Sleep/Standby support for low power
  • Start/Stop ramp-up/ramp down
  • Acceleration control
  • Brake function
  • Anti Voltage Surge (AVS) protection
  • Diagnostics
  • TSSOP24 package With heatpads
  • And much more …

The funny thing is that I wanted a simpler motor controller to get size down and was willing to sacrifice these things since they have limited effect on such small motors.

Micro Dual Stepper Driver


This board uses a LQFP48 because I needed more pins and it extended the size to 50 x 15 mm to get everything in. It contains 2 x Stepper Motor Drivers and 2 x end point connections. This can operate 2 x 5-wire or 4-wire stepper motors. I have not decided on MCU yet. I used STM32F103CB on the schematics, but I know that STM32F303Cx can be used and I will check if the same is the case for the M0 series in LQFP48 package. All of these MCU’s are an overkill for what we do here.

I target 28BYJ-48 or similar stepper motors that can operate on < 0.5A current. Having two steppers rather than one is because it often is required to operate two steppers in parallel. I use two ULN2003 drivers mounted back to back on each side, meaning I have 6 spare PWM signals and plenty of spare pins on the MCU. I only need to expand the PCB Space for Connectors to have a full 3-axis driver. This is just an early draft where I focused on size only, so will see where I go next.


 The beauty with the RS-X based micro modules is that you can just add on modules by connecting them to the network and locate them as an extension of cabling on the robot or in your house etc. We still need a more intelligent unit like a Raspberry PI in centre, but it expands our scalability to easily build more complex systems.

Miniature BLDC Motor Controller


The BLDC Motor Controller above is 40 mm x 12 mm and runs a 3-Phase motor with/without hall sensors up to 2A on 8-16V input. The communication interface is RS485.

  • STM32F030F4 or STM32F042F6 MCU
  • DRV10983 Motor Driver with HEXFET’s.

F030/F042 in TSSOP20 package is among the smallest MCU’s from ST. I literally used every pin on the chip. It is a M0 ticking at 48Mhz and comes with 16Kb/32Kb Flash and 4/6Kb SRAM.

 I actually did not pay this MCU much attention before I received a dev kit and realized that it’s 60% of the size of a LQFP48 package. I just had to try it out.

DRV10983 is a Motor Driver from Texas Instruments. This supports 8-28V, but my regulator is LM1117 supporting only 16V. I am using 3.3V only this time so swapped in MAX3485 as well. DRV10983 have a Bulk Converter supporting 100mA 3.3V, but I need to test if this is sufficient with transmissions on RS485. If it is I will drop the external regulator.

What impressed me with DRV10983 is that it has an easy to route package with GND, Power, U, V and W on double pins. It also have a two pin input driving a 3-phase sinusoidal scheme making it easy to use from any MCU.

  • 180 deg sinusoidal vector algorithm.
  • fault detection.
  • 3 phase motors up to 2A.
  • Analogue/Digital PIN interface.
  • I2C interface.
  • EEPROM to save motor parameters.
  • Bulk Converter with 100mA 3.3V available.
  • Current/BEMF sensors.
  • Over current protection.
  • Temperature protection.
  • Speed Control.
  • Direction Control.
  • Start/Brake Control.
  • Acceleration Control.

Bare over with me if I got some of this wrong, but DRV10983 is worth a look if your looking for an easy path to a miniature BLDC Motor Controller that cover 12-24V.

The STM32F030 or F042 is a bit small for my taste, but don’t worry I will be making a version with F303 and some breakout boards based on some of these drivers.

Note that Hall sensors on this is an optional position Counter only. Hall sensors are depending on a counting mechanism and I hope I can get the timers to do this. The input lines for Hall can also be Connected to a resolver. This part is however not Critical for running the motor.

Small BLDC Motor Controller

micro motor


It’s only 20 by 50 mm and my most painful PCB so far. It will run a BLDC motor with up to 2-3A in peaks, 1,5A in average. As mentioned before this was a draft. I am letting this rest a bit because I was not fully satisfied with the outcome.

What is special with this one is that it supports 3 current sensors, 3 Back EMF sensors, 3 Hall sensors etc. What I am not happy with is the 1,5A limit on the DRV8313. As I routed this I felt more and more that DRV8313 ended up as a bottleneck in the middle of the PCB and was not helping on the size either because my design add so much ouside the driver chip itself.

I am considering several options – one is to use SO8 size gate drivers and FET’s. This will require 6 SO8 chips, but I believe they will improve routing and the current I can get out of this solution. The small motor above will only require 0,5A, but it would be nice to have a CAN-X controlled ESC capable for larger motors. I believe we should be able to get 5-10A out.

A second option is to use DRV8301. This has the advantage that DRV8301 contain a separate Buck converter for the MCU with 1,5A available. I do however fear that this will be difficult without increasing the size of the controller.

Again – work in progress. I will be back on this and other motor controllers later.