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.

TMS320F28054M: Why is FOC contorlled motor is slower than PID controlled motor under same accel and speed.

Part Number: TMS320F28054M

Hi TI,

Under same acceleration, velocity and accuracy tolerance, why does FOC controlled motor is slower than PID controlled motor? And after 5 mins of running, motor tends to heat up.

I though FOC is more energy efficient and suppose to be faster because of higher torque capability. 

I ran the speed tests using Trapezoidal motion profile, motor heats up within 5-6 minutes and it's 15-10% slower than PID controlled motor depending on the travelling ranges.

What are causes of slower speed and waste of heat. Wrong motor parameters? Or it simply just slower with same acceleration and velocity?

How can I at least match the speed of PID controlled motor with same accuracy tolerance?

  • What is PID controlled motor?

    What is 10-15% slower mean?

    FOC uses PI controllers for controlling Speed, Iq, and Id.

    Yes, wrong motor parameters can cause heating up. So can poorly tuned PI controllers.  So can mis-matched hardware to a motor.  So can poor current sensing, especially for low inductance motors.

  • Hi Chris,

    PID stands for Proportional Integral Differential controlled motor.

    I use position control not speed control. Same target position moving back and forth, same acceleration and velocity. number of times reaching target position is always less than PID controlled motor.

    #define USER_MOTOR_TYPE                 MOTOR_Type_Pm
    #define USER_MOTOR_NUM_POLE_PAIRS       (1)
    #define USER_MOTOR_Rr                   (NULL)
    #define USER_MOTOR_Rs                   (10.51328468)//Calculated Values shown below
    #define USER_MOTOR_Ls_d                 (0.0002562359)//(0.0002625) 
    #define USER_MOTOR_Ls_q                 (0.0002562359)//(0.0002625)
    #define USER_MOTOR_RATED_FLUX           (0.02826791)//(0.02691007)
    #define USER_MOTOR_MAGNETIZING_CURRENT  (NULL)
    #define USER_MOTOR_RES_EST_CURRENT      (1.6)
    #define USER_MOTOR_IND_EST_CURRENT      (-0.2)
    #define USER_MOTOR_MAX_CURRENT          (1.617)
    #define USER_MOTOR_FLUX_EST_FREQ_Hz     (60.0)
    #define USER_MOTOR_ENCODER_LINES        (256.0)
    #define USER_MOTOR_MAX_SPEED_KRPM       (29.9)

    You mean in-accurate values of Ls_d and Ls_q can cause overheating the motor right?

    What are values of Ls_d and LS_Q would considered as low inductance? How can I get an accurate measurement?

    How about RES_EST_CURRENT? If I don't set this value as high as maximum current, I can't set the speed and acceleration to 8.94krpm with 690krpm/s, it will lost position control generating 2002 position error. I checked TI's lab manual, this value should be set around 20% of max current. But this doesn't work with my motor

  • I know what PID means.

    PID is a controller technique.
    FOC is a motor control technique, which may use PI or PID for internal control systems.

    You can't compare "PID control" to FOC. It makes no sense.

    You now mention you are doing position control, which you are calling PID. Ok.
    With InstaSPIN are you using -MOTION? With an incremental encoder? Which lab?

    You absolutely can do high performance position control with InstaSPIN-MOTION.

    Make sure you are using the right HW and SW.


    The motor parameters are used for
    - sensorelss observer (when doing position control you aren't even using the sensorless observer)
    - setting the PI gains of Iq and Id.

    Your parameters look normal.


    RES_EST_CURRENT is used for motor ID and then to do optional RsRecal. It shouldn't affect your performance unless you set it very high and use RsRecal. Then you would artificially heat your motor.
  • #define USER_SYSTEM_INERTIA             (0.00295925) //Z
    #define USER_SYSTEM_FRICTION            (0.0231788) //Z

  • Yes, I use MOTION with incremental encoder, lab 13c. I use RsRecal when motor starts up. I have to set RES_EST_CURRENT high to nearly the max current in order to make it run with high acceleration 690krpm/s or 1040krpm/s ,
    and Yes, it heats up the motor if it can't spin during the Rs re-calibration.
  • My hardware design is based on drv8312kit_revD, with software lab13c
  • I can do very accurate motion profile with ST-curve, but this motion profile is around 50% slower than Trapezoidal. I need fastest speed with same degree of accuracy, but even with Trapezoidal is still another 10-15% slower than our original PID controlled motor, not to mention it heats up my motor after 5 mins of run time. I want to figure why it's slower.

  • ST will always be slower because you are limiting the acceleration and jerk

    Trapezoidal would be fastest. You still need to set maximum acceleration settings.

    The questions you are asking are likely much more related to system differences - and not any SW abnormality - between the two systems (I am assuming your PID is a totally different set of HW). We are unlikely to be able to help you debug at this point.
  • PID controlled motor has following parameter: Vel: 6.33krpm, Accel: 690krpm/s, Position Error Tolerance: within 0.05MRev when reaching target position.
    FOC matches above parameters
    Same travel distance about: 2.5MREV back and forth
    PID can do 6.7 times per second
    FOC can only do 5.3 times per second.
    So I increased the speed of FOC, Vel to 8.94krpm and Accel to 1024krpm/s, it goes up to 5.6 times per second. Then it stops here, no matter what values of vel and accel i put it, it can't go anywher faster.

    What are the possible limitations that prevent me running my motor faster?
  • the current limitation of the EVM power supply is one thought.

    Your PID is some off the shelf servo drive I assume.

    Are these even the same motors with the same encoders?
  • You mean hardware limitations? I would disagree, I am testing the same motor and motor driver(RV8312)'s capability is well above to drive the motor properly. what could be the hardware problems that you are assuming causing it to run slower?
  • Same motor with same encoders
  • Qiang,
    It could be the current/power differences between the two motor controllers.

    that's about all I can help with from a debug perspective at this point, and I will be out of the office for some time. Please start a new thread if you want to discuss with someone else.