• Post author:
  • Post last modified:April 27, 2023
  • Reading time:8 mins read
  • Post category:Uncategorized

Prepared by Ben Steinbach and Alex Riebe


This project focuses on designing a Broadly Reconfigurable and Expandable Automation Device (BREAD) to function as a Field Oriented Control (FOC) BLDC motor controller. BREAD is an open-source project that centers around component ‘slices’ and how they interact with the main ‘loaf’. The loaf can be thought of as the backbone that connects the different slices to each other and offers system commands. Each slice can perform its own specific operation (i.e. motor controller slice, power distribution, etc.)  with the idea that this allows for a quick implementation of a coherent system. 

The slice developed in this project controls a BLDC motor. A BLDC motor is a permanent magnet synchronous AC motor with salient poles. To control the speed and torque of the motor, the AC frequency going into the motor is varied. This is often done using a Variable Frequency Drive (VFD). A VFD has the advantage of being very simple but has no feedback, so it is very susceptible to disturbances to the system. A more complex but robust system is FOC which uses a cascaded control structure and coordinate transformations to control the BLDC motor and was used in this project.

The proposed device will be capable of controlling the torque output of a BLDC motor and will allow the user to adjust the torque (and therefore speed) of the motor.

The entire device will have design files originating entirely from free and open-source software.
This functional requirement was met. The three softwares used were KiCAD, FreeCAD, and Aurdino, which are all free and open source. All resources used were found on free-to-use sites.

The BREAD slice will cost less than $100.
This functional requirement was met. At the end of the semester $40.68 remained of the $100.00 budget. It should be noted that while the unit price of the final product would remain under $100.00, should there have been more time in the semester design costs (second PCB iteration, etc.) would have likely exceeded it.

The device is compatible with BREAD.
This functional requirement was met. The board template is that of a BREAD slice, and proper components (such as the Arduino) were used to ensure compatibility.

The device’s inverter is built with commonly available methods and parts.
This functional requirement was met. All parts used to build the inverter are inexpensive and readily available. More information can be found in the BOM section below. The inverter was based on information found in the References section below. The inverter schematic is the same as that in Figure 1.

Figure 1: Inverter Schematic

The device’s control scheme is designed with commonly available methods and software.
This functional requirement was met. The control of the motor was done through an open-source Arduino library called OpenFOC. A full test and debugging of the system is still needed to be done and will be done after the system is fully integrated.

The device spins a BLDC motor.
At the time this report was written, this functional requirement was in progress. This goal will be met after the final debugging and test of the inverter and control scheme.

The user is able to adjust motor speed and torque.
At the time this report was written, this functional requirement was in progress. This goal will be met after the final debug and test of the inverter and control scheme.

Motor Shaft Position is controlled.
At the time this report was written, this value-added goal was not met. This goal may be reached this semester, depending on the ease of implementation using the SimpleFOC library. At the time it has been shelved until the speed and torque control has been finalized.

Field Weakening is utilized to increase motor efficiency.
At the time this report was written, this value-added goal was not met. Similar to the above value-added goal, this may be easily implemented using the SimpleFOC library, however, it will be examined in more detail after the main functionality of the controller has been proven to work.

The control scheme is made modifiable to be used with any permanent magnet motor.
At the time this report was written, this value-added goal was not met.

Design a method to linearize the torque output.
At the time this report was written, this value-added goal was not met. This goal is definitely possible to complete but will most likely not be completed this semester due to time constraints.


In the future, if another group is interested in picking up this project, we would recommend starting with testing on a higher-power motor with a real encoder. A limitation placed on this project was to keep it low power due to its experimental nature. Low-power BLDCs do not exist in practice because it is simpler and more cost-effective to use a DC motor (the main advantage of an AC motor is that it can be higher power). Therefore, low-power BLDCs only really exist as specialty motors where for some reason there is an extreme size restraint like the hard drive motor we used. This made it hard to find encoders for the motor and the general specifications needed to create an effective controller (we ended up making our encoder, which does not have the accuracy of a commercial grade one). Hopefully, this project work is enough to green light higher power testing which allows for a better-informed controller to be created. We would also recommend the creation of a variable power distribution slice that works off a wall outlet as a quality-of-life improvement. Some more picking-up points would center around Value Added Goal 3 and making the controller more novice-friendly through a better guide and simpler system implementation.

The project’s OSF repository contains the KiCad files needed for the fabrication of the board. JLCPCB is a recommended service for custom PCB orders.

The Bill of Materials for the project can be found below. Once all of the pin headers and components are soldered to the board, the Arduino Nano can be inserted into the header pin slots.

Upload the Arduino sketch to the on-board Arduino Nano using the Arduino IDE.

The BREAD BLDC OSF Repository can be found at the following link:

All board files and code can be found in the repository.



Teaching Old Motors New Tricks — Part 2
SVPWM (Space Vector PWM) and Third Harmonics Injection (THI) in Inverters
BLDC motor made simple for power electronics engineers
Space Vector Pulse Width Modulation Simulation in Simulink 2015, Part 1
Learning — Switchcraft
Development of Open-Source Motor Controller Framework for Robotic Applications
ch9.pdf | Power Electronics | Electrical Engineering and Computer Science | MIT OpenCourseWare
Space Vector Modulation
Fundamentals of MOSFET and IGBT Gate Driver Circuits (Replaces SLUP169) (Rev. A)
Arduino Brushless Motor Control Tutorial | ESC | BLDC – How To Mechatronics