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.

TMS320F280041C: Motor Frequency is different than estimator when Field Weakening is enabled

Part Number: TMS320F280041C


Dear All,

We are working on Field Weakening with IPMSM motor. We are using instaspin lab SDK and followed is13 FWC and MTPA example code. Everything is working fine except when Field weakening is enabled(motorVars.flagEnableFWC = true) and when Id starts becoming non-zero then measured frequency on motor terminals is different than mechanical frequency given by estimator. Please suggest a solution and let me know if any other details are required. 

Anup

  • Hi Anup,

    Thanks for reaching out on our E2E forums. Our InstaSPIN expert is out of office today. Please expect a delay in response. They should get back to you by Tuesday

    Regards,

    Peter

  • Any difference between the measured speed and estimation speed? And how do you measure the motor speed? How much Id is implemented? And what's the maximum and rated current of the motor?

    Can you provide more information and post some of the measured current waveforms if possible?

  • Any difference between the measured speed and estimation speed - Yes. Measured speed is 3180RPM and Estimation speed is 2880 to 2910

    how do you measure the motor speed - by Tachometer and Motor Freq by Freq meter on motor terminal. Motor freq and Motor speed is matching 3180 RPM its 106Hz as its 4 pole motor.

    How much Id is implemented - Its not fixed but its limited to 30% of rated current. Lab 13 (is13) is referred.

    what's the maximum and rated current of the motor - Max current is 15A and Rated current is 10A.

  • As mentioned above, please check if the frequency of the motor phase current  is as the estimation frequency of the motor and the target reference frequency you set. If yes, the measured speed by Tachometer could be not right at high speed.

  • Speed measured by Tachometer is same as frequency measured at motor terminal and motor phase current freq. Motor speed/motor terminal frequency is not matching with frequency given by motorVars.speed_Hz = EST_getFm_lp_Hz(estHandle); its continuously varying. but when we disable Field weakening by making motorVars.flagEnableFWC = false or when Id is 0(when fwc pid output is 0. fwc is not required) all things are matching. Motor speed, frequency and output given by EST_getFm_lp_Hz(estHandle) are same and stable.

  • 1. Check if the pole pairs of the motor is set correctly.

    2. Check if the PWM and control frequency is set correctly as you want

    3. Limit the field weakening current, and tune the gains of the field weakening controller.

    4. Capture some of current waveforms and post the figures.

  • 1 and 2 are set correctly

    3. can you guide me how to tune these gains

    4. i'll provide wareforms

  • You can set the initial control parameters for field weakening control in user.h as below.

    //! brief Define the Kp gain for Field Weakening Control
    #define USER_FWC_KP                 0.05

    //! brief Define the Ki gain for Field Weakening Control
    #define USER_FWC_KI                 0.0002

    //! brief Define the maximum current vector angle for Field Weakening Control
    #define USER_FWC_MAX_ANGLE          (float32_t)(-75.0)                              // degree
    #define USER_FWC_MAX_ANGLE_RAD      USER_FWC_MAX_ANGLE*MATH_PI/((float32_t)(180.0))   // rad

    //! brief Define the minimum current vector angle for Field Weakening Control
    #define USER_FWC_MIN_ANGLE          (float32_t)(0.0)                                // degree
    #define USER_FWC_MIN_ANGLE_RAD      USER_FWC_MIN_ANGLE*MATH_PI/((float32_t)(180.0))   // rad

    Or tune the control parameters by online changing the variables below in the watch window.

    fwc.pi.Kp

    fwc.pi.Ki

    fwc.pi.outMin

    fwc.pi.outMax

    In this case, you may limit the Id by increase the value as below to limit the Id.

    #define USER_FWC_MAX_ANGLE          (float32_t)(-80.0)   

  • ok. i'll do this