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.

TMS320F280049C: Controller fails to start motor at higher acceleration values

Part Number: TMS320F280049C

I am using code based on MotorControl SDK v3.00.01.00 and a custom motor drive assembly. This is proven hardware/software that has worked successfully with several motors connected to fan and dyno load types.

I am now trying to use the controller with a motor connected to a pump load and I’m seeing issues at startup. When commanded to start and accelerate to a fixed speed, the motor does not spin, instead the shaft oscillates (moves +/- 5-10deg repeatedly with a period of 1-2s). This issue doesn't occur every time I enable the controller; it is affected by the values for acceleration and the speed gains. This same problem occurs when using two different motors and the same pump. Both motors were ID’d without a load and tested on a dyno before attaching them to the pump. There were no startup/acceleration issues with either motor at no load or when loaded using the dyno. The issue only occurs when the motor is paired with the pump. The pump has been tested with other sensored motor controllers and is functioning correctly (ie no start up issues).

Here is how acceleration values affect the issue. At low acceleration values, 400 or less there are no startup issues, but as the acceleration is increased above 400, this problem occurs more frequently.

Adjusting the controller speed loop gains also affects how frequently this issue occurs. For example, if the gains are tuned differently, I can operate at higher acceleration rates than 400 without seeing the startup error. But I cannot find a set of tuned gains that will work at the desired acceleration rate. I'm thinking there may be other parameters that affect how the startup process occurs that may need to be modified for this type of load.

Here’s my question:

  1. Is there something in the startup sequence that I can adjust in the code to assist with this problem or something that needs to be changed because of the type of load a pump presents on the motor?

Thanks.

  • You can try to add a process to start the motor with a low acceleration and then change the acceleration to a high value after the motor run up to a speed.

  • Ok thanks. We already planned to do this if we couldn't fix the problem another way.

    spruhj1i - InstaSPIN-FOC and InstaSPIN-MOTION User's Guide (Rev. I) does discuss the situation I'm encountering in Section 14. Also, in section 11, viscous damping is mentioned as something most of the control loop analysis assumes is not present. I would assume the presence of viscous damping in this system is affecting the PI values I'm using. A few more questions.

    1. Is there anything else we can adjust that affects how quickly we are able to execute the forced angle function at startup so that we lock in to the angle faster?

    2. Do you have any additional resourced about tuning for the of load a pump presents to the motor?

  • 1. Is there anything else we can adjust that affects how quickly we are able to execute the forced angle function at startup so that we lock in to the angle faster?

    Yes,enabling force angle and Rs re-caculation as mentioned in the user's guide.

    2. Do you have any additional resourced about tuning for the of load a pump presents to the motor?

    No. That could be an engineering topic. You have to tune the PI controllers according to your application system.

  • I'm assuming that was a typo. Just to be clear, for the fastest startup, the user guide says to enable forced angle and disable Rs recalibration, not to enable both. Here's what's in the document. 

    ver H, p. 527

    14.5.1 Fastest Motor Startup with Full Load without Motor Alignment Considerations
    The considerations discussed in the previous sections also apply to this mode of operation:
    • Load valid offsets and disable offset recalibration; described in Section 14.5.1.1.
    • Load valid Rs and disable Rs recalibration; described in Section 14.5.1.2
    • Enable forced angle; Section 14.4.1.1.
    • Tune speed controller to avoid motor stall; described in Section 14.2.1.4.
    • Tune voltage feedback circuit; described in Section 14.2.1.5.

    I am doing everything the guide suggests which is why I'm reaching out to you for further support. I'm trying to determine if I'm running into a fundamental limit with how the algorithm is implemented or if it truly is just a gain setting issue. The fact that the system is stable during operation and can accelerate/decelerate with proper dynamic performance, and maintain speed without issue once it starts, makes me think it's not the gains but rather something that's occurs at startup. I suppose it's possible that the initial conditions of the system might require vastly different gains to get moving and then the gains could be changed.

  • As mentioned above, it's better to select a right acceleration to start run the motor to a speed like 10~20Hz, and then you can set the acceleration  to the value you want. Enabling Rs recalculation is for start the motor with heavy/full load, not for start the motor quickly. 

  • It seems the Rs-recalculation is different than Rs-recalibration. As I found out open loop does not close above 1Hz when Rs-recalculation is enabled, it has to be disable at some speed Hz before and after runSVM(). I'm wondering if ESMO would give better slow speed observation motor under load.

    I tried to enable ESMO but ROM symbols are not in SDK4.01 or header include needs to be added to the project. May need to add _ESMO_ symbol in project properties for it to work. Seemingly also have to disable the EST_run (FAST estimator) to use ESMO.

    Update: I had also imported ESMO folder into project, set include paths but ESMO_run command did not resolve. Supposedly x49c ROM embedded estimator has ESMO functions, Enhanced Sliding Mode Observer. Monitoring unloaded startup events (small 6 pole SPM) there often several ± hertz cycles prior to Lock Angle flag clearing. Was expecting FAST algorithm was modified and renamed ESMO, the most obvious thing to do. To me redesign would be odd step and not keep consistent name structures already defined SDK4.01(FOC) and earlier x68-x69 MCU SDK migrations. The one advantage of DM-ESMO being CLARKE 3 shunt inputs used ADC PPB, post processing blocks.    

    The ESMO code has completely different structure does not keep consistent with Symbols SDK 4.01 and earlier. Using FAST estimator versus easily switching to ESMO in ROM will take few modifications.

    Seemingly UVMCSDK modification would require hal.c (x25-MCU) copy/paste GPIO's from SDK4.01 (x49) to test ESMO/FAST observers build level 4. It might even be able to somehow merge (reference build) DM-ESMO project or create userParam symbols for portability backwards and forwards. Perhaps SDK4.01(FOC) could use a tune up, add ESMO mode for motor startup and allow switch to FAST mode > 5-10Hz is reached. Dual modulation methods are encouraged in several SVM articles.  

    /* Initialize ESMO slider */
    halHandle = ESMO_init(&hal, sizeof(hal));

    //
    // run the FAST or ESMO estimator, try switching on the fly
    //
    //EST_run(estHandle, &estInputData, &estOutputData);
    ESMO_run(estHandle, &(adcData.dcBus_V), &(pwmData.Vabc_pu), &(Idq_in_A.value));

  • Yes. Rs-recalculation is done offline without running the motor when it's at standstill. Rs-recalibration is done online during the motor is spinning.

  • Rs-recalibration is done online during the motor is spinning.

    Trouble being they renamed the calibration estimator function making function seem like recalculation. There is no recalibration call to the FAST estimator that I could ever find. The call name is different from the function name described Instaspin user guide. Hope was ESMO would be more robust and faster for loaded starts. The RS online was hit or miss and required 60-80 seconds to complete at times.

     EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine); 

  • The name of these functions are different. You may to the InstaSPIN-FOC and InstaSPIN-MOTION User's Guide for more details about these functions.

  • I'm not using the Rs online calculation function. We are also not performing any additional optional functions at startup that would delay the startup process (ie its performing startup as quickly as possible to best of my knowledge). A couple other observations. During previous testing, we used the same controller with a different motor that was connected to a much different load type (low inertia, low to no load at startup). With this motor, we were able to enter very large values for the acceleration parameter without issue. We did this during step change testing to determine response time, to confirm our speed gain calculations/values and to make sure the controller was limiting the peak current to the correct value during rapid acceleration.  The acceleration values we used during this testing were several magnitudes higher than what we need to use in the system that has the startup issue. There were never any issues at startup with the low inertia/load, even with extremely large acceleration values.

    The high inertia/load system is behaving as if the trajectory outpaces the startup algorithm and once that occurs, it can never find the rotor position. Because it doesn't happen every time, it may depend on the random starting position of the rotor. The suggestion of slowing the acceleration at startup and then changing to another acceleration seems to support this theory because it gives the controller time to lock into the position and then once known it can accelerate faster without stalling. We have modified the system to allow this to be tested. I won't be able to test it until next week. I plan to leave the tread open until I do. 

    I still think that there could be another parameter that could be adjusted to accomplish the same thing as a two step acceleration. Have you ever tried to adjust the Fe_min frequency? A motor with a lower number of pole pairs and high inertia/load at startup may require something other than 1Hz. I will also plan to test this.

  • It's not related to the Fe_min frequency and any FAST parameters, it's just a typical engineering question. As you mentioned above, the small inertia motor can support very high acceleration, you have to use a smaller acceleration for the large inertia motor. Or you may try to tune the speed PI controller to achieve a right acceleration.

    Having an incorrect Rs value (especially a value higher than the actual Rs) will make the start-up behave poorly. You might refer to chapter 14 "Managing Full Load at Startup, Low-Speed and Speed Reversal" in InstaSPIN-FOC and InstaSPIN-MOTION User's Guide

    https://www.ti.com/lit/spruhj1

    1. Enable stator Rs recalibration before startup
    2. Enable forced angle
    3. Make sure that the current ADC offset is calibrated.