This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IPM Motor Control

Other Parts Discussed in Thread: TMS320F28069

Hello,

We are using InstaSpin and TMS320F28069 to control a high current IPM motor. Because of the saliency of the motor we cannot get to its maximum torque. Therefore as far as I know we should inject some negative Id current to compensate. We have look-up table with the ideal Id value as a function of speed and Iq.

I am not completely sure about how to implement this within InstaSpin. I have seen that there is a function CTRL_setId_ref_pu. Should I continuously check the Iq current and set the proper Id value (from the look-up table) using that function in the background loop?

Regards

Javi

  • Javi,
    proj_lab09 shows how to use this function.
    CTRL_setId_ref_pu(ctrlHandle, _IQmpy(gMotorVars.IdRef_A, _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A)));

    in lab09 we are injecting positive IdRef for field weakening. You can obviously inject negative if you like.

    For highly salient IPM motors there are 2 other things you might consider
    1. a set of look up tables with different Ls_d and Ls_q values for different current levels. you can load these into EST and the estimations will improve

    2. many customers doing this type of control replace the standard current controllers with cross-coupled current controllers.
  • Hi Chris,

    1. Does it have the same effect to change the Idref than to change the Ls and Lq? For what you say the only difference would be in the estimator right? We are running InstaSpin sensored so maybe the effect is not very high. I don't have a look-up table for the values of Ld and Lq as a function of current. I only have a table with the Id value I should use for a specific Iq so that I get maximum torque per amp out of it.

    2. Is it worth to implement a cross-coupled current controller? Is there anywhere where I could find some info about how to implement it?

  • 1. Ahhh, you aren't using FAST. Then you don't really care about the effect of Ls_d and _q on FAST. You really just want to adjust the Iq and Id control. What you are proposing is fine.

    2. it's a small gain. if you are doing MTPA already you will be pretty close. I would just continue as you are.
  • Hi Chris,

    We have decided to implement the cross-coupled current controller since at high speeds the current control doesn't perform well enough. In order to do that, and based on the section 11.8.2 of the user's manual the terms that should be added/substracted in the PID controller are:
    w*Ls*iq and w*(Ls*id+Ke). My doubt is that since all the currents are in per unit, what values should I use for the electrical frequency w, the stator inductance Ls and the backEMF constant Ke?

    This is my best guess:
    - For the backEMF constant : EST_getFlux_pu(obj->estHandle)
    - For the electrical frequency: EST_getSpeed_krpm(obj->estHandle)*1000*POLE_PAIRS/(60.0*USER_IQ_FULL_SCALE_FREQ_Hz)
    - For the stator inductance, since the Lq and Ld are different I am not sure about which value should I use. I could do: EST_getLs_d_pu(estHandle) or EST_getLs_q_pu(estHandle) or maybe some kind of average between both.

    Hope you can help me out.

    Thanks again!

  • the person who wrote this is no longer employed by TI.

    I'm seeing if someone else can help with this one.
  • Does injecting positive Id really give you higher torque? Or is it something I misunderstand in your post? Injecting negative Id should give you field weakening with lesser torque.

  • IPM (Interior Permanent Magnet) motors have what is called reluctance torque. This means that the optimum angle between the Iq and the Id currents is not 90 degrees like in the Surface Mount Magnet motors, but slightly higher depending on the amount of reluctant torque of the motor. Therefore if you want to get the maximum torque out of your motor as possible you have to inject some negative Id current to increase the angle between the Id and the Iq. That optimum point depends mainly on the load and the speed so you have to adjust it on the fly. This control strategy is called Maximum Torque per Amp (MTPA).

    Of course if you keep increasing the angle above the MTPA point you will enter field weakening with lesser torque.

  • Anybody?

    I tried with the values from my previous post and the control rather than improving got a lot worse so I assume there is something wrong about them.
  • Hello,Javier.
    Did you solve the problem?What kind of methods to get a table with the Id value for a specific Iq?
  • Hello chao yang,

    I was provided with a table for id/iq values for maximum torque from a simulation CAD program. However if you don't have such values what you can do is get them manually by setting a fixed speed and a fixed Iq and vary the Id until the torque sensor reads the maximum value and keep that Id value. You can do this for several speeds and interpolate between speeds and Iq (2 dimensional interpolation) to get the proper Id value in real time (in the background loop). That's what I ended up doing.

    The instability issues that I had were due to the fact that the resolver we were using was not very accurate and the encoder angle had periodic ripples which shows up in the Id and Iq as current ripples as well.

  • Dear Javier.Thanks for your quick response and some valuable advice!


    1.About" setting a fixed speed and a fixed Iq and vary the Id"


    Does "setting a fixed speed" mean that I need make speed closed loop In the software program first??Or you mead I get a stable speed by adjust the load?

    2.I will control a IPM motor with resolver sensor for electric vehicle application.I think it is a torque application.If I want to achieve current closed loop control mode,must I set a special PI controller for the MTPA control strategy??

    chao

  • Dear chao,

    1. What I did was to run the motor back to back with another motor. Set a fixed speed in the second motor and run the first one in current control mode only. That way you can step up the torque and vary the Id to see what gives you more torque.

    2.I don't think you need anything special. If you fancy you might want to try to implement a cross-coupled PID. It is suppose to give better dynamic response but I haven't tried it so I can't tell you for sure.