# Does Simplefoc have IPMSM motor support?

**URL:** https://community.simplefoc.com/t/does-simplefoc-have-ipmsm-motor-support/8311
**Category:** applications
**Created:** [August 26, 2026, 11:52am UTC](https://community.simplefoc.com/t/does-simplefoc-have-ipmsm-motor-support/8311 "2026-08-26T11:52:54Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![serkan](https://community.simplefoc.com/user_avatar/community.simplefoc.com/serkan/32/7506_2.png) [@serkan](https://community.simplefoc.com/u/serkan)
#### Post date: [August 26, 2026, 11:52am UTC](https://community.simplefoc.com/t/does-simplefoc-have-ipmsm-motor-support/8311/1 "2026-08-26T11:52:54Z")

</div>

![image](https://community.simplefoc.com/uploads/default/original/2X/f/fb01f41a724156e2dfb6cbdccdfce3e5d1f91d84.jpeg)

Can I use motors with rotors made of silicon steel sheets and where the magnet is positioned at an angle inside the sheets as shown in the image (IPMSM) with a simplefoc?

As far as I understand, magnetic torque and reluctance torque are produced when driving these motors. To take advantage of the reluctance torque, the flux degree (90) that keeps the magnetic torque at its maximum is reduced to a lower degree. This increases the reluctance torque. It reduces the magnetic torque. It is possible to find the angle at which the sum of these two torques is highest using an algorithm.

The following link contains information about the algorithm the VESC community uses to drive these motors. Can I implement this with SimpleFOC?

> **[MTPA merged into VESC! | Details | Hackaday.io](https://hackaday.io/project/164932-axiom-100kw-motor-controller/log/179447-mtpa-merged-into-vesc)**
>
> Another performance contribution to VESC from powerdesigns! 
> 
>  
> 
> 
> Now that we earned some deep insights about the inner workings of IPM machines, lets recap what is MTPA about. 
> 
> 
> MTPA stands for Maximum Torque Per Amp, which means that for a given...

---

<div class="post-metadata">

### Author: ![dekutree64](https://community.simplefoc.com/user_avatar/community.simplefoc.com/dekutree64/32/3398_2.png) [@dekutree64](https://community.simplefoc.com/u/dekutree64)
#### Post date: [August 26, 2026, 3:11pm UTC](https://community.simplefoc.com/t/does-simplefoc-have-ipmsm-motor-support/8311/2 "2026-08-26T15:11:10Z")

</div>

Of course you can do it, it’s open source 🙂

As for the best approach, I think you could call motor.move to update motor.current\_sp to the target torque, and then run your own code to split that into the separate d and q currents. Set feed\_forward\_current.q = newQ - current\_sp and feed\_forward\_current.d = newD. Or you could simply set current\_sp = newQ and leave feed\_forward\_current.q=0, but it’s safer if current\_sp isn’t modified, so even if it’s called more often than motor.move, the feedforwards are regenerated from current\_sp the same way each time.

If you wanted to integrate it into the library, then perhaps a new TorqueControlType would be best, which does the extra calculations using motor.axis\_inductance and then falls through to the regular foc\_current.
