HELP NEEDED - Effect of FOC on torque of steppers

Hi Guys.

First of all, thanks for taking time reading my question. Long story short, as a new guy using FOC (two hours), I am trying to obtain higher torque from steppers while having high speed, by using FOC.
The application is to lift a weight using NEMA17 steppers. I used L298N, Arduino UNO, AS5600 Magnetic encoders as hardwares. Currently I am using the AccelStepper library and pass the calculated control input u into the SetSpeed function to obtain close-loop position control(Full state feedback/PID).
The main issue is that steppers lose torque when they increase in speed, letting me with very limited maximum speed. Therefore I wonder if I have a speed control loop using FOC /w PI, and a position control loop using convectional PID, would this help?
Some more concerns:

  1. would implementing two control loops in the void loop cause the looping too slow? from examples: // the faster you run this function the better // Arduino UNO loop ~1kHz
  2. I also find that steppers have a loud noise when they are at low speed/high torque. would having FOC solve this?

any advice would be greatly appreciated. :smiley:

Anyone help. Please :smiling_face_with_tear: :sob:

It would be a better idea to use a TMC2209 with the features that indicate how close the stepper is to stalling, whatever they call them.

Angle sensors like that will have too much error unless you want to get in there and mop it up by identifying the error sources and solving them. There is a sensor “calibration” thing in Simplefoc, but given the large number of pole pairs in a stepper motor it’s still not going to really be enough to get very good FOC control.

Also that set up is generally not suitable for what I would consider high speed. exactly what rpm are you talking about?

also I don’t think you need accelstepper if you are using simplefoc. Just use the sub systems included in SimpleFOC for angle control.

I agree with Anthony, with your hardware, you are just asking for a headache… AS5600 is a bad sensor, L298 is a bad driver, UNO is bad mcu, etc…
I have designed some stepper drivers which are using FOC, they perform pretty well, but it is using STM32G431, MT6835, and L6226Q driver. They are quiet but not as quiet as regular BLDC. If you want silent, you should instead use those “silent stepper drivers” like the TMC2209, they also have StallGuard like Anthony mentions, they work well if you don’t actually need FOC for your design.
High speed on steppers is very difficult to achieve because of how low their kV is. For me, on NEMA14 with 12V supply I can only hit about 200 radian/second top speed.

1 Like

In my experience your LPS driver is quieter than the tmc2209, I’ve compared them side by side. The FOC stepper is as close to silent as I’ve ever heard a stepper be, but it does depend on the motor construction.

To OP, everything else he said is exactly correct, but it’s unclear what you mean by “high speed”. If you want more than 500-1000rpm, you might be better off with a different motor type.


It’s worth noting you can get 8 pole bldc motors with the NEMA case form factors, they look the same from the outside and can dissipate a great deal of heat, like a stepper.

I tried to play with the settings of a TMC2209 to get higher speed quiet motion and I only wanted 30 rpm or so, I couldn’t get above 12 rpm or so without some kind of noises, not clear what caused them in the end, there are many possibilities.

I’m gonna post this video again, as it’s the only decent and accessible demonstration I have of FOC steppers at the moment. The Z axis and extruder are driven by normal drivers, and are making the only motor sounds you can hear. The bearings are much louder than the motors for the X and Y axes.

A big thank you to everyone who gave me ideas! I think I might just stick with what I have now and use some feedback controls. Has anyone tried using a Kalman filter on as5600? because it has quite a lot of measurement noise.

Hi Anthony,

thank you so much for this detailed reply. Have you tried using a Kalman filter on as5600? because it has quite a lot of measurement noise.

Hi VIPQualityPost,

thank you so much for this detailed reply. Have you tried using a Kalman filter on as5600? because it has quite a lot of measurement noise.

No, but that is because I don’t use AS5600, it is a pretty poor performance sensor. I would just buy a nicer sensor, you can get much better sensors for not much more money at all.