TMS320F2800157: Support Required – Encoder Feedback Motor Fails Under Load on F2800157 at Loading condition in vehicle

Part Number: TMS320F2800157
Other Parts Discussed in Thread: DRV8353

Tool/software:

Hello Team,

We are currently working on the F2800157 with two types of feedback (Hall sensor and Encoder) for the same motor specification:

  • Motor Specification: 4 kW, Rated Current 110A

During vehicle-level validation, the motor with Hall feedback works as expected (both under no-load and loaded conditions) and runs smoothly in the current loop.

However, with Encoder feedback, we are facing the following issue:

1. Vehicle No-Load Condition

  • Motor runs normally in the current loop.

  • State transitions are correct:
    Motor IDLE → Motor Seek Position → Motor Alignment → Motor OL State → Motor CL Running → Motor Control Running.

2. Vehicle Load Condition

  • Motor does not start; it only vibrates.

  • State transition is incorrect:
    Motor IDLE → jumps directly to → Motor OL State (continuous vibration without running).

Debug Steps Tried

We increased the startup current as below, but the issue persists:

#define USER_MOTOR1_FLUX_CURRENT_A (12.0)
#define USER_MOTOR1_ALIGN_CURRENT_A (32.0)
#define USER_MOTOR1_STARTUP_CURRENT_A (35.0)

Observations

  • Hall feedback: Motor runs fine under both load and no-load.

  • Encoder feedback: Motor runs fine under no-load, but fails only under load.

Request

Could you please guide us on possible causes?

  • Are we missing any initial setup related to encoder alignment, seek position, or index pulse usage?

  • Is there any recommended tuning (flux current, alignment time, startup profile) specific to encoder feedback under load?

Your inputs will help us close this issue.

No Load Condition:

Load condition:

Thanks & Regards
C. Prabhakaran

  • Hi,

    Thanks for the detailed explanation of your question. What is the driver board and the spec?

    Sincerely,

    Jiaxin

  • Hello  ,

    We are using a customized board with the TR218X/TR21867 gate driver. Initially, the code was developed with the DRV8353 and LaunchPad F2800157.

    The code has now been migrated to the customized board with the TR218X/TR21867 gate driver.

    Attached video showing the motor behavior, where it starts moving but stops during the alignment process.(Alway at Motor_OL_Start).

    But during no loading motor running perfectly fine.but if we apply small load by hand motor stopping  at alignment process itself.

    We have also attached the user_mtr.h calibration values. These values work perfectly with the Hall sensor motor.

    #elif (USER_MOTOR1 == Drone9616_110KV_48V)
    // Refer to the description of the following parameters for Teknic_M2310PLN04K
    #define USER_MOTOR1_TYPE MOTOR_TYPE_PM
    #define USER_MOTOR1_NUM_POLE_PAIRS (5)
    #define USER_MOTOR1_Rr_Ohm (NULL)
    #define USER_MOTOR1_Rs_Ohm (0.0130890859)/*M2*/
    #define USER_MOTOR1_Ls_d_H (0.0000491670144f)/*M2*/
    #define USER_MOTOR1_Ls_q_H (0.0000491670144f)/*M2*/
    #define USER_MOTOR1_RATED_FLUX_VpHz (0.0990757346f)/*M2*/
    #define USER_MOTOR1_MAGNETIZING_CURRENT_A (NULL)
    #define USER_MOTOR1_RES_EST_CURRENT_A (33.5)
    #define USER_MOTOR1_IND_EST_CURRENT_A (-33.5)
    #define USER_MOTOR1_MAX_CURRENT_A (500.0)
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz (100.0)
    #define USER_MOTOR1_NUM_ENC_SLOTS (512)
    #define USER_MOTOR1_INERTIA_Kgm2 (8.81285e-04)

    // Ls compensation coefficient
    #define USER_MOTOR1_Ls_d_COMP_COEF (0.15f) // 0.0f~0.5f
    #define USER_MOTOR1_Ls_q_COMP_COEF (0.35f) // 0.0f~0.5f
    #define USER_MOTOR1_Ls_MIN_NUM_COEF (0.55f) // 0.5f~1.0f

    #define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz (5.0f) // Hz

    #define USER_MOTOR1_RATED_VOLTAGE_V (48.0)/**/
    #define USER_MOTOR1_FREQ_MIN_Hz (10.0) // Hz
    #define USER_MOTOR1_FREQ_MAX_Hz (390.0)///**/ (1200.0) // Hz

    #define USER_MOTOR1_FREQ_LOW_Hz (10.0) // Hz
    #define USER_MOTOR1_FREQ_HIGH_Hz (600.0) // Hz
    #define USER_MOTOR1_VOLT_MIN_V (2.0) // Volt
    #define USER_MOTOR1_VOLT_MAX_V (72.0) // Volt

    #define USER_MOTOR1_FORCE_DELTA_A (0.0316) //(0.05)
    #define USER_MOTOR1_ALIGN_DELTA_A (0.0172) //(0.01)
    #define USER_MOTOR1_FLUX_CURRENT_A (9.0) //(0.5)
    #define USER_MOTOR1_ALIGN_CURRENT_A (32.0) //(3.5)//34
    #define USER_MOTOR1_STARTUP_CURRENT_A (16.0)//(14.0) //(14.0)//(8.0)//(20.0) //
    #define USER_MOTOR1_TORQUE_CURRENT_A (3.0) // A
    #define USER_MOTOR1_OVER_CURRENT_A (500.0)//(500)

    #define USER_MOTOR1_SPEED_START_Hz (35.0)
    #define USER_MOTOR1_SPEED_FORCE_Hz (35.0)
    #define USER_MOTOR1_ACCEL_START_Hzps (15.0)
    #define USER_MOTOR1_ACCEL_MAX_Hzps (5.0)

    #define USER_MOTOR1_SPEED_FS_Hz (8.0) //(3.0)
    #define USER_MOTOR1_SPEED_CL_Hz (20.0)

    // only for encoder
    #define USER_MOTOR1_ENC_POS_MAX (USER_MOTOR1_NUM_ENC_SLOTS * 4 - 1)
    #define USER_MOTOR1_ENC_POS_OFFSET (750)

    // Only for eSMO
    #define USER_MOTOR1_KSLIDE_MAX (1.00f) // 2.0f
    #define USER_MOTOR1_KSLIDE_MIN (0.05f)

    #define USER_MOTOR1_PLL_KP_MAX (15.0f)
    #define USER_MOTOR1_PLL_KP_MIN (2.0f)
    #define USER_MOTOR1_PLL_KP_SF (20.0f)
    #define USER_MOTOR1_PLL_KI (2.8125E-06f) // Not used, reserve

    #define USER_MOTOR1_BEMF_THRESHOLD (0.325039566f) //0.308939566f //(0.05f)
    #define USER_MOTOR1_BEMF_KSLF_FC_SF (2.0f) // 1.0f
    #define USER_MOTOR1_THETA_OFFSET_SF (1.0f) // 2.5f
    #define USER_MOTOR1_SPEED_LPF_FC_Hz (200.0f) // 100.0f

    // for IS-BLDC
    #define USER_MOTOR1_RAMP_START_Hz (5.0f)
    #define USER_MOTOR1_RAMP_END_Hz (30.0f)
    #define USER_MOTOR1_RAMP_DELAY (1)

    #define USER_MOTOR1_ISBLDC_INT_MAX (0.015f)
    #define USER_MOTOR1_ISBLDC_INT_MIN (0.010f)

    // for Rs online calibration
    #define USER_MOTOR1_RSONLINE_WAIT_TIME (60000U) // 5min/300s at 5ms base
    #define USER_MOTOR1_RSONLINE_WORK_TIME (24000U) //2min/120s at 5ms base

    // Current and Speed PI Regulators Tuning Coefficient
    #define USER_MOTOR1_GAIN_SPEED_LOW_Hz (60.0f)
    #define USER_MOTOR1_GAIN_SPEED_HIGH_Hz (150.0f)

    #define USER_MOTOR1_KP_SPD_START_SF (1.5f) // 0.1~100.0
    #define USER_MOTOR1_KI_SPD_START_SF (1.5f) // 0.1~10.0

    #define USER_MOTOR1_KP_SPD_LOW_SF (2.0f) // 0.1~100.0
    #define USER_MOTOR1_KI_SPD_LOW_SF (2.0f) // 0.1~10.0

    #define USER_MOTOR1_KP_SPD_HIGH_SF (1.0f) // 0.1~100.0
    #define USER_MOTOR1_KI_SPD_HIGH_SF (1.0f) // 0.1~10.0

    #define USER_MOTOR1_GAIN_IQ_LOW_A (2.0f)
    #define USER_MOTOR1_GAIN_IQ_HIGH_A (6.0f)

    #define USER_MOTOR1_KP_IQ_START_SF (1.5f) // 0.1~10.0
    #define USER_MOTOR1_KI_IQ_START_SF (1.5f) // 0.1~10.0

    #define USER_MOTOR1_KP_IQ_LOW_SF (2.5f)//(2.0f) // 0.1~10.0
    #define USER_MOTOR1_KI_IQ_LOW_SF (0.5f)//(2.0f) // 0.1~10.0

    #define USER_MOTOR1_KP_IQ_HIGH_SF (1.0f) // 0.1~10.0
    #define USER_MOTOR1_KI_IQ_HIGH_SF (0.5f)//(1.0f) // 0.1~10.0

    #define USER_MOTOR1_KP_ID_SF (1.0f) // 0.1~10.0
    #define USER_MOTOR1_KI_ID_SF (1.0f) // 0.1~10.0

    The issue is observed only with encoder feedback, specifically under load conditions.

    Most of the time, the vehicle moves slightly backward (few degree)and moving forward always when throttle input is applied.

    Please help us to proceed this further.

    Thanks

    Regards

    Prabhakaran

  • Hi Prabhakaran,

    The OL start fault usually occurs when the startup current is given too much. Please make sure the current sensing hardware and the TR218X/TR21867 gate driver can withstand the startup current you set in software.

    #define USER_MOTOR1_FLUX_CURRENT_A (12.0)
    #define USER_MOTOR1_ALIGN_CURRENT_A (32.0)
    #define USER_MOTOR1_STARTUP_CURRENT_A (35.0)

    Thanks,

    Jiaxin