Open Source RoboticsRobots, software & learning

SimpleFOC

Software

Arduino and PlatformIO field-oriented control library for BLDC and stepper motors. [1] [2] [3]

Installation & first result →Official websiteGetting started

For
Robotics developers evaluating the selected source workflow [1] [2] [3]
Source rights
Named licenses are documented by part. Review licenses
Unknowns
operating system, compute requirements not fully established. Review gaps

Source researched · Not tested by us
Sources checked · Research details

Licenses & related hardware

Requirements · Research details and dates

On this page

Overview

SimpleFOC is an Arduino and PlatformIO field-oriented-control library for BLDC and stepper motors. It provides source implementations and hardware-configuration interfaces across multiple MCU families. This entry covers the software library, not every SimpleFOC-branded board or a complete motor system. Supporting an MCU family does not establish that any arbitrary pins, timer configuration, driver and sensor combination will work together. [1]

Is this for you?

Known limitations
  • Library MIT notice does not establish separate driver-board hardware rights.
  • A source example is not a commissioned motor setup or verified current/voltage protection.

Editorial source-scope assessment; no installation, execution or compatibility test.

[1] [2] [3] · Editorial assessment

What you need

Dependencies
  • Compatible MCU, motor driver, motor and selected position/current sensors
  • Arduino IDE or PlatformIO; board core, pins, pole pairs and supply/limit configuration must match

[1] [2] [3]

Installation & first result

Open the upstream getting-started guide [1] [2] [3]

  • Inspect the pinned source instructions and select the documented configuration.
  • Install only the dependencies for the chosen route; validate against the selected robot or model before hardware integration.

Editorial source-scope assessment; no installation, execution or compatibility test.

[1] [2] [3] · Editorial assessment

Project notes

Begin with the library and a selected hardware combination

The pinned README documents Arduino Library Manager installation: open Tools > Manage Libraries..., search for Simple FOC, install the library and reopen the IDE to find File > Examples > Simple FOC. PlatformIO and manual source installation are separate linked routes. Installing today's latest library does not necessarily reproduce the reviewed revision or its v2.4.0 release description. No board core or library was installed here. [1]

Before adapting the README velocity example, identify the actual MCU, motor pole-pair count, PWM driver pins, encoder pins/resolution and supply configuration. The example uses an 11-pole-pair motor, a three-PWM driver on pins 9/10/11 with enable pin 8, and an encoder on pins 2/3 with 2048 CPR. It sets a 12 V driver supply and uses default control parameters; these are example values rather than measurements or suitable settings for every motor. [1]

The setup initializes the encoder and interrupts, links the sensor to the motor, initializes and links the driver, selects velocity control, initializes the motor and calls initFOC(). Its loop calls loopFOC() and requests move(2), described as 2 rad/s. Study that sequence alongside the documentation for the chosen sensor, driver and control mode before powering hardware. This review did not upload or run the example. [1]

Initialization and protection need their own checks

The sampled BLDCMotor implementation returns an initialization failure when a driver is missing or uninitialized. It also constrains configured voltage/alignment limits against driver limits. The constructor sets voltage torque control by default. These are inspected source behaviors, not evidence that a particular driver is wired correctly, that initialization status is checked by every application, or that current protection has been commissioned. [3]

The README links motor-characterization, current-sense alignment and control-loop tuning guidance. Select those instructions for the actual hardware rather than assuming the defaults prove calibration or protection. No current-sense alignment, encoder zeroing, electrical limits, closed-loop stability or interruption behavior was tested. [1] [3]

The library's MIT notice applies to its software. Separate driver boards, bought-in motors, sensors, MCU cores and other dependencies require their own rights and compatibility review. No complete hardware budget, compile matrix, firmware upload, powered motor operation, thermal result or performance comparison was established here. [1] [2]

What we checked

Pinned source research only; selected implementation and setup text inspected. No dependency installation, upstream build, API export, robot simulation, hardware commissioning, timing or performance test performed.

Not yet established

  • Requirements: operating system, host computer
  • Version-specific hardware compatibility (ecosystem tags alone do not establish it)

Updates

Upstream last updated
Not established
Latest release
Not established
Profile updated
Nov 1, 2026
Sources last checked
Nov 1, 2026
Next review
Dec 1, 2026
Reviewed revision
b3d8f39

Source files and licenses

Distinct robotics software implementation with inspectable source, declared license and bounded initial workflow.

LayerAvailability / license
softwareavailable · MIT
Repository project notice; bundled/external dependencies and robot/model/CAD/hardware assets retain their separate terms. No whole-tree license audit or hardware rights clearance. [1] [2] [3]
documentationavailable · MIT
Repository project notice; bundled/external dependencies and robot/model/CAD/hardware assets retain their separate terms. No whole-tree license audit or hardware rights clearance. [1] [2] [3]

Software entry; no separate physical design, firmware distribution, training-weight or dataset claim selected.

References

Each source links to the exact revision we read. “Used for” shows where this page relies on it.

Correction guidance · Discussion is not enabled · Profile format 0.7.0-draft.5

Change history