Electronic – Controlling small brushless dc motors

brushless-dc-motormotor controller

I'm designing an ESC with a small microcontroller running at 3.3V. The BLDC motors I have chosen are extremely small, and run best at 3.7V. I have the power supply for both of these (3.7V is VBATT, 3.3V is obtained using a buck converter). They are 3 phase, and the controller needs to be sensorless. I would like to measure RPM and current usage as well if it doesn't mean I will have an overly complicated design.

All the docs I have found are great for higher voltages, and ridiculous currents (I will max out at ~5Amps at 3.7V, I don't necessarily need to design a 100V, 300A ESC).

Questions I have:
Is there a reference design I can follow somewhere around the net?
What kind of protection circuitry should I use?
How simple can I go?
Are there any ICs that will simplify the circuit even further?
Any other recommendations/tips/pointers?

Thanks for your time,

Best Answer

The simplest method for sensorless commutation of a motor is to measure the Back-EMF to determine speed and use trapezoidal six-step commutation method to drive the motor. A circuit similar to this one is a good place to start:

Back-EMF detection circuit

The section marked 22 is just a voltage divider to scale the phase voltages down into the range of the microcontroller's ADC. In this design they also seem to be sending the Back-EMF signal to comparators, marked 102, for zero crossing detection. If your Back-EMF signal is a nice clean trapezoid, the comparator method would certainly simplify the software design. But if the Back-EMF signal is noisy, there are many different filters and algorithms you can implement in software to process the signal and find the zero crossing that way.

Trapezoidal six-step commutation is the same as would be used if you were using Hall-Effect sensors to measure the speed instead of sensorless. You drive two phases with the third phase off. While the third phase is off, your software is looking at that leg to see when it's voltage crosses "zero", which is really 1/2 of the motor drive voltage (in your case VBATT). The zero crossing happens 30 electrical degrees before the next commutation (the next step in the phase drive sequence) needs to occur.

Trapezoidal commutation

Sensing the total current used by the motor is relatively simple using the design above. Just measure the voltage drop across the resistor to ground at the bottom of the bridge. Measuring the current in each phase would require adding a series resistor or a current transformer. Use of a current transformer on two of the three legs (you could then calculate the third) is also how you would go about implementing more complex control methods such as Field Oriented Control which I won't go into here since you asked for simple.

I'm more familiar with the high power motor designs you were speaking of. In the high power case, there are specialized IGBT gate drivers with all sorts of protection built into them. I did a very quick search and couldn't find anything like that that operates at the voltages you're specifying. But the two main types of protection I would look to incorporate is transistor desaturation and over current. I usually run the gate drive signals and the over current detection signal through a CPLD or FPGA. When over current is detected, all the gate drive signals are set low in the CPLD or FPGA in order to open the drive as quickly as possible. The microcontroller usually isn't fast enough to do this and prevent damage.

The app notes that @suha linked go into much more detail on the subject of simple motor control. This paper gives a good comparison of some different control methodologies and why you may want to choose them over trapezoidal six-step.