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.

LAUNCHXL-F280049C: Implementing Field Weakening Control

Part Number: LAUNCHXL-F280049C

Hello,

I am looking at implementing the field weakening control according to lab 13 in this guide: https://dev.ti.com/tirex/explore/node?node=AB7tA2xX4yXlPxzl5o3s1w__0.jXikd__LATEST

We are using the default parameters from that lab:

I am having some trouble getting this to work.  With fwc code included (enable flag set high or low), the motor makes a high pitched noise when commanding lower speeds that is not present without the fwc.  The motor seems to run with the fwc enabled, but the top speed is slightly lowered if anything (on the order of 20-30rpm/1700 lower).  Here are some specific questions/concerns I have:

1.  We would like to use fwc independent of MTPA.  It doesn't seem like this would cause any problems, but are there any considerations for this beyond removing the MTPA calculations and changing this line:

 to just the fwc angle?

  

2. How do these current angles make sense?  referencing this figure from the lab, do we not want current angles in the range (90,180) degrees to get negative Id currents in the case of field weakening?.  Also why is the min lower than the max in the case of the lab?  I feel as though we are misunderstanding how this is defined or used.

3.  When commanding high speeds with fwc enabled, we are seeing current spikes that cause the motor to lock at 0rpm, and max current is pulled from our power supply (bus voltage drops low in this case without triggering undervoltage fault).  

I am expecting the fwc to take our motor to speeds above 2000rpm based on testing done with a different drive that uses field weakening.  Presently, we are seeing ~1750rpm max speeds.  

Thanks in advance,

Coleman M Keding

  • 1. Yes, you can remove MTPA, and assign the FWC angle to motorVars.angleCurrent_rad directly as below.

                motorVars.angleCurrent_rad = FWC_getCurrentAngle_rad(fwcHandle);

    2. Correct, the angle from FWC should be 90 to 180 for getting the negative Id value. The setting value means the absolute value, and will be subtracted by 90 to convert the angle to (90 180).

    3. Set the correct USER_FWC_MAX_ANGLE, USER_FWC_MIN_ANGLE, USER_MAX_VS_MAG_PU and USER_VS_REF_MAG_PU according to the motor and hardware.

    It's better to keep the USER_MAX_VS_MAG_PU  is lower than (0.57).

  • 2. Correct, the angle from FWC should be 90 to 180 for getting the negative Id value. The setting value means the absolute value, and will be subtracted by 90 to convert the angle to (90 180).

    So using the parameters of the lab gives a current angle range of (90, 165)?

    A USER_FWC_MIN_ANGLE of 180 and a USER_FWC_MAX_ANGLE of 270 would give a current angle range of (90, 180)?

  • & even with this forcing a current angle of 130 degrees does not appear to have an effect on top speed.

  • So using the parameters of the lab gives a current angle range of (90, 165)?

    Right.

    A USER_FWC_MIN_ANGLE of 180 and a USER_FWC_MAX_ANGLE of 270 would give a current angle range of (90, 180)?

    No. You should refer to the default value in user.h to set the minimum and maximum angle for FWC. The USER_FWC_MIN_ANGLE should be always ZERO. The USER_FWC_MAX_ANGLE is (0, -90), and it's better to be between (0, -75).

    Please check the Id and Iq reference and feedback current. What load is adding to the motor when it runs at high speed? Try to decrease the load and see what happens. Please be note that the output torque will be decreased when the motor is running with FWC.

  • Looking at my Idq_ref_A and Idq_in_A I see that my Idq_ref_A[0] (Id reference current) is staying at 0. The Idq_ref_A[1] (Iq reference current), and both Idq_in_A[0] and Idq_in_A[1] are fluctuating a lot.  Running at top speed adds ~.4 ft*lbs to the motor, we are rated for >10 ft*lbs.  I am currently running with no external load on the motor.

  • Idq_ref_A[0] should be a negative value if the motor run with FWC. Please check the values for FWC PI controller.

  • Please check the values for FWC PI controller.

    What values do you mean here?   I am using the kp and ki from the lab (.05 and .0002) and the USER_FWC_MAX_ANGLE=-75; and USER_FWC_MIN_ANGLE =0.

    Also, I don't think changes to the FWC PI will do anything because my problem is present when assigning a current angle manually by:

    and still no Id reference current is commanded.  In this case I would expect Idq_ref_a.value[0]==-idq_ref_A.value[1], but idq_ref_A.value[0]==0 always.

  • Please check the value of following variables

    motorVars.flagEnableFWC

    motorVars.Vs_V

     motorVars.VsRef_V

    fwc.flagEnable

    fwc.angleCurrent_rad

    fwc.pi

  • Here's what these look like running at max speed:

  • What's the feedback frequency? Is it close to the target speed you set? Did you change the example code?

    Please also check the below variables.

    motorVars.IsRef_A

    pi_spd

    motorVars.VsRef_pu

    USER_MAX_VS_MAG_PU