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.

TMS320F28069F: Speed and Current issue, Active braking?

Part Number: TMS320F28069F
Other Parts Discussed in Thread: BOOSTXL-DRV8301

Hi,

i am having some issues again. Attached I will give some System-info and my user.h

1. I can't reach the maximum Speed of the motor. When I use a RC-Controller the Motor accelerates the vehicle to 24km/H(700RPM). My application, using the BOOSTXL-DRV8301, only reaches 18km/h.(~550RPM). I think the Motor has enough power to do 24km/h but maybe there is wrong setting in my software?

2. Current issues. I tuned my BOOSTXL--DRV8301. I change the SHUNT-Resistors to 5mOhm to detect a higher current. We are cooling the MOSFets to prevent Overheating. I Changed the following Values in the user_j1.h

#define USER_ADC_FULL_SCALE_CURRENT_A        (66.0)   ( 33A positive to 33A negative can be detectet right?)

#define USER_IQ_FULL_SCALE_CURRENT_A         (50.0)  (Here i am not sure if this mins -25A to 25A or -50A to 50A ?  )

When i apply a high-currrent on low speed the Motor doesn't accelerate. It seems to move for- and backwards and brakes the vehicle. It seems like i have current detection issue or any overcurrent-lockout?

3. I want to use active Braking. That means, that i want to brake motor by using power and NOT generating power. How can I do this? I realized it with a negative Iq_ref AND negative Id_ref when i was playing a bit with the values.  Would this be a safe way? Is there a better way to user Power to break the Motor. But as the Kinetik Energy has to go anywhere, does this result in a lot of heat?

Sorry fory this amount of questions :D

Thanks in Advance

Best Regards

Sebastian

Motor: 30poles,730RPM max, 15A max, 12NM max  DC-BUS Voltage is 24V

Application: I am usind a Speed-Controller, where the User is changing the output-limits of the Speed-PID. The Speed-Pid is allways set to a maximum Speed.  In fact its a Speed-limited Torque-Control. Also i am using flystart with a minimum Speeed of 50RPM. When User neither demands Torque nor negative Torque, the Iq_ref is 0.0 .

User.h:

#define USER_IQ_FULL_SCALE_FREQ_Hz        (500)   //720RPM*30poles /120=180

#define USER_IQ_FULL_SCALE_VOLTAGE_V      (24.0)   //  21V to 25,2V possible...problem?

#define USER_ADC_FULL_SCALE_VOLTAGE_V       (26.314)      // 26.314 boostxldrv8301_revB voltage scaling

#define USER_IQ_FULL_SCALE_CURRENT_A         (50.0) // Changd Current shunt

#define USER_ADC_FULL_SCALE_CURRENT_A        (66.0)  // Changed Current *** to 5mOhm

#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   I_A_offset    (0.8336265683)
#define   I_B_offset    (0.8330016136)
#define   I_C_offset    (0.8242590427)

#define   V_A_offset    (0.4892043471)
#define   V_B_offset    (0.4888140559)
#define   V_C_offset    (0.4878702164)

#define USER_PWM_FREQ_kHz                (60.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_MAX_VS_MAG_PU        (0.5)    // Set to 0.5 if a current reconstruction technique is not used.  Look at the module svgen_current in lab10a-x for more info.

#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  (15)   // 15 Typical to match PWM, ex: 15KHz PWM, controller, and current loop, 1KHz speed loop

#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK   (15)   // 15 Typical to match PWM, ex: 10KHz controller & current loop, 1KHz speed loop, 1 KHz Trajectory

#define USER_MAX_NEGATIVE_ID_REF_CURRENT_A     (-0.5 * USER_MOTOR_MAX_CURRENT)   // -0.5 * USER_MOTOR_MAX_CURRENT Example, adjust to meet safety needs of your motor

#define USER_R_OVER_L_EST_FREQ_Hz (100)               // 300 Default

#define USER_ZEROSPEEDLIMIT   (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)     // 0.002 pu, 1-5 Hz typical; Hz = USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz


#define USER_FORCE_ANGLE_FREQ_Hz   (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz)      // 1.0 Typical force angle start-up speed

#define USER_VOLTAGE_FILTER_POLE_Hz  (364.682)   // 364.682, value for boostxldrv8301_revB hardware

  • 1. Whether he input voltage of inverter is enough for the maximum speed of motor, and motor need field weakening control to run maximum speed for higher BEMF? To check whether the feedback Iq current is near the Iq reference, and gMotorVars.Vs is near USER_MAX_VS_MAG_PU.
    2. What's the low speed? Did the motor run with high load? You need to add a correct torque current for different speed with load, not a constant torque current though you are using torque control mode.
    3. There are several brake modes, you can use a force mode which turn on all 3 low side and turn off all 3 high side in the same time, this mode will have a higher current on motor phase without boost voltage on dc bus.
  • Hi Yanming, thank you for replying!

    1.I will check this, thank you. When i use field weakening do i also have to do Current reconstruction? Or do i just have to start the field weakeing module? In the lap i didn't totally aunderstand if i have to change the USER_MAX_VS_MAG_PU when doing field weakening.

    2.Sorry I don't really understand what you mean? If you mean if there isn't enough torque-> NO. It more seems like the Controller "looses" rotor position or something because its to much torque. On lower IQ-ref it works fine. Also when i try to reproduce the Situation the Issue doesn't occur everytime.

    3.Yes i already implemented that. But when i change to this Braking-strategy i can't find a way to to a "smoot transition". I thought about to turn off all 3 high side Mosfets and apply Duty-Cycle to the low-Side Fets to Controll this braking strategy. Would this work? I am affraid of doing unwanted voltage- or current-boosts when i control the low-side fets asynchronously to the rotor ?
  • Hi,
    1. Yes gMotorVars.VS is = USER_MAX_VS_MAG_PU=0.5 so i need overmodulation+field weakening?

    2.Ok i found the Issue and its totally weird. My #define USER_IQ_FULL_SCALE_CURRENT_A (50.0) is 50. When i accelerate the motor on low speed and High torque the Current ramps up until 25A RMS. Means the Current peak is nearly 35A. That is too much for the ADC and it can't measure the Current anymore.
    NOW THE FUN ISSUE: After this happens my RS is calculated wrong... it changed from a too low value to a too high value until i reboot the Controller...where could this come from?