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.

Problems with field weakening

Other Parts Discussed in Thread: MOTORWARE

Hi all,

I am trying to implement field weakening to torque control application. I am currently using lab5a for the torque control. First I studied lab9 to understand the field weakening and then added field weakening function to lab5a (using fw.c and fw.h). For the testing I set Vs_ref for a small value and tested. It was stable for small torque commands (low accelerations) but Vs was very unstable with large torque commands ( high accelerations). Then I tried to tune the system by changing FW_INC_DELTA , FW_DEC_DELTA, and FW_NUM_ISR_TICKS_PER_CTRL_TICK. If the FW_INC_DELTA , FW_DEC_DELTA are small , there is a lare overshoot with Vs but less ripples on Vs. If they are large, there is a small overshoot with large ripple. Then I tried to add a PID to change the FW_INC_DELTA , FW_DEC_DELTA . Also I tried to add PID to make Id_ref vale directly without using increment, decrement  method. But Still I couldn't fix this issue for high acceleration. 

How can safely enter to field weakening region without a overshoot of Vs when there is high acceleration. 

Hope to hear from you.

Thanks.

  • Hi Lakshan,

    1. Meet SQRT(Id_ref*Id_ref+Iq_ref*Iq_ref) < Motor Maximum Current.
    2. Tune PI regulator parameterd for torque current, reduce the Ki for torque current PI regulator.
  • Thank you Yanming for the response.

    Yanming said:


    1. Meet SQRT(Id_ref*Id_ref+Iq_ref*Iq_ref) < Motor Maximum Current.

    How should I do this. Currently the setting for the maximum negative current as in user.h.

    "USER_MAX_NEGATIVE_ID_REF_CURRENT_A     (-0.5 * USER_MOTOR_MAX_CURRENT) "

     And still I did not go for higher negative Id_ref values because of this issue. Should I reduce Iq_ref for higher negative Id_ref values to keep Is constant?

    I have a another problem. In CTRL_runOnLine_User, there are two CLARKE_run functions to calculate current ands voltages of both alpha-axis and beta-axis.
    But there is only one PARK_run to calculate d,q currents on feedback loop. Seems that there FAST observer does not produce Vd,q voltages from feedback loop.
    Then how , instaspin calculate gMotorVars.Vd and gMotorVars.Vq of feedback loop to calculate actual gMotorVars.Vs  which is going in to FW_run as fbackValue?

  • 1. You can limit Iq_ref by Iq_ref < sqrt(Imax*Imax-Id_ref*Id_ref). Actually, you can monitor the PI regulator variables of Iq, and you can find the Iq_fdb is more less than Iq_ref if the motor work in deep field weakening. You should enable the PI regulator of Id first as in motorware lab projects. Please monitor the PI regulator variables of Id and Iq, to look the Vd and Vq output, and then know why can't go for higher negative Id_ref.
    2. Don't need PARK_run for both input and output of Vd&Vq in InstaSPIN, the Vd and Vq are the output of the output of Id&Iq PI regulator. You can refer to Lab09 to find how to calculate the Vs.
  • Thank you Yanming,