Backemf observer

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Backemf observer

13,811 Views
kaarthichandras
Contributor II

Hi, 

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)? 

Regards,

kaarthi.

Labels (1)
17 Replies

13,098 Views
kaarthichandras
Contributor II

Any update on this would be very helpful!!

0 Kudos
Reply

13,098 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Kaarithi,

I think we have only the function to estimate the back-emf based on (D,Q) coordinator, we have not the function to estimate the back-emf based on (Alpha,Beta) coordinator.

Pls refer to section  2.3 AMCLIB_PMSMBemfObsrvDQ in the attached file.

BR

Xiangjun Rong

0 Kudos
Reply

13,097 Views
kaarthichandras
Contributor II

Thanks Rong,

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.

Regards,

Kaarthi.

0 Kudos
Reply

13,097 Views
pavelsustek
NXP Employee
NXP Employee

Hello Kaarthi,

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.

Regards,

Pavel

13,097 Views
kaarthichandras
Contributor II

Thanks Pavel,

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!

Best regards

Kaarthi

0 Kudos
Reply

13,097 Views
pavelsustek
NXP Employee
NXP Employee

!Hi Kaarthi,

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:

  • pmsm_control.c
  • pmsm_control.h
  • m1_sm_demo.c

There's a macro BEMF_OBSVR_TYPE in pmsm_control.h selecting type of observer.

Regards,

Pavel

0 Kudos
Reply

13,098 Views
kaarthichandras
Contributor II

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!

Regards

kaarthi.

0 Kudos
Reply

13,098 Views
pavelsustek
NXP Employee
NXP Employee

Hi Kaarthi,

attached you can find updated code with floating point observer Al/Be including excel sheet with correct constant calculation which is currently missing in RTCESL doc.

It was tested with real motor and works correctly.

Regards,

Pavel

0 Kudos
Reply

13,098 Views
kaarthichandras
Contributor II

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?

Regards

kaarthi

0 Kudos
Reply

13,098 Views
kaarthichandras
Contributor II

any update on this?

0 Kudos
Reply

13,098 Views
pavelsustek
NXP Employee
NXP Employee

Hi Kaarthi,

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,

Regards,

Pavel

0 Kudos
Reply

13,098 Views
kaarthichandras
Contributor II

Pavel, could you please send me the backemf observer (floating point) constant computation also.

Regards

Kaarthi

0 Kudos
Reply

13,091 Views
pavelsustek
NXP Employee
NXP Employee

Kaarthi,

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?

Regarding floating-point observer version and constant computation, the zip file has been already attached in a reply above (see @ kaarthi chandrasekaran on Mar 14, 2019 6:30 AM)

Regards,

Pavel

0 Kudos
Reply

13,091 Views
kaarthichandras
Contributor II

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,

pastedImage_1.png

but how this limitations are calculated as udcb/sq_root(3). Is there any reason behind this?

Again thank you for your support.

Regards,

Kaarthi 

0 Kudos
Reply

13,091 Views
pavelsustek
NXP Employee
NXP Employee

Kaarthi,

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).

Regards,

Pavel

0 Kudos
Reply

13,090 Views
kaarthichandras
Contributor II

Thanks Pavel,

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.

Regards

Kaarthi.

Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for Windows 10

0 Kudos
Reply

13,087 Views
kaarthichandras
Contributor II

Any update on this?

0 Kudos
Reply