Current sensing
Arduino SimpleFOClibrary has as a goal to support FOC implementation with (at least) three most standard types of current sensing:
- In-line current sensing
- Low-side current sensing - initial support
- High-side current sensing - Not supported yet
up to this moment ( check the releases ), Arduino SimpleFOClibrary supports only in-line current sensing and implements initial support for the low-side current sensing on ESP32 boards (one motor), samd21 (one motor) and on the stm32 based B_G431B_ESC1 boards (one motor).
Each one of the current sensing classes will implement all the necessary functionalities for simple and robust implementation of FOC algorithm:
- Hardware config
- ADC resoluton and frequency
- Automatic zero offset finding
- Driver synchronisation
- ADC acquisition events triggering
- Adaptive alignment with driver phases
- Reading the phase currents
- Calculation of the current vector magnitude
- Calculation of the FOC d and q currents
Each of the implemented classes can be used as stand-alone classes and they can be used to read current values on BLDC driver outputs out of scope of the Arduino SimpleFOClibrary, see example codes in utils > current_sense_test
. In order for FOC algorithm to work the current sense classes are linked to a BLDCMotor
class which uses the driver to read the FOC currents.
🎯 Our implementation goals
The current sense code will be written in a way to support as many different drivers out there as possible and in a way to be fully interchangeable. Due to the very hardware specific implementations of the ADC acquisition for different MCU architectures and due to very different driver/adc synchronisation requirements for different current sensing approaches this task is probably one of the most complex challenges for the SimpleFOClibrary so far. Therefore the work will be done in iterations and each release will better and better support. Please make sure to follow out github and check the releases .
Also make sure to follow our community forum, a lot of discussions is being held about current sensing and its applications!
Current sensing support per MCU architecture
MCU | In-line | Low-side | High-side |
---|---|---|---|
Arduino (8-bit) | ✔️ | ❌ | ❌ |
Arduino DUE | ✔️ | ❌ | ❌ |
stm32 | ✔️ | ❌ | ❌ |
stm32 B_G431B_ESC1 | ✔️ | ✔️ (initial) | ❌ |
esp32 | ✔️ | ✔️ (initial) | ❌ |
esp8266 | ❌ | ❌ | ❌ |
samd21 | ✔️ | ✔️ (initial) | ❌ |
samd51 | ✔️ | ❌ | ❌ |
teensy | ✔️ | ❌ | ❌ |
Raspberry Pi Pico | ✔️ | ❌ | ❌ |
Portenta H7 | ✔️ | ❌ | ❌ |
Digging deeper
For more theoretical explanations and source code implementations of the current sensing and its integration into the FOC and motion check out the digging deeper section.