Understanding FOC theory, what is wrong with this simplification

Ok, so I get that the idea of FOC is to always give the best possible torque per amp by ensuring the optimal angular difference between where the rotor magnets are and where the stator’s induced field is pointing.

So I’ve been reading over a document strongly recommended on a few blogs that discussed FOC,
“SENSORLESS FIELD ORIENTED CONTROL OF BRUSHLESS PERMANENT
MAGNET SYNCHRONOUS MOTORS”, JAMES ROBERT MEVEY, Kansas State Masters Thesis, 2009

I couldn’t follow everything it described, but what really confused me was trying to understand why the Clarke, Park and inverse equivalents of those transforms are used at all. Is it just a computational efficiency thing?

Because as far as I can tell, assuming motor operation with a shaft angle sensor of some sort, you don’t need a transform to tell you the magnetic field angle, you just derive it from the shaft angle (where you have multiple electrical revolutions per mechanical one you might need a lookup table or a simple arithmetic conversion from mech angle to elec angle, but not full on matrix type transforms).

Then when you’ve got a shaft angle, which depending on the physical nature of the shaft angle sensor might involve some atan2 operations (computationally a bit hungry perhaps compared to matrix transforms), you just add 90 electrical degrees, handle any 0<–>360 or -180<–>+180 wrapping, that gives you “angleForStator” then use (assuming PWM levels of 0 to 255)

Apwm=PowerLevelNeeded* ( (sin((angleForStator+0)*PI/180.0)*127.5  + 127.5);
Bpwm=PowerLevelNeeded* ( (sin((angleForStator+120)*PI/180.0)*127.5  + 127.5);
Cpwm=PowerLevelNeeded* ( (sin((angleForStator+240)*PI/180.0)*127.5  + 127.5);

To put the field angle where you want it.

(EDIT: I’m not sure why current measurements on the phases are really needed either, if you know the level of PWM you’re feeding in to them then the currents will be in proportion to that)

The PowerLevelNeeded variable you calculate by whatever method is appropriate to your application, but usually somehow based on the difference between the speed or position you have measured the rotor at versus the speed or position it should be at. For directly doing torque control you just set the PowerLevelNeeded to scale up or down with the torque you are commanding for at a given time. And often FOC doesn’t strictly concern itself with this claculation anyway, it just decides where to angle the stator field and leaves power levels up to the application that it is being used for.

Why are the more involved transforms used instead? Is it just computational efficiency, atan2(a likely way to calculate rotor angle for many sensor types) and 3 sets of sin aren’t the fastest choice?

Or is it something which only matters at higher speeds, situations where the ideal difference between the stator and rotor fields becomes some value other than 90 degrees? But then, it would still be possible to do this with a lookup table which checks the measured rotor speed and tells you to add a different value instead of 90 degrees when the speed is high enough that 90 degrees is no longer optimum (if this 90 degrees does indeed change with speed).

Or is the whole Clarke and Park (and inverses) method a hangover from when FOC was being applied to motors where the rotor has a field induced in it by the current, induction motors of various types, rather than permanent magnet BLDC/PMSM motors which have become common in recent years since production of powerful magnets has become cheaper. Are Clarke and Park only used because that keps the FOC methodolgy in a form where it can be generalised to more theoretically complex systems without permanent magnets?

Thank you

1 Like

The voltage and current are not aligned, there is a lag that depends on phase inductance, frequency/velocity and current.

This video shows that you have to apply a field at a different angle depending on the load

“have to apply a field at a different angle”?
Isn’t it the case that throughout that video the motor is being driven inefficiently? It’s a kind of blind open-loop driving there isn’t it, where the motor isn’t checking where the shaft angle is. If he held that shaft with more force, so it sctually stalled, it would bounce back and forth as the constantly moving field passed across it (initially pulling it backward) and jerk around until he released it again? With FOC the idea would be if he stalled it hard enough it would turn against him with a constant force (the maximum torque it could muster) before resuming motion once he released it or lowered the load torque down to less than its stall torque? Because it is, in the vid, being driven by a constant frequency, and with, I think a constant power level. Isn’t the idea of FOC that you always set the load angle to be 90 degrees, if that makes the motor too fast you reduce the power, if it makes the motor too slow you increase the power.
Have I misunderstood something?
Thanks

Voltage vector and current vector are not the same.

“Voltage vector and current vector are not the same.”
Always? Or only at high rotational speeds? Or only with motors with a very large inductance in their windings?

Thanks

I already answered here.

You can see it in the graph in the video. There is a shift between the 2 angles.