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.

LAUNCHXL-F28069M: Can I control a PMSM motor at very low speed (below 1RPM) using InstaSPIN (FOC+MOTION)?

Part Number: LAUNCHXL-F28069M
Other Parts Discussed in Thread: 2MTR-DYNO

Dear InstaSPIN team,

I'm having a challenge in motion control that is controlling a PMSM motor at very low speed (< 1RPM; namely 0.3RPM). I knew and used InstaSPIN-FOC to control a ACIM motor in a project but in that project I was only run the motor at above 5Hz. Recently I have been using InstaSPIN-MOTION or SpinTAC-MOTION to control a PMSM motor in a camera tracking system. However, I could not control the motor to operate below 10 RPM. I'm using PMSM motors that is purchased from TI () which attached an encoder with the resolution of 1000 PPR (or 4000 counts per revolution).

However, I read in brochures and documents from TI in which said that InstaSPIN-FOC and InstaSPIN-MOTION can control almost motors in a wide range of speed, from 0.01 RPM to 10,000 RPM) depending on the type of motor. Namely:

a) On page 26 of the document, SPRUHJ1F, wrote "FAST provide reliable angle tracking which converges within one electrical cycle of the applied waveform, and can track at less than 1Hz frequency (depending on quality and resolution of analog sensing)..."

b) On page43, section 1.2.3.2 "Video Camera" of the SPRUDJ1F document wrote "High-end security and conference room cameras operate at very low speeds (eg: 0.1 rpm) and require accurate and smooth position control to pan, tilt, and zoom. The motors that drive these cameras are difficult to tune for low speed, and they usually require a minimum of four tuning sets. However, InstaSPIN-MOTION was applied to a high-precision security camera driven by a 2 pole BLDC motor with a magnetic encoder. InstaSPIN-MOTION was able to control both velocity and position using a single tuning parameter that was effective across the entire operating range..."

So that according to the above "advertisement", I think using InstaSPIN-MOTION to control my motor at very low speed is applicable, but in fact, I could not reach to below 10 rpm threshold for some reason. I have two minds in the capability of InstaSPIN-MOTION.

I would like to receive any advance to resolve this issue from your team.

PS: I tried to control my motor based on Project_Lab12 with LaunchPad-F28069M-XL.

Thank you very much,

Mr. Tran

  • Hi,

    Is there anyone who have been controlled PMSM motor at a very low speed (<1 RPM)?

    Please share your experience or give me an advice for the above issue.

    Thank you very much!
  • Mr Tran,

    Tran Binh Duong said:
    I tried to control my motor based on Project_Lab12 with LaunchPad-F28069M-XL.

    When using this lab, did you first run lab 12a to estimate the system inertia?

    Also what is the bandwidth that you set for the SpinTAC Velocity Controller?

    The minimum resolvable speed for the Teknic motor when running at 1kHz speed control loop is 15RPM (1/4000 counts * 60 sec/min * 1/0.001sec), so you may need to adjust filtering in SpinTAC Position Convert in order to get accurate speed readings that low from that motor/encoder combination.

    Tran Binh Duong said:
    InstaSPIN-MOTION was applied to a high-precision security camera driven by a 2 pole BLDC motor with a magnetic encoder.

    In this system we were doing position control which due to the 2nd control loop is easier to get spinning at these low speeds. 

    You might want to try using lab 13e which simulates velocity control while in position mode.

  • Dear Mr. Adam Reynolds,

    I'm very thankful for your reply to my issue and I think you are the most suitable person to answer me in this question because you are the Solution Architect of SpinTAC-MOTION.

    I'd like to feedback your questions as following:

    1. I ran Lab12a to identify the motor inertia.

    2. The bandwidth that I set for the velocity control loop in Lab12b is 65 rad/s

    3. As your suggestion, it means I MUST increase or decrease the cut-off frequency (being 8000.0) of the filter in the command:

    // setup the ENC module

    ENC_setup(endHandle, 1, USER_MOTOR_NUM_POLE_PAIRS, USER_MOTOR_ENCODER_LINES, 0, USER_IQ_FULL_SCALE_FREQ_Hz, USER_ISR_FREQ_Hz, 8000.0);

    4. Should I increase or decrease the sampling frequency of Velocity control loop from 1kHz to get the better accuracy at low-speed range?

    5. In your camera application, how many encoder resolutions did you use to get a perfect control efficiency at very low speed (below 1 RPM, even to 0.1 RPM)?

    Thank you for your advice.

  • Tran Binh Duong said:
    As your suggestion, it means I MUST increase or decrease the cut-off frequency (being 8000.0) of the filter in the command:

    That frequency isn't used to calculate the feedback speed.  Look for the function: STPOSCONV_setLowPassFilterTime_tick in spintac_velocity.h and modify that filter setting.

    Tran Binh Duong said:
    4. Should I increase or decrease the sampling frequency of Velocity control loop from 1kHz to get the better accuracy at low-speed range?

    I think you would need to increase the sampling frequency and increase the filter frequency in order to have better low speed operation.

    Tran Binh Duong said:
    5. In your camera application, how many encoder resolutions did you use to get a perfect control efficiency at very low speed (below 1 RPM, even to 0.1 RPM)?

    They were using a magnetic encoder with 1024 pulses per revolution (so only marginally more than the teknic you are using).  They key difference is that this camera application was not velocity control.  It was position control.  

    I recommend that you try using lab 13e in order to meet your speed requirements.

  • Dear Mr. Adam Reynolds,

    Thank you for the so quickly answer from you. I will follow your guides and feedback the result as soon as possible.

    One more question today, what is the bandwidth that your team set for Velocity or Position control loop in your camera project?

    Have a nice day to you!

  • Dear Mr. Adam Reynolds,

    I have just finished of testing the ability of position control of SpinTAC Position Move based on Lab13e as you suggested. The result is amazing!

    I confirm that the motor is controlled at a very low speed, namely 0.1 RPM, when I used SpinTAC Postion Move instead of SpinTAC Velocity Move with settings in Lab13e.

    But I have a question that I want to involve your help to understand deeply about the the fantastic feature of SpinTAC Postion Move, that why I feel that the torque that is genered by the motor in case of using SpinTAC Position Move is higher than in the case of using SpinTAC Velocity Move; although in both case these controller will provide the reference current (IqRef) for the inner FOC loop?

    In other words, why is the control stiffness of SpinTAC Postion Move when running in velocity mode better in comparison with SpinTAC Velocity Move's stiffness?

    Thank your for sharing your knowledge.

  • Tran Binh Duong said:
    why I feel that the torque that is genered by the motor in case of using SpinTAC Position Move is higher than in the cased of using SpinTAC Velocity Move

    The total torque generated won't be higher, but the torque will come on much quicker since in position control there are now two control loops (Position & Speed) instead of just Speed.  This means when there a deflection in the position of the rotor, the position loop will command a higher speed and the speed loop will command more torque, instead of waiting for the rotor deflection to result in speed error before correcting.

  • Dear Mr. Adam Reynolds,

    Thank you so much for your clear explanation. Because I don't know the inside structure of SpinTAC Position Control, so I thought that it only includes a single position loop. After reading your sharing and making a study on ADRC controller for Position Control, I understood the efficiency of Active Disturbance Rejection Control (ADRC) due to LineStream Technologies provide in SpinTAC Suite. That's amazing!

    However, when trying with SpinTAC Position Move/Control with Velocity mode I came up with a question, that is: Because we can use SpinTAC Position Move+Control to control Velocity of motors efficiently, so whether we need SpinTAC Velocity Move+Control anymore or not?

    Besides I want to ask me one more question to close this topic: What is the relationship between the parameters gMotorVars.MaxAccel_krpmps & gMotorVars.MaxDecel_krpmps between the accelerated time (Tacc_sec) and decelerated time (Tdec_sec) that my engineers usually setup for commercial motor drivers? In other words, I want to configure Tacc & Tdec before running a motion.

    Best regards,

  • Tran Binh Duong said:
    Because we can use SpinTAC Position Move+Control to control Velocity of motors efficiently, so whether we need SpinTAC Velocity Move+Control anymore or not?

    SpinTAC Velocity Control works really well for systems that don't need to run at such low speeds with low encoder resolutions.  So I think your application has some special requirements where it could work but it would be slightly tricky to get totally dialed in.

    Tran Binh Duong said:
    What is the relationship between the parameters gMotorVars.MaxAccel_krpmps & gMotorVars.MaxDecel_krpmps between the accelerated time (Tacc_sec) and decelerated time (Tdec_sec) that my engineers usually setup for commercial motor drivers?

    In SpinTAC Position Move, the acceleration and deceleration are specified as krpm/s instead of time.  This is because of the relative position movements of SpinTAC Position Move and the constraint-based nature of the profile generation.  Your engineers will need to convert from the meaning Tacc you expect into these different units.  Should be straight forward given the velocity limit and the time.

    In SpinTAC Position Move running in velocity mode (like lab 13e), only the acceleration limit is used even when decreasing the speed.  This is done to be more aligned with SpinTAC Velocity Move and to simplify the API.

  • Thanks Mr. Adam Reynolds for all your answers!