AutomationShield
Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…
Arduino FOC for BLDC and Stepper motors - Arduino Based Field Oriented Control Algorithm Library
We live in very exciting times 😃! BLDC motors are entering the hobby community more and more and many great projects have already emerged leveraging their far superior dynamics and power capabilities. These motors have numerous advantages over regular DC motors but they have one big disadvantage, the complexity of control. Even though it has become relatively easy to design and manufacture PCBs and create our own hardware solutions for driving BLDC motors, the proper low-cost solutions have been challenging to develop. One of the reasons for this is the apparent complexity of writing the driving algorithms, Field Oriented Control (FOC) being one of the most efficient ones.
The solutions that can be found online are almost exclusively very specific for certain hardware configurations and microcontroller architectures. Similar to BLDCs, Stepper motors can hugely benefit from FOC control, but the solutions for FOC controlled stepper motors are even more scarce.
Therefore this is an attempt to:
NEW RELEASE 📢 : SimpleFOClibrary v2.4.0
- STM32
- ESP32
- Others
- Teensy4 support for phase state setting #498 by @Ragiton
- Added support for Arduino Nano Matter board by @silabs-szabog : #485
- Major New features
- Add current and voltage feed forward terms to motor classes by @Copper280z in #454
- Velocity Calculation rework by @Copper280z in #45
- Motion control - docs
- Added
custommotion control mode - see in docs and in examples- Added
angle_nocascadecontrol mode for position control without velocity cascade - see in docs - #384- Now all the closed and open loop modes can be used with any torque control modes (voltage and current)
- Ex.
velocity_openloopwithfoc_currenttorque control- Torque control - docs
- Added
estimated_currenttorque control mode for model-based current estimation without current sensing - see in docs- Now we can easily switch between voltage and estimated current control
- Docs updates - see docs
- Write the code page updated - see docs
- Better step-by-step setup guides - see docs
- New motion control documentation - see docs
- New torque/FOC control documentation - see docs
- Theory corner updated and extended - see docs
- Library source updated and extended - see docs
- Practical guides updated and extended - see docs
- Examples
align_current_sense.inoexample added to theexamples/utils/current_sense_testallowing to verify the alignment between the driver and the current sense phases- Changelog
- See the release notes for more details: see release
- See the milestones: v2.3.6 (unreleased) and v2.4.0
This video is a bit outdated but it demonstrates the SimpleFOClibrary basic usage, electronic connections and shows its capabilities.
Full API code documentation as well as example projects and step by step guides can be found on our docs website.
Depending on if you want to use this library as the plug and play Arduino library or you want to get insight in the algorithm and make changes there are two ways to install this code.
The simplest way to get hold of the library is directly by using Arduino IDE and its integrated Library Manager.
Tools > Manage Libraries....Simple FOC library and install the latest version.File > Examples > Simple FOC.Clone or Download > Download ZIP.Arduino Libraries folder. Windows: Documents > Arduino > libraries.File > Examples > Simple FOC.cd #Arduino libraries folder git clone https://github.com/simplefoc/Arduino-FOC.git
File > Examples > Simple FOC.For all the questions regarding the potential implementation, applications, supported hardware and similar please visit our community forum or our discord server.
It is always helpful to hear the stories/problems/suggestions of people implementing the code and you might find a lot of answered questions there already!
Please do not hesitate to leave an issue if you have problems/advices/suggestions regarding the code!
Pull requests are welcome, but let's first discuss them in community forum!
If you'd like to contribute to this project but you are not very familiar with github, don't worry, let us know either by posting at the community forum , by posting a github issue or at our discord server.
If you are familiar, we accept pull requests to the dev branch!
This is a simple Arduino code example implementing the velocity control program of a BLDC motor with encoder.
NOTE: This program uses all the default control parameters.
#include <SimpleFOC.h>
// BLDCMotor( pole_pairs )
BLDCMotor motor = BLDCMotor(11);
// BLDCDriver( pin_pwmA, pin_pwmB, pin_pwmC, enable (optional) )
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 10, 11, 8);
// Encoder(pin_A, pin_B, CPR)
Encoder encoder = Encoder(2, 3, 2048);
// channel A and B callbacks
void doA(){encoder.handleA();}
void doB(){encoder.handleB();}
void setup() {
// initialize encoder hardware
encoder.init();
// hardware interrupt enable
encoder.enableInterrupts(doA, doB);
// link the motor to the sensor
motor.linkSensor(&encoder);
// power supply voltage [V]
driver.voltage_power_supply = 12;
// initialise driver hardware
driver.init();
// link driver
motor.linkDriver(&driver);
// set control loop type to be used
motor.controller = MotionControlType::velocity;
// initialize motor
motor.init();
// align encoder and start FOC
motor.initFOC();
}
void loop() {
// FOC algorithm function
motor.loopFOC();
// velocity control loop function
// setting the target velocity or 2rad/s
motor.move(2);
}
You can find more details in the SimpleFOC documentation.
Here are some of the SimpleFOClibrary and SimpleFOCShield application examples.
We are very happy that SimpleFOClibrary has been used as a component of several research project and has made its way to several scientific papers. We are hoping that this trend is going to continue as the project matures and becomes more robust! A short resume paper about SimpleFOC has been published in the Journal of Open Source Software:
SimpleFOC: A Field Oriented Control (FOC) Library for Controlling Brushless Direct Current (BLDC) and Stepper Motors.
A. Skuric, HS. Bank, R. Unger, O. Williams, D. González-Reyes
Journal of Open Source Software, 7(74), 4232, https://doi.org/10.21105/joss.04232
If you are interested in citing SimpleFOClibrary or some other component of SimpleFOCproject in your research, we suggest you to cite our paper:
@article{simplefoc2022,
doi = {10.21105/joss.04232},
url = {https://doi.org/10.21105/joss.04232},
year = {2022},
publisher = {The Open Journal},
volume = {7},
number = {74},
pages = {4232},
author = {Antun Skuric and Hasan Sinan Bank and Richard Unger and Owen Williams and David González-Reyes},
title = {SimpleFOC: A Field Oriented Control (FOC) Library for Controlling Brushless Direct Current (BLDC) and Stepper Motors},
journal = {Journal of Open Source Software}
}
more like this
Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…
☢️ ESP8266 / ESP32 Firmware for collecting and reporting statistics from Geiger counters
search projects, people, and tags