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.

DRV8301-69M-KIT: Torque estimate too low

Part Number: DRV8301-69M-KIT
Other Parts Discussed in Thread: MOTORWARE

I am having trouble getting the torque estimate (found in gMotorVars.Torque_Nm) to be correct.  It is reporting a value about 5x too low (a fifth of what it should be).  I have changed the shunt resistors by a factor of 5x, so I'm hoping that this is easy to solve by pointing out what I forgot to change in user.h.

Hardware mods

I am using a DRV8301-69M-KIT with minimal hardware modifications:

- The shunt resistors (R80, R81, R82) were increased from 2mOhm to 10mOhm for higher resolution at lower currents.  Notice the 5x factor.

- The phase voltage filter poles capacitors (C67, C68, C69) were reduced from 100nF to 68nF to operate at higher RPM.

USER.H mods

I modified user.h with the suggested values from the motorware_selecting_user_variables.xlsx spreadsheet (Motorware v1.01.00.18).

#define USER_IQ_FULL_SCALE_FREQ_Hz        (880.0)
#define USER_IQ_FULL_SCALE_VOLTAGE_V      (55.0)
#define USER_IQ_FULL_SCALE_CURRENT_A      (9.0)
#define USER_ADC_FULL_SCALE_CURRENT_A     (82.5 * 2/10) // Notice scaling changed by hardware modification
#define USER_MAX_ACCEL_EST_Hzps           (13.0)
#define USER_VOLTAGE_FILTER_POLE_Hz       (493.600) // Notice filter pole changed by hardware modification

#define USER_MOTOR_TYPE                 MOTOR_Type_Pm
#define USER_MOTOR_NUM_POLE_PAIRS       (8)
#define USER_MOTOR_Rr                   (NULL)
#define USER_MOTOR_Rs                   (0.347)
#define USER_MOTOR_Ls_d                 (0.000389)
#define USER_MOTOR_Ls_q                 (0.000507)
#define USER_MOTOR_RATED_FLUX           (0.0368)
#define USER_MOTOR_MAGNETIZING_CURRENT  (NULL)
#define USER_MOTOR_RES_EST_CURRENT      (0.6)
#define USER_MOTOR_IND_EST_CURRENT      (-0.6)
#define USER_MOTOR_MAX_CURRENT          (2.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz     (80.0)

Results

I have a dyno-style jig set up (two motors coupled through a torque sensor).

Applying +120 mNm load at 1200 RPM, gMotorVars.Torque_Nm reads +26 mNm.  Applying -120 mNm (opposite sign, gMotorVars.Torque_Nm reads -21 Nm.  The discrepancy in absolute value (26 vs 21 mNm) is due to internal drag of the motor that the torque sensor cannot detect and I'm not concerned with that.  Lets split the difference and round to 120 mNm real torque ~= 24 mNm measured by InstaSPIN.

Note that the ratio of (Torque_Nm/Iq_A) is relatively close to the USER_RATED_FLUX (Ke of motor).  It's reading about 10% low, but that seems OK to me.

What I am having trouble understanding is why applying 120 mNm results in gMotorVars.Torque_Nm reading ~5x too low (the same factor that I scaled my shunt resistor by).  Is there another USER constant that I forgot to change?

Dan

  • First, please make sure that the motor parameters are identified properly using lab02/lab02c, especially, the motor pairs and rated flux are correct. Second, you may increase the load torque adding on the motor to look what happens. Maybe, The resolution of both torque sensor and the measured torque by instaSPIN are not enough for such low torque. Th calculation torque in instaSPIN is the electromagnetic torque that should be higher than load torque.
  • Thanks for the suggestions.

    Perhaps that is a clue?  Using lab02c I get significantly different values than I would expect for this motor.  See below:

    #define USER_MOTOR_Rs                   (1.4908825475)
    #define USER_MOTOR_Ls_d                 (0.00240109308)
    #define USER_MOTOR_Ls_q                 (0.00240109308)
    #define USER_MOTOR_RATED_FLUX           (0.03570538758)

    Following "6.8 Setting PMSM Motor Parameters in user.h" from SPRUHJ1G, it looks like user.h wants phase-to-neutral (assuming 3-phase wye-connected model).  Measuring phase-to-phase with a RLC meter, gives me Rs,ph-ph=0.691 Ohm, and Ls,ph-ph=0.834 mH, converting to phase-to-neutral should result in Rs,ph-ne=0.346 Ohm and Ls,ph-ph=0.417 mH, way different than the Lab02c measured values.

    In any case, I can use those values in Lab04 and the torque measurement is still ~0.025 Nm instead of the 0.120 Nm measured.  I increased my load to 0.322 Nm and InstaSPIN is still reporting ~5x low at 0.066 Nm.  It appears to me that the resolution is sufficient since the Torque value appears off by a constant factor.

    Do you have any other ideas?

  • Per the specification of your motor, the identified parameters should be very close between lab02b and lab02c. Could you please ensure the motor run well on this kit?
    Could you please check the Id, Iq, gTorque_Flux_Iq_pu_to_Nm_sf and gTorque_Ls_Id_Iq_pu_to_Nm_sf for the torque calculation?
    Why did you change USER_VOLTAGE_FILTER_POLE_Hz in user.h? Is there any other change on the board except the shunt resistor?
  • Just wanted to check in and see if there is any update from your side, I haven’t heard from you for a week, so I’m assuming you were able to resolve your issue. Please let me know if you have any questions. We would like to close this thread if no any further questions. Thanks
  • Sorry for the delay, I have been busy with other work and have just returned to this.  I will try to answer your questions and add more details.

    Could you please ensure the motor run well on this kit?

    I have been unable to get either Lab02a or Lab02c to correctly identify my motor parameters.  Both labs appear to exhibit the same behaviour.

    Starting at the beginning:

    1. EST_State_RoverL: the motor hums at ~300 Hz ~0.35° mechanical peak-to-peak.  Is there anything I should monitor here?

    2. EST_State_Rs: the software is unable to estimate Rs_Ohm correctly.  It is reporting ~1.5 Ohm, when the correct parameter should be ~0.5 Ohm according to my calculations in my previous post.

    3. EST_State_RampUp: the motor ramps up OK and runs at 600 rpm.

    4. EST_State_RatedFlux: the motor "flutters" at ~38 Hz ~650 rpm peak-to-peak (ouch!).  The rated flux value is estimated correctly as far as I can tell.

    5. EST_State_Ls: the motor "flutters" at ~32 Hz ~1000 rpm peak-to-peak (ouch!).  The Ls values are incorrectly estimated, ~2mH instead of ~0.5mH.

    If I reduce the PWM frequency or increase the current during the characterization the software drives the motor very poorly and loud noises are emit, so my choice of PWM frequency and currents may be marginal.  I am using 45 kHz PWM and my choice of currents are in my first post.

    See attached capture of angular velocity (mechanical):

    Could you please check the Id, Iq, gTorque_Flux_Iq_pu_to_Nm_sf and gTorque_Ls_Id_Iq_pu_to_Nm_sf for the torque calculation?

    I will get to this later.

    Why did you change USER_VOLTAGE_FILTER_POLE_Hz in user.h? Is there any other change on the board except the shunt resistor?

    The phase voltage filter poles capacitors (C67, C68, C69) were reduced from 100nF to 68nF to operate at higher RPM.  Perhaps this is unnecessary?  I can change them back if you think that would help.

  • You should have to run lab02b or lab02c well to identify the exact motor parameters, the torque is calculated per the motor parameters. The motor can't run smoothly to achieve a good performance, even to calculate the correct torque if the motor parameters are not right for InstaSPIN-FOC.

    You might set USER_MOTOR_RES_EST_CURRENT, USER_MOTOR_IND_EST_CURRENT, USER_MOTOR_MAX_CURRENT, and USER_MOTOR_FLUX_EST_FREQ_Hz based on your motor specification. You may refer to Chapter 4 (4.6.9/10/11/12) of InstaSPIN user’s guide (SPRUHJ1G) to set these parameters for identification.
  • As you suggested, I read Chapter 4 and 6 (troubleshooting) of SPRUHJ1G.

    For my motor, testing with USER_RES_EST_CURRENT < 0.10 is insufficient to rotate the motor.  I have tested USER_RES_EST_CURRENT values between 0.10 and 1.00 and they produce reproducible Rs estimation in the range of 1.4-1.5 Ohms.

    I tested with the rotor mechanically locked and free to rotate to see if there was any difference.  No differences; the results are reproducible.

    I tested with USER_R_OVER_L_EST_FREQ_Hz at 100 Hz, 300 Hz (default), and 600 Hz (just to try it).  At 100 Hz and 600 Hz, the estimated Rs is slightly higher at 1.6 Ohms.

    Following the instructions in 6.8.1.2, I measure the phase-to-phase stator resistance with my LCR meter and get 0.691 Ohm, so USER_MOTOR_Rs SHOULD be 0.3455 Ohm.

    Do you have any more suggestions?

  • Right, the identified Rs should be 0.3455.

    You'd better use lab02c to identify the motor parameters, and set much higher USER_MOTOR_RES_EST_CURRENT and USER_MOTOR_MAX_CURRENT to identify the motor phase resistance first, and set right USER_MOTOR_IND_EST_CURRENT and USER_MOTOR_FLUX_EST_FREQ_Hz to spin the motor smoothly to identify the inductance and flux. You don't need change USER_R_OVER_L_EST_FREQ_Hz for most motors, it seems like the value(300) is ok for your motor.

    Make sure USER_ADC_FULL_SCALE_CURRENT_A and USER_CURRENT_SF are set properly based on the h/w board, please check iqFullScaleCurrent_A and current_sf in gUserParams.

    The torque should be calculated correctly if the motor parameters are right, especially the Flux.