Other Parts Discussed in Thread: DRV8323, MOTORWARE, DRV8305, DRV8301
Good morning,
We're trying to identify the motor inductance and flux for a high speed, low inductance motor (~50krpm, ~32uH) using the 28027F controller and DRV8323 driver, but are finding errors in the inductances identified from testing. Note that we're used motorware successfully in the past for another project a few years ago, so I have some familiarity with the different projects and control methodology.
The resistances appear to be in the right order of magnitude, but the lab2c project is identifying motor inductances on the order of 1.e-7 to 1e-13, which I know are too low for my motor. I set the motor max current to 3A in my user.h as a safety, even though the current rating for the motor is much greater than this limit. Could this be influencing the results? I've tried increasing the USER_MOTOR_FLUX_EST_FREQ_Hz as high as 400Hz but haven't been able to consistently identify the proper inductances. Here are my numbers
Rs |
0.055392083 |
0.056029175 |
0.070272058 |
Lsd |
3.25E-07 |
1.35E-07 |
3.60E-13 |
Lsq |
3.25E-07 |
1.35E-07 |
3.60E-13 |
FluxVpHz |
0.0021851 |
0.00221093 |
0.002165522 |
Here are the critical values from my user.h file
#define USER_IQ_FULL_SCALE_FREQ_Hz (1666.7) // Hz =(RPM * Poles) / 120
#define USER_IQ_FULL_SCALE_VOLTAGE_V (14.4)
#define USER_ADC_FULL_SCALE_VOLTAGE_V (22.538)
#define USER_VOLTAGE_SF ((float_t)((USER_ADC_FULL_SCALE_VOLTAGE_V)/(USER_IQ_FULL_SCALE_VOLTAGE_V)))
#define USER_IQ_FULL_SCALE_CURRENT_A (20.625)
#define USER_ADC_FULL_SCALE_CURRENT_A (41.25) //
#define USER_CURRENT_SF ((float_t)((USER_ADC_FULL_SCALE_CURRENT_A)/(USER_IQ_FULL_SCALE_CURRENT_A)))
#define USER_NUM_CURRENT_SENSORS (3) // 3 Preferred setting for best performance across full speed range, allows for 100% duty cycle
#define USER_NUM_VOLTAGE_SENSORS (3) // 3 Required
#define USER_SYSTEM_FREQ_MHz (90.0)
#define USER_PWM_FREQ_kHz (45.0) //30.0 Example, 8.0 - 30.0 KHz typical; 45-80 KHz may be required for very low inductance, high speed motors
#define USER_NUM_PWM_TICKS_PER_ISR_TICK (3)
#define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) // 2 Example, controller clock rate (CTRL) runs at PWM / 2; ex 30 KHz PWM, 15 KHz control
#define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1) // 1 Typical, Forward FOC current controller (Iq/Id/IPARK/SVPWM) runs at same rate as CTRL.
#define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) // 1 Typical, FAST estimator runs at same rate as CTRL;
#define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (5) // 15 Typical to match PWM, ex: 15KHz PWM, controller, and current loop, 1KHz speed loop
#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (5) // 15 Typical to match PWM, ex: 10KHz controller & current loop, 1KHz speed loop, 1 KHz Trajectory
#define USER_R_OVER_L_EST_FREQ_Hz (300) // 300 Default for high speed motors, can reduce to 100 if RoverL from Motor ID is < 2000
#define USER_VOLTAGE_FILTER_POLE_Hz (561.92)
Here are my motor parameters
#define USER_MOTOR_TYPE MOTOR_Type_Pm // Motor_Type_Pm (All Synchronous: BLDC, PMSM, SMPM, IPM) or Motor_Type_Induction (Asynchronous ACI)
#define USER_MOTOR_NUM_POLE_PAIRS (2) // PAIRS, not total poles. Used to calculate user RPM from rotor Hz only
#define USER_MOTOR_Rr (NULL) // Induction motors only, else NULL
#define USER_MOTOR_Rs (0.0473498) // Identified phase to neutral in a Y equivalent circuit (Ohms, float)
#define USER_MOTOR_Ls_d (32.0e-6) // For Induction, Identified average stator inductance (Henry, float)
#define USER_MOTOR_Ls_q (32.0e-6) // For Induction, Identified average stator inductance (Henry, float)
#define USER_MOTOR_RATED_FLUX (0.008) // 0.0045 Estimated from back-EMF
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL) // Identified magnetizing current for induction motors, else NULL
#define USER_MOTOR_RES_EST_CURRENT (1.5) // During Motor ID, maximum current (Amperes, float) used for Rs estimation, 10-20% rated current
#define USER_MOTOR_IND_EST_CURRENT (-1.5) // During Motor ID, maximum current (negative Amperes, float)
#define USER_MOTOR_MAX_CURRENT (3.0) // CRITICAL: Used during ID and run-time, sets a limit on the maximum current command output of the controller
#define USER_MOTOR_FLUX_EST_FREQ_Hz (200.0) // During Motor ID, maximum commanded speed (Hz, float). Should always use 5 Hz for Induction.
#define USER_MOTOR_FREQ_LOW (166) // Hz - suggested to set to 10% of rated motor frequency
#define USER_MOTOR_FREQ_HIGH (1667) // Hz - suggested to set to 100% of rated motor frequency
#define USER_MOTOR_FREQ_MAX (2000) // Hz - suggested to set to 120% of rated motor frequency
#define USER_MOTOR_VOLT_MIN (1.80) // Volt - suggested to set to 15% of rated motor voltage
#define USER_MOTOR_VOLT_MAX (12.0) // Volt - suggested to set to 100% of rated motor voltage
Please let me know if you have any suggestions for troubleshooting these errors. I've been trying many different combinations for the past week but have not yet found any success.
Best regards,
Chris