- Home
- :
- General Purpose Microcontrollers
- :
- Kinetis Motor Suite
- :
- Backemf observer

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Backemf observer

02-27-2019
03:46 AM

741 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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.

17 Replies

03-04-2019
09:54 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Any update on this would be very helpful!!

03-05-2019
01:50 AM

28 Views

xiangjun_rong

NXP TechSupport

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-05-2019
06:21 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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.

03-05-2019
07:55 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

03-05-2019
10:37 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

03-08-2019
12:42 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

!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

03-08-2019
08:43 PM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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.

03-14-2019
06:30 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

04-15-2019
05:14 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

04-17-2019
05:33 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

any update on this?

04-17-2019
05:51 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

04-18-2019
03:16 PM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

Regards

Kaarthi

04-23-2019
12:56 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

04-23-2019
09:12 PM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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.

Regards,

Kaarthi

04-25-2019
12:26 AM

28 Views

pavelsustek

NXP Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

04-17-2019
06:06 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

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

04-21-2019
11:35 AM

28 Views

kaarthichandras

Contributor II

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Any update on this?