Quote:
Originally Posted by chinuhark
1)The first issue is the fact that we need angle for id,iq and id,iq for the angle. The classic chicken and egg situation. So does taking initial id,iq as a random value say zero just work. Like do all three converge to the correct value in a few iterations in a closed loop fasion?

Yes! It just works to set them to zero, and even at zero RPM, it's maybe wrong for an instant, and then converges and everything is fine.
Quote:
2) We have im in the denominator in the second term which will most probably be zero the first time we execute. Won't there be divide by zero problems or does a simple condition like " if im = 0, im = 0.000001" solve this?

I tried that first, but instead went with
Code:
if (magnetizingCurrent == 0) {
return; // there is no rotor flux angle, since there is no field. So, keep the angle the same as it was before??
}
Quote:
While I understand the above procedure conceptually, i.e. we are simply calculating the rotor field speed and then integrating it over time to get the position, what bothers me is that without knowing the initial position, it doesn't make any sense to me. I mean we will have an angle that will increment every cycle at the right rate but how can it be the actual rotor angle? I mean both equations 1 and 3 use initial values and increment them but we are taking random values/zero the first time this is done?
Do we directly start in vector control mode from zero speed or first give it a little push using a simple V/f rotating field?

It's wrong for maybe 1/500 sec, and then converges to the true rotor flux angle. It doesn't take long at all. We get a true mechanical speed, and a true magnetizing current, and Id feedback, and Iq feedback that converge in like 12msec, and from that you get a true slip speed, etc... and badabing badaboom, we are in business.
Quote:
This also got me curious as to how it's done in Permanent magnet motors. Do they use a simple incremental encoder, or an absolute encoder and does a magnetic north have to be physically aligned with the encoder???

The absolute encoder position won't likely be aligned with the the rotor flux angle, so you can set IdReference to some nonzero value, and IqReference to zero, and then you keep making different offset guesses. Once the motor stops turning, you found the right offset. Then, for all eternity, you save that offset, so that as soon as your motor spins past that index pulse (on the absolute encoder) for the first time, you know what true rotor flux angle you are at. You just add the offset you found that was saved to the EEProm.