I am using MKV30 microcontroller for sensorless vector control of PMSM. I want to use the backemf observer and angle tracking observer to measure the speed. In RTCESL, there are two types of backemf observers available, so whats the difference between observer AB and DQ. Is the difference is only about ref axis or something else?
Is there anything specific like the different observers works for different types of motors (like surface mounted)?
We are not actually using the DSP controller, we are using kinetis mkv30vlf10 microcontroller. In that there are two types of backemf observer available. We are using RTCESL v4.5.
you're correct. RTCESL 4.5 contains two BEMF observers:
1. AMCLIB_BEMF_OBSRV_AB which is calculated in Alpha / Beta coordinates. This one is typically used together with AMCLIB_ANGLE_TRACK_OBSRV to get speed and position (theta) s sin and cos of theta
2. AMCLIB_BEMF_OBSRV_DQ which is calculated in D/Q coordinates. This one is typically used together with AMCLIB_TRACK_OBSRV to get speed and position (theta)
We used in our MC reference application observer in DQ coordinates #2 (recommended) which is more stable and robust in lower speeds. Alpha/Beta observer can provide slightly better results in higher speeds.
I want to use the backemf observer AB to calculate the speed and position. As per the application need we got only option is to use this.
But the problem now is the observer AB not working at all. The observer outputs "Iobserv, Eobserv" are getting saturated at negative max value at the very first call and output of observer is always Frac16(0.707).
I have tried with different values of gain and as well as calculated value as per, given in that library guide.
Yes I have seen that reference solution, in that as you said, you are using DQ observer but unfortunately we can't use that in our application.
And the DQ observer seems to be most likely used for the motor with saliency.
Am I missing anything?any help would ease my problem!
we've implemented Alpha/Beta bemf observer into one of the MC example from MCRSP_PMSM_V1.2.0.
Attached is the updated code which was tested with real motor and works correctly.
I hope it could help you. Part of the attached archive is also excel file with all constant calculation for bmef al/be observer and ATO.
Following files have been updated compare to original example:
There's a macro BEMF_OBSVR_TYPE in pmsm_control.h selecting type of observer.
Thankyou for your support pavel,
Fortunately, I got the Backemf_observer_AB working in floating point. Now I can match the theta generated from angle tracking observer and the theta Im generating for scalar open loop control. The only thing now is I cannot match the speed.
Im giving 600rpm to run in scalar control and checking the trackers in background and getting "fltSpeed = 88".
Can you help me? Thanks for your support!
Thanks for your help pavel,
I got the observers working right and the motor is running in foc at 1000rpm after that the speed gets saturated(rated speed 3000rpm). Its not responding even the for the higher Iq ref values.
Upto some point the Ud, Uq both are increasing linearly for corresponding Iq ref after that the Ud only increasing Uq is saturated. I have checked Ud, Uq limits but its way far. I have done the decoupling also but no change.
can you help me?
when we tested last time the application with Al/Be observer, the motor was running in all speed range. Thus it quite difficult to say where the issue could be on in your application.
I guess there might be problem with Speed controller setting / current limitations.
Could you attache constant setting for all controllers, observer, etc.
Currently I have only limited time for this task due to other high priority task,
if your code is running in current (torque) loop only, then I would see the potential issue in current loop controller limitations which can cause the motor is not able run over 1000rpm.
Could you check output voltage waveform of D/Q current controllers?
Thank you pavel for your help,
I have the changed the loop bandwidths of current controllers and observers now I am getting the full speed.
My only doubt is, how to choose the current controller limitations. It is mentioned in DRM128 as follows,
but how this limitations are calculated as udcb/sq_root(3). Is there any reason behind this?
Again thank you for your support.
Value of Ud_lim = Udcb/sqrt(3) is the maximal value of phase voltage, which you can reach if you are using space vector modulation.
It's given by the functionality of Space Vector Modulation (SVM) technique which is capable to utilize higher amplitude of output phase voltage ~ 1/sqrt(3) * Udcb = 0.5777 * Udcb versus pure PWM sinusoidal modulation where only 1/2 * Udcb = 0.5 * Udcb can be utilize.
So vector amplitude of current controller outputs must not exceed Udcb/sqrt(3) value -> (Ud^2 + Uq^2)sqrt(2) < Udcb/sqrt(3).
I have attached the file with this, there u can see the back emf observer, angle tracking observer constants and decoupling constant.
And currently I am not working with speed control and just doing torque control.
As u mentioned in the previous mail, I have changed that angle tracking observer constant, now I am getting correct speed feedback. Thanks you very much for that.
Please replay as soon as possible.
Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10