This is a huge question, I plan to present the problem in detail and my current plan of action for solving it. I'm hoping to get pointers on what to and not to do.

I was involved with a recent publication about HIL characterization of miniature uav actuators consisting of commercially available RC parts. Many conclusions were formed, but in short the weakest link in our actuator systems for our uavs are the motor controllers. They are all different and rather unpredictable. Some are sent ppm signals others like the ones on our rotary wing craft use i2c communication.

The ideal is to design a superior power system with n channel mosfets only. The reason for this is a symmetrical phase control. However in order to do this it would require a slightly higher power source than the voltage being modulated to the motors.

To accomplish this I plan to use an external regulator for the MCU operating voltage and the higher mosfet driving voltage.

The next consideration is the mosfets them selves I plan to use multiple mosfets in parallel to reduce gate resistance and increase power capability.

I would like all the PCBs involved to be 2 layer PCBs to reduce production costs. To do this and maintain a size small enough for miniature UAVs I plan to place the AVR based MCU on one board with molex wire to board connectors and programming connectors as well as status LEDs and support components.

Then all the power mosfets and optical isolation devices on another 2 layer PCB that connect to the MCU PCB with molex board to board interlock connectors.

The last consideration is the MCU its self. I have no experience with programming embedded devices other than arduinos. I also have less than nine weeks to produce this product. Because of this I am considering using an atmega 328 and using the arduino boot loader and making all the pins compatible on the motor controller for initial ICP.

I like the xmega 16A but i do not want to rewrite the bootloader.

All this in mind there are considerations yet. I will need to store externally and dynamically characterized parameters on the MCU for onboard control algorithms.

Thank you for your thoughts.

P.S. i2c will be the communication protocol to the motor controller because it is robust, bi directional and can support multiple devices on a single buss.

  • \$\begingroup\$ 9 Weeks!!!! I hope you have a budget for rapid PCB turnaround prototyping, and someone who really knows high-power electronics design on tap. This is a big undertaking. \$\endgroup\$ Jun 6, 2011 at 5:58
  • \$\begingroup\$ I already have the power system designed, and tested. But there is still everything else. I have the MCU board with a 328 designed in eagle as well. Budget is not an issue fortunately. \$\endgroup\$
    – minimer
    Jun 6, 2011 at 6:09
  • 1
    \$\begingroup\$ It would be nice to be independent of a mosfet driver for a number of reasons. I have a working circuit that has an external centralized power source to drive the mosfets and they are coupled to the mcu with optical couplers. Lastly this device need to have reconfigurable power boards capable of 8 to 200 amps. I will need to use mofets in parallel.. \$\endgroup\$
    – minimer
    Jun 7, 2011 at 1:42
  • \$\begingroup\$ Related question: 24 V 200 Amp three phase ac motor controller. \$\endgroup\$
    – davidcary
    Jun 20, 2011 at 4:26

3 Answers 3


When using high-side N-channel MOSFETs, a MOSFET driver chip is generally used (e.g., an IR2130). These chips require a boost capacitor which allows the gates of the high-side MOSFETs to be driven with the required voltage. The downside of this is that the MOSFET driver has a restricted operating range (typically 10V-20V). The second down-side is that you can't drive the MOSFETS to 100% pulse-width; this is usually not a problem. Alternatively you could use P-channel high-side MOSFETs and N-channel for the low-side. With this configuration, you can PWM the low-side switches only and save some power. (You can do this with all N-channels as well, it's just trickier since you have to keep the boost capacitors charged). Go to Digikey and search for "mosfet driver", you'll want the 3-phase bridge drivers specified for external switches.

As for the MOSFETs themselves, I don't recommend you use them in parallel. This would increase your footprint as well as your gate charge. Instead, look for high-current mosfets on Digikey. My favorite packages for these are D-Pak, 8-PowerVDFN, and PowerPAK 1212-8.

Atmel has an app note for sensor-based and sensor-less motor control. Unfortunately AVRs don't have much processing power and your control algorithm will likely be restricted to fixed-point math because of this. Because of the processing power limitations, you may want to consider not using the Arduino environment and instead use straight C or assembly.

You may have some trouble isolating the I2C bus optically since it's a bi-directional bus. If you were to use a communication system with single direction lines, you may want to look at TI's line of isolator chips (e.g., the ISO7221).

  • \$\begingroup\$ Well... I think the control loop is all about band width if i were using something like a 16 million count optical encoder. Then yes there would be no way. \$\endgroup\$
    – minimer
    Jun 7, 2011 at 1:39
  • \$\begingroup\$ How ever back emf cannot provide more data than the micro controller can handle and if it does i can always go up to a 32 bit avr device. \$\endgroup\$
    – minimer
    Jun 7, 2011 at 1:43
  • \$\begingroup\$ Sorry, my links for the Atmel sensor-based and sensor-less control didn't show up. They're fixed now. Atmel also has an other app note which may help you out on brush-less DC motor control. \$\endgroup\$ Jun 7, 2011 at 9:24
  • \$\begingroup\$ The Arduino environment compiles all code with gcc, so another option is to use the Arduino environment and use straight C or inline assembly. \$\endgroup\$
    – davidcary
    Jun 12, 2011 at 12:03

Rather than design hardware and write software almost entirely from scratch, perhaps it may save some time to start with one of several open-hardware BLDC controllers and adapt it to your needs:

It sounds to me that the Open-BLDC already handles most of the stuff you mentioned -- BLDC control up to 200 A, etc. What else do you need to do that it doesn't already handle?

Even if none of these is exactly what you want, perhaps you can contact the people working in these groups and talk them into writing software for your system in return for you building hardware for their system or vice versa. Rather than one person to do hardware + software on one board, and another person to independently do hardware + software on another similar board, it often saves both people time for for one person to design two very similar BLDC hardware boards, and another person to write two very similar software packages for those boards.

Contrary to popular belief, it is possible to build an opto-isolated bidirectional bus. One approach uses a total of 4 optoisolators to isolate both signal wires of the I2C bus, arranged something like this for each signal:

      |   |    (+5V)-R2--+   gnd
      |   |              |   |
      +|<|+               \ /    -
        |                 ---     \(optoisolator chips)
       --- IC1             |  IC2 /
       / \               +|>|+   -
      |   |              |   |
    gnd   +--R1-(+5V)    |   |
 -|>|- == diode  Circuit by Jerry Steele _EDN_ 1996 Jun 6

Instead of high-side drivers, you can also consider low-side drivers and use pulse transformers (a.k.a. gate drive transformers) to bring the signals up to the high-side FETs. The same limitations with duty cycle apply (you must not exceed the volt-seconds rating of the transformer to prevent saturation) plus you must make sure the transformer is reset properly. The good thing with this approach is that you don't need a high-side power supply.


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.