How to drive brushless motor with Arduino?

Actually sometimes you just MUST make your own ESC. ESCs sold on the maket are "commercilized" and have their own control codes for RC stuff like airplanes, helis, cars...

For example sometimes you need to have a double side regenerative brake. From back to stop and from forward to stop. There is NO RC ESC that has that feature. They either have only one regenerative brake from forward to stop or none. Or you may need a sensor control BLDC but there are only a few sensored ESCs in the market, and they only have (the same for common sensorless ESCs) built in features that you do not need and don't have some that you absolutely need!

Designing your own ESC is a perfect choice and much cheaper even than the cheapest $10 one with HUGE power.

It is true that the control code and the hardware can be a pain but after some reading it is just a toy.

There's a good tutorial here on how to make a BLDC controller with an arduino using 6 mosfets and some other stuff you can easily find at Jameco's site (very nice) This is where I buy my stuff for cheap but spurkfun can be a nice alternative if you don't find some sensors like gyros, etc.

http://www.instructables.com/id/BLDC-Motor-Control-with-Arduino-salvaged-HD-motor/

very nice and easy to follow guide. You can make ANY power from low to ultra high ESCs using this guide and almost any combination of regen brake, using resistance, motor windings or battery charger...

Using mosfets is just a toy, you can do almost anything.

The prob is that you can't control this mosfet very efficiently with an MCU like an arduio board which outputs only 5V I think and the gate voltage of the mosfet for medium voltages is pretty much higher in the range of 16-30V easily. So you must use some other tansisor to step up arduino's voltage.

Good luck.


You should definitely use the ESC. Brushless motors works best when driven with a sine wave (or as close as possible to a sine wave). They also require a fairly accurate and complicated set of signals. Generating the proper wave forms and timing from an arduino would be difficult, and unless you really need to it, is probably not worth it. You can always arrange to control the ESC from your arduino, which would give you programmatic control plus the efficiency and power of the ESC.


I have gone back and forth on this for like 30 minutes. I think you probably want to use an ESC unless you are just doing it as a learning experience. To properly control the motor would tie up more resources from your arduino than I could imagine justifying. Plus you would be limiting the responsiveness of the motor to that of the adc polling. I wouldn't think of using an ESC as reverting, that is the way it is supposed to be done.