Adding Position Control To An Open Source Brushless Motor Driver

Brushless motors are everywhere now. From RC planes to CNC machines, if you need a lot of power to spin something really fast, you’re probably going to use a brushless motor. A brushless motor requires a motor controller, and for most of us, this means cheap Electronic Speed Controllers (ESC) from a warehouse in China. [Ben] had a better idea: build his own ESC. He’s been working on this project for a while, and he’s polishing the design to implement a very cool feature – position control.

We’ve seen [Ben]’s work on his custom, homebrew ESC before. It is, by any measure, a work of art. It’s capable of driving brushless and brushed motors with a powerful STM32F4 microcontroller running ChibiOS that’s able to communicate with other microcontrollers through I2C, UART, and CAN bus. If you want to build anything with a motor – from a CNC machine to an RC helicopter to an electric long board – this is the motor controller for you.

[Ben]’s latest update considers position encoders. Knowing how fast a motor is turning is very important to knowing how fast a wheel is turning, how much torque the motor is generating, and an awesome step in building the finest motor controller ever made.

Like the last update, [Ben] demonstrates the great control program written for this ESC. This GUI programs the microcontroller on the controller, with protection from high and low voltages and currents, high RPMs, duty cycle changes, and support for regenerative braking.

Thanks [Dudelbert] for sending this one in.

Continue reading “Adding Position Control To An Open Source Brushless Motor Driver”

BLDC Controller With The Teensy 3.1

[Will] is on the electric vehicle team at Duke, and this year they’re trying to finally beat a high school team. This year they’re going all out with a monocoque carbon fiber body, and since [Will] is on the electronics team, he’s trying his best by building a new brushless DC motor controller.

Last year, a rule change required the Duke team to build a custom controller, and this time around they’re refining their earlier controller by making it smaller and putting a more beginner-friendly microcontroller on board. Last years used an STM32, but this time around they’re using a Teensy 3.1. The driver itself is a TI DRV8301, a somewhat magical 3 phase 2A gate driver.

The most efficient strategy of driving a motor is to pulse the throttle a little bit and coast the rest of the time. It’s the strategy most of the other teams in the competition use, but this driver is over-engineered by a large margin. [Will] put up a video of the motor controller in action, you can check that out below.

Continue reading “BLDC Controller With The Teensy 3.1”

Brushless Motor Controller Shield for Arduino

Brushless motors are ubiquitous in RC applications and robotics, but are usually driven with low-cost motor controllers that have to be controlled with RC-style PWM signals and don’t allow for much customization. While there are a couple of open-source brushless drivers already available, [neuromancer2701] created his own brushless motor controller on an Arduino shield.

[neuromancer2701]’s shield is a sensorless design, which means it uses the back-EMF of the motor for feedback rather than hall effect sensors mounted on the motor. It may seem strange to leave those sensors unused but this allows for less expensive sensorless motors to work with the system. It also uses discrete FETs instead of integrated driver ICs, similar to other designs we have covered. Although he is still working on the back-EMF sensing in his firmware, the shield successfully drives a motor in open-loop mode.

The motor controller is commanded over the Arduino’s serial interface, and will support a serial interface to ROS (Robot Operating System) in the future. This shield could be a good alternative to hobby RC controllers for robots that need a customizable open-source motor controller. The PCB design and source code are available on GitHub.

Continue reading “Brushless Motor Controller Shield for Arduino”

A 3D Printed Brushless Motor

brushlessBuilding electronics with 3D printers is something we see hitting the tip line from time to time, but usually these are printed circuits, not electromechanical parts like motors, solenoids, and relays. [pitrack] thought he could do better than printing out a few blinking LED circuits and designed and built a brushless motor, the same kind you would find on electric model planes and quadcopters.

In every brushless DC motor, there are a few common parts: the rotor has a few powerful magnets embedded in it, a stators with coils of wire, and the an enclosure to keep everything together. [pitrack] printed all these parts off on his Makerbot, winding each of the three coils with about 400 turns of 26 AWG magnet wire. Also embedded in the stator are a trio of hall effect sensors to make the control via an Arduino and an L6234 motor driver easy.

For his next trick, [pitrack] is going to test the efficiency of the motor and attempt to optimize it. In the long term, it should be possible to parameterize the design of one of these printed motors, effectively allowing anyone to type in the torque and Kv rating of a desired motor, plug that into an equation, and have a motor design come out the other end.
Continue reading “A 3D Printed Brushless Motor”

Fail of the Week: Flaming Brushless Motor Controller


Yep, smoke and flames are usually a sign that your electronics aren’t functioning as expected. This is actually the second failure encountered while learning about brushless motor controllers.

[Michael Kohn] purchase the motor while working on a different project and it went unused for quite some time. When he came across it again he decided he should learn the not-so-dark art of BLDC control.

The first hurdle was to figure out how to drive the three-wire motor when he had been expecting only two. The answer required him to come up with switching mechanism that allows three states for each wire: positive, negative, and not connected. His solution was to use MOSFETs. It’s a good idea, but unfortunately during the first iteration they were under-spec’d and he scared the crap out of himself when one of them blew up during testing (clip #1 below). After sourcing a more robust set of MOSFETs [Micheal] went back to testing which is when this little fire broke out. The 22 gauge wires connecting the Lithium battery to the driver just couldn’t cut it. See for yourself in the second clip.

It’s been awhile since we’ve said it: Please remember the Fail of the Week is not about ridiculing the hacker who was gracious enough to document his or her failure. It’s about learning from the mistake and discussing alternatives that can help others in the future. For instance, in this case some advice in determining MOSFET specs and wire gauge for any type of motor would be quite helpful. Have at it in the comments.

Continue reading “Fail of the Week: Flaming Brushless Motor Controller”

Build a Sensorless Brushless DC Motor Controller

[Davide Gironi] shows us how to implement a sensorless brushless DC motor controller (sensorless BLDC) using an ATmega8 microcontroller. In order to control a BLDC motor you need to know its rotational sequence position and speed so you can calculate and apply the correct current phase sequence to the motor windings at just the right time.

Simply said, sensorless BLDC means you’re not using a purpose built sensor to determine the motor’s position and speed, however, you are sensing the motor’s sequence position using the back EMF signal coming from one of motor’s coils that is not currently receiving power. When this back EMF signal crosses zero voltage a microcontroller can calculate the rotational speed and when to switch to the next power sequence. This technique is not good for position control motors but is great for continuous motors like computer fans and drives were the slightly reduced wiring costs make this type of BLDC control favored.

If you want to build a BLDC controller we recommend starting with [Davide’s] last project on sensor controlled BLDC motors. You can also checkout these interactive demonstrations for more understanding on the different BLDC configurations.

Follow along after the break to watch the video demonstration of [Davide’s] sensorless BLDC controller controlling a motor from CD-ROM drive.

Continue reading “Build a Sensorless Brushless DC Motor Controller”