Espressif port of simplefoc

Hey guys,

Recently esp guys from espressif have partially ported the simplefoc library to thier main repo.
Here is the link:

They have made quite a few changes to the low-level code and main classes. I was wondering if someone has already tested their implementation and compared the performance.
It would be interesting to see some stats and maybe we can backpropagate some of their changes to the simplefoc as well.

Especially since their solution seems to be thread safe :smiley:



Hmmm, I guess there is this code:

and this:

But I can’t really find huge changes - it doesn’t look like they changed that much in their fork of the library:

And the changes in their “component” are a bit hard to follow - it looks like they changed parts of BLDCDriver3PWM and implemented some sensor classes to use their APIs directly.

What am I missing?

You are right, there aren’t many differences.

They did implement the optimized sine and cosine funciton

As well as some different hendling of the low level pwm setting which might be more performant with respect to what we have. It is implemented in

But as you said their changes are very specific and not substantial, so they more seem to restrict than to restrict the usage of simplefoc than to enable new things.

When I saw it, I was wondering if someone has used it and see if there are some features that we should consider including as well.

Also they have this example applications of multiple motors running in real time os within one esp32.

I remember that people trying to use our library had troubles with it some time ago, and the Espresif guys seem to target exactly that kind of applications with their port. Since I’ve never tried it in my setups I was wondering if someone else did and is there some specific changes that we can integrate in our library to enable that.

These questions are just “a quick read” type of questions, I did not really go in detail of their implementation. :smiley:

I agree, I think they want things to be easy to use for their customers.

I think they’re targeting the users of their Espressif IDE who code primarily against their Espressif APIs, and maybe don’t use Arduino at all, or not in the ESP32 product they’re working on.

And so Espressif is just quite pragmatic: in their Arduino core there is the whole FreeRTOS and Espressif APIs available in the background, and now they’re doing it the other way round too - Arduino libraries get wrapped with enough of a translation layer to make them work in Espressif IDE.

I saw that the newest versions of the Espressif cores (3.0?) have some breaking API changes. Some of the APIs we were using I think are completely replaced with new ones. I need to look into it more… Maybe their adaptation is already using the new APIs?

That’s great! We should time it to make sure it’s actually an optimisation (e.g. on STM32 CORDIC is fastest, but only if you don’t use the HAL functions, and deku’s LUT version is still faster than the arm_math.h m4 optimised version - so its worth checking that their optimisation is actually better). Then we could include it in the examples for people to use.

Another good find, and something we should include also as an example (or link to theirs?) because people have asked about this more than once already…