I have been building a driver circuit for a RS2205 BLDC motor and have gotten decent results so far using back EMF feedback for commutation control.

The motor is driven by a PWM wave from a Arduino Uno MCU with a frequency of 4kHz and 60% duty cycle.

The successful tests have been made using a 5 volt power supply in order to protect the components as much as possible since the process pretty much has been a trial and error approach and I have pretty limited experience in electronics design. During these tests, the "high-side" MOSFETs have reached a pretty high temperature (too hot to touch) but other then that it seemed to be working fine.

The real problems appeared when I tried using a 12 volt power supply (the motor is rated for 3-4s LiPo batteries) where the motor started to emit white smoke after a few seconds on low velocities even when no feedback control was enabled. Any ideas of why this might happen and is it normal for the MOSFET transistors to get such a high temperature during operation with only a 5 volt power supply?

Driver schematic: enter image description here

  • \$\begingroup\$ What shoot-through control do you have? what deadtime have you incorporated, what minimum pulsewidth do you have. What is your commutation logic \$\endgroup\$
    – user16222
    Dec 25, 2017 at 0:17
  • \$\begingroup\$ Have you thought about inserting dead time between switching the mosfets? \$\endgroup\$
    – Dumbo
    Dec 25, 2017 at 0:45
  • 1
    \$\begingroup\$ Naively enough I do not have any shoot-through control implemented in hardware but as shown in the schematic I've added pulldown resistors on the TC427CPA inputs to protect dangling signals from the MCU. The PWM pulsewidth have been set through a trial an error process and doesn't utilize any specific minimum pulse width. The commutation is at startup just controlled with a timer but is then switched to integrating the back-EMF with respect to time using the zero-cross point as reference. Once the integration has reached a configuration specific threshold, commutation to the next phase is made \$\endgroup\$
    – Martin
    Dec 25, 2017 at 0:53
  • 1
    \$\begingroup\$ With regards to deadtime, is it a way to account for the gate fall time for the MOSFETs? At high duty cycles I think that would certainly be a good idea. \$\endgroup\$
    – Martin
    Dec 25, 2017 at 0:56
  • \$\begingroup\$ "integrating the back-EMF with respect to time using the zero-cross point as reference." - what does this mean, and how do you know where the zero-cross point is? \$\endgroup\$ Dec 25, 2017 at 6:39

1 Answer 1


The issue is the drive stage & using all Ntypes

You are using TC427CPA as your drive chip who's supply rail is the same as your DClink.

To turn on the upper MOSFET's the gate voltage must be a minimum of Vth about the source. To fully turn on the MOSFET (lowest impedance) the the gate voltage must be a lot higher than the source (refer to the devices datasheet)

Without getting into instantaneous specifics... Imagine you are wanting to turn on any of your upper N-type. The source potential would ideally be equal to your Vcc... however that is the voltage you are supplying the gate with, thus the source can only be Vcc-Vth lower for any sort of conduction. THUS the upper MOSFET's cannot be in saturation but in some linear, high resistive state and thus will get hotter when power is drawn via them.

The simplest solution since you are working with v.low voltage is to replace all the upper devices with P-Types & change your code to deal with the needed inversion

  • \$\begingroup\$ Actually, an even easier fix (rather than code change)(for some values of easy) is to switch to TC428s, which have one inverting and one non-inverting driver per package. \$\endgroup\$ Dec 25, 2017 at 0:56
  • \$\begingroup\$ Thanks, this makes a lot of sense. Using a P-type MOSFET for the high side seems like the better choice for this project. Could the usage of N-type MOSFETs be the reason for the motors overheating aswell? \$\endgroup\$
    – Martin
    Dec 25, 2017 at 1:05
  • \$\begingroup\$ @martin without knowing your code... I suspect the motor overheating is due to poor current regulation (or no current control). You may have commutation code but if the FETs are not driven correctly it may not actually do as you expect. In short itwill be overheating due to a bug or oversight in your code \$\endgroup\$
    – user16222
    Dec 25, 2017 at 8:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.