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.

Speeds motor greater than 127999 rpm with InstaSpin

Hello to everybody,

I'm currently working with a PMSM (1 pole pair, sensorless) with the InstaSpin solution. It works really good until 127999 rpm, but I must achieve 200000 rpm.

The Universal GUI reports the following UserErrorCode: "USER_ErrorCode_iqFullScaleFreq_Hz_High"  because my user.h parameters fulfill the following condition:

(USER_IQ_FULL_SCALE_FREQ_Hz >= (128.0 * (float_t)USER_MOTOR_NUM_POLE_PAIRS * 1000.0 / 60.0)

I understand that this is because the IQ24 speed variable overflows.

Is there any way to reach more than 127999 rpm? In case not, Is there any other solution that will allow achieve the final speed I need?

Thank you all very much!

Juan Pablo

  • Juan,
    200 KRPM with 1 pp is 3333.3 Hz
    That is extremely high

    You would need to run the current control and estimator at least at 30 KHz. That is pretty much taking up all of the 90 MHz processor of F2806xF. You would also need to increase the voltage filter frequency to > 850 Hz

    You will also run into issues with current sampling with a motor built for these speeds and trying to update at these rates. We have done this before by adding in-line inductors when using shunts or by using in-phase current sensors. But it is still a big challenge.

    Lastly yes you have the IQ24 overflow issue. To correct this you would have to update into KRPM.

    Typically for applications this high of speed they tend to use something else besides FOC. You want to limit the amount of sampling and processing in each control loop. A simple BLDC technique or a form of hysteresis control may be more appropriate.
  • Chris, thank you for your answer!

    Currently we are working with this configuration (as you mentioned):

    PWM_Freq = 30kHz
    ADC_Sampling = 30kHz
    Current_Control = 30kHz
    FAST = 30kHz
    Speed = 1kHz
    Trajectory = 1kHz
    90 MHz processor (F28069M)
    Voltage filter frequency = 1424.17 Hz

    Until now it is working well, but the problem is than the GUI does not allows to enter a speed greater than 127999 rpm or -128000 rpm. I have tried, as you said, updating the gMotorVars.SpeedRef_krpm (proj_lab05f) to 200 krpm but the sw automatically update the value to -56 krpm

    I'm not sure of understanding very well when you say "Lastly yes you have the IQ24 overflow issue. To correct this you would have to update into KRPM." Where do I have to update this value?

    Have you ever reached this mechanical speed? or did you reach 3kHz but with a motor with more than 1 pp so the mechanical speed is lower in order not to overflow the variable?

    Thank you very much for your assistance!
  • we ran a motor at 4.3 KHz
    see this post

    e2e.ti.com/.../1254418
  • Chris, thank you for your answer!

    I will take it into account in case I have to add an external inductor to our motor.


    I have found a practical solution to my problem, that I want to share and see if there might be any problem that I don't know.

    My problem was that I must reach more than 127999 rpm, and neither the GUI or the gMotorVars allows to do that. So I "have cheated" to the SW, I have configured the user.h with a 2 pole pair motor (my motor is 1 pp) so the control thinks that it is going to certain speed but in the reality, goes at double speed.

    So, if I configure the GUI at 100 krpm (2 pp), the motor is running at 200 krpm (1pp), of course I have taken into account all the frequencies limitation, PWM freq, voltage filter pole, etc.

    I also have to double the inertia and friction variables. And I must be carefull that if I configure an 10000 rpm/s acceleration into the GUI, the real acceleration that I will obtain is 20000 rpm/s.

    I have tested this at low speeds and it works fine.

    Do you think I will have any problem using this "cheat" trick?


    Thank you very much for your assistance.
  • that's quite clever and should work fine