How to easily design sinusoidal, sensorless control for 3-phase BLDC motors

Have you ever imagined that three-phase BLDC motor control solution development could be as easy as building an application circuit using analog ICs, adding a few discrete passive components and the task is done? Is there a solution that removes the burden of complicated motor control software development?

In order to answer these questions, let’s first take a deep dive and virtually build a system block diagram of sinusoidal, sensorless motor control using standard components available off the shelf. Sinusoidal, sensorless control requires a sophisticated 16- and/or 32-bit microcontroller (MCU) with a clock frequency in the range of ~25MHz-50MHz, integrated multi-channel 10-bit ADCs, PWM module with 16-bit counter, serial communication capability for supervisory control and a real-time debug support. MCUs and their embedded software perform very important functions for motor control systems. Based on motor voltage and current signals sensed through the ADCs, it solves the mathematical equations of a control algorithm and generates the required PWM control signal for spinning the motor. Of-course, the PWM signals generated from MCUs cannot be directly applied to drive the motor, as these are mostly 3.3-V/5-V level signals without much current-driving strength. These signals need amplification by a pre-gate driver before applying them to a three-phase H-bridge. While a three-phase H-bridge actually delivers the required voltage and current to motor, the pre-gate-driver section does two important tasks: (1) provides required peak currents to FETs gate to switch them on/off quickly in the range of 10 kHz-30 kHz and (2) level shifting the PWM signals for three high-side FETs. These are most important building blocks of BLDC motor control system (as shown in figure 1), but these blocks are not enough to build complete solution.

Figure 1 shows that there is also a need for auxiliary functional blocks to complete the solution. For example, to supply DC power to the MCU at either 3.3 or 5V from a high-voltage DC to generate 12V for gate drivers, a dc-dc converter is required. Similarly, DC bus voltage needs to be sensed to efficiently run control algorithms, protection functions and motor current. Voltage sensing is straight forward using resistive dividers, but current sensing adds external shunt resistors and differential amplifiers into the system.

    Figure 1.  Block diagram of 3-phase sinusoidal sensor-less control system

Now imagine converting Figure 1, into a real design using discrete, off-the-shelf devices. It would take a couple of pages of schematics and a few days to get schematics completed. Then, getting the layout done and building the PCBs will take weeks in addition to weeks for software development. Software development means building source code for a sensorless, field-oriented control algorithm and its associated mathematical blocks, Clarke/Park transformation, space-vector modulations (SVPWM), proportional + integral (PI) controllers and speed/position observers. So, as you can see developing motor control solution can be really complicated and challenging.

Until, you find TI’s DRV10983. This IC provides a complete system solution in single chip for sinusoidal, sensorless control for a three-phase BLDC motor. DRV10983 is capable of delivering continuous drive current up to 2A at 24Vdc.

All of the building blocks of a three-phase, FET-based, H-bridge motor control solution (shown in figure 1) including associated discrete components and motor control algorithms are integrated in the DRV10983. Figure 2 shows a schematic of 24-V/2-A, three-phase motor control using the DRV10983.

      Figure2.  DRV10983 circuit schematic for three-phase BLDC sinusoidal, sensor-less control system

Note that figure 2 is a schematic, not a block diagram any more - splendid, isn’t it?  By just adding a few discrete passives around the DRV10983, the total system solution is completed. Developing your PCB layout is much simpler and less costly than developing the legacy solution using a discrete MCU, gate drivers and FETs. Once layout is done, all you need to do it set motor circuit parameter via I2C interface using SDA/SCL inputs; provide speed command using potentiometer or PWM (not shown above) and start running the motor. Please refer to the DRV10983 datasheet for more details. In order to facilitate quick evaluation, EVM modules are also available with easy-to-use tuning GUI from

Thanks for reading, and your comments are welcome below.

For more information:


  • why not provide BOOST-DRV10983, like BOOST-DRV8711, and with  launchpad to control different motor drivers.

  • Ke fan,

    Thanks for your inputs;

    It seems you really like booster-pack platforms of our motor driver solution. Well, the booster pack platforms are built on pre-driver devices (such as DRV8711/8301) which need dedicated MCU for main motor control function whereas DRV10983 has in-build motion control engine and does not need external MCU, that’s why it may not be much advantageous to go with booster-pack approach. We have provided DRV10983 EVM which in stand-alone mode is as good as booster pack solution.

    Best Regards


  • Hi Milan, is there any way to somehow amplify the current out of the output of the DRV10983? Possible to add some external components to get 4, or 6A?

  • Aleksandar,

    It won't be possible to amplify the outputs of DRV10983 for bigger rating motors. It's not pre-driver device therefore for proper functioning of DRV10983, 3-phase H-bridge FETs are integrated.

    Best Regards

    Milan-Motor Application Team

  • Aleksandar, check out the DRV8308 for high current support.  It requires the motor to have Hall sensors though.

  • Hi, I did the circuit and components as the diagram shown. Can you please tell me how to set motor circuit parameter via I2C interface using SDA/SCL inputs?

    Do i need to do an USB type of interface? and If so, Do I need a software?

    Thanks in advance!

  • Hi Milan,  I made the circuit, but seems to be stack. just move a little and stop, and again and again.

    Do you have any comment to solve it?

    Thanks in advance!