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.

TMS320F2800135: Sensorless FOC - behavior of estimator under locked-rotor condition

Part Number: TMS320F2800135

Tool/software:

I have developed a sensorless FOC controller around the F2800135. When the motor output shaft is held stationary after a successful start and a torque is commanded, the rotor shudders and pulsates in place. Upon closer inspection, the estimator angle continues to advance even though the rotor is held stationary which results in the pulsating torque production. The behavior I would like is a constant and steady torque (even when commanding a high torque) after the motor starts spinning but then the rotor is held stationary. So, the estimator angle would need to stop advancing. This can be after the initial start, after the estimator has had a chance to find the rotor angle. I have read Chapter 14: "Managing Full Load at Startup, Low-Speed, and Speed Reversal" of the InstaSPIN-FOC User's Guide. I have tried setting flagEnableForceAngle = false but it does not seem to have any effect. I have followed all of the other recommendations in the document. I have tried varying "USER_M1_FREQ_NEARZEROSPEEDLIMIT_Hz", "USER_M1_FORCE_ANGLE_FREQ_Hz", "USER_M1_FORCE_ANGLE_ACCEL_Hzps" and was able to change the frequency of the pulsating but have not been able to achieve the desired behavior.

1) Is there a way to achieve the desired behavior without the addition of angle position sensors?

2) If the answer to (1) is NO, and hall sensors are added to the HW, would the correct implementation be to manually set the estimator angle according to the hall sensor outputs only when speed drops below some lower bound?

I have attached an image of 'motorVars_M1.angleFOC_rad' sampled at 5ms with the output shaft held stationary.

  • Hi Ken,

    Do you mean you want the motor can still output the desired torque after the shaft is held for a while? 

    Thanks,

    Jiaxin

  • Yes, I would like the motor to output high torque while stationary (locked rotor), without the angle estimate advancing. No matter what I try the estimator angle keeps advancing, causing the rotor to pulsate at some frequency like it is slipping. 

  • Hi Ken,

    Yes, this cannot be achieved through sensorless method. You will need an encoder.

    Thanks,

    Jiaxin

  • Hi Ken,

    Alternatively set RS online true to develop maximum startup torque under shaft load. C code can disable RS Online in the run time loop at a specific speed frequency. Seems prudent to release current demand when constant load speed is achieved. Typically, rotor mass forward inertia and driven mass can then maintain the load at a greater energy efficiency. 

    Regards,

        /* Set slow speed estimator Maximum cold starting torque */
        EST_setFlag_enableRsOnLine(estHandle, true);
        /* Rs ReCalibration flag state Offline still mode
         * runs motor open loop up to set trajectory Hz */
        EST_setFlag_enableRsRecalc(estHandle, false);
     

  • Hi Genatco, are you suggesting that the angle keeps advancing in stall condition because there is an error in Rs?

    Thanks.

  • Hi Ken,

    No error, just enable RS so motor has more start torque under load to arrest stalling among other settings.

    Does rotor even rotate unloaded up to trajectory speed in closed loop?

    Seemingly RS-recalc (calibration flag function) asserts prior to starting the motor, wastes time but necessary when cold or hot coil conditions exist. That is not the same as RSOnline() function. The universal motor control SDK is bit finicky if startup align/force deltas (user_mtr1.h) set to high may move rotor few degrees, vibrate up to trajectory speed (motor gets hot) rather than produce 360° synchronous angle as expected. A custom PCB phase voltage, phase current sensors, ADC inputs, GPIO's if reversed or negative versus positive amp outputs can cause similar issues.

    #define USER_MOTOR1_FORCE_DELTA_A          (0.032f)          //!A 15% ALC (0.05f)
    #define USER_MOTOR1_ALIGN_DELTA_A          (0.015f)          //!A  5% ALC (0.01f)
    #define USER_MOTOR1_FLUX_CURRENT_A         (0.225f)           //!A 0.225
    #define USER_MOTOR1_ALIGN_CURRENT_A        (0.170f)           //!A 0.170
    #define USER_MOTOR1_STARTUP_CURRENT_A      (0.310f)           //!A 0.3
    #define USER_MOTOR1_TORQUE_CURRENT_A       (0.155f)           //!A 0.25
    #define USER_MOTOR1_OVER_CURRENT_A         (1.5f)             //!A 1.5