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