Position sensors

The library currently supports the following types of position sensors:


Encoders are by far the most popular position sensors, both in industry and in the hobby community. The main benefits are the precision, standardization and very low noise level. The SimpleFOClibrary supports just about any type of encoder you can find. Here is a nice short video which explains the main working principles of encoders: YouTube video

The encoder position tracking (pulse counting) algorithm code efficiency, and especially its implementation on Arduino devices, is one of the main limitations for both performance and smoothness of the FOC algorithm. There is a clear tradeoff between encoder precision and execution efficiency, therefore it very is important to find a suitable encoder to your application.

Optical encoder
Optical encoder
configurable cpr 48-8192
Margetic encoder
Youtube demo

Encoder CPR: Rule of thumb for Arduino UNO

For Arduino UNO, the maximum number of pulses/second should not exceed 20,000. After this value it start to have execution issues. Please take this in consideration when choosing the encoder and especially if using more than one motor.


If your CPR value is 10000, you will be able to spin your motor with a max velocity of 120rpm - 2 rotations/second

Magnetic sensors

Magnetic position sensors have many benefits over encoders:

  • Very efficient position calculation ( no counting )
  • Time of execution doesn’t depend on velocity or number of sensors
  • No need for interrupt hardware
  • Absolute position value
  • Lower price than encoders
  • Simple to mount

Magnetic sensors usually come with several different communication protocols:

  • ABI (✔️ supported) - exactly the same as the encoder interface
  • SPI (✔️ supported)
  • I2C (✔️ supported)
  • Analog (✔️ supported)
  • UVW (✔️ supported) - exactly the same as the Hall sensor interface
  • PWM (✔️ supported)
  • SSI

PWM and SSI protocol will be tested for their performance and implemented in following steps. Please let us know if you would be interested in having some other communication implemented!

Here are some of the supported magnetic sensors:


BEWARE: I2C Pull-ups

Not all the I2C buses need pull-ups. But in some cases they might be necessary. Especially when using STM32 boards. In those cases, you will not be able to communicate with the sensor. To enable communication usually 4.7kOhm resistors will be needed in between 5V/3.3V and SCL and SDA channels. Here is a good stack overflow question about this issue : link .
In the future versions of the SimpleFOCShield I will try to include those pullups as well.

BEWARE: UVW interface

If you desire to use UVW interface of the magnetic sensor please be sure to configure your magnetic sensor to have the same pole pair number as the motor. Also beware that the alignment of the magnetic sensor and the motor phases is very important and will probably take some time to achieve.

Hall sensors

Hall sensors for FOC control used to be very common in past due to their commutation simplicity. Motors are usually fitted with 3 hall sensors which read the rotor magnet position and can determine electrical angle of the motor with a resolution of 60 degrees.

SectorElectrical angleHall AHall BHall C

The main benefit of these sensors is that they are really cheap and they can be added on just about any BLDC motor. But nowadays, with the emergence of magnetic sensors they are less and less used. One of the main disadvantages of these sensors is that the low speed operation is not smooth due to the relatively high quantization of the angle measurement.

The main area of application of these sensors are electrical motors in all kinds of transportation vehicles. Their motors are often very high-power and relying on any kind of communication (I2C, SPI, SSI … ) with such high currents and magnetic fieds is just not an option. Another reason to use hall sensors is if you cannot access the shaft of the motor, or if you cannot mount the sensor coaxial to the motor shaft. Hall sensors are mounted around the motor rotor, which makes them very non-intrusive and easy to integrate.

You can find hall sensor ICs at any electronics supplier, all the way from Ebay and Aliexpress to Mouser and Digikey but also in most local electronics shops.

49E Hall Sensor (10x)Aliexpress1$

You can also consider buying a BLDC motor with integrated Hall effect sensors if this suits your application.

BLDC motor
hall sensors integrated
BLDC motor
hall sensors integrated

Motor choice

Make sure to read supported motor docs before you buy your BLDC motor.