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.

TMS320F28379D: Dual axis drive Current Loop PI limiting Maximum achievable speed

Part Number: TMS320F28379D

Hi

In the dual axis drive project , the Current PI loop saturates well below the maximum speed.

In dual_axis_servo_drive.user.h, We have set the base speed to 20000 RPM, so base frequency is 666.6 Hz.

But during motor operation the Iq PI loop's out value is already 0.91, with a Maximum saturation of 0.95. The moment we hit the PI's saturation limits, the whole system becomes unstable.

Is there any way of reducing the Currents loop output so that we can attain a greater speed?

These are my FCL parameters:

  • Hi AK,

    Sorry for the delay. I see you have many prior E2E discussions with Yanming, who is currently out of office. I will try and help in his absence.

    Are you running Build Level #3 (current loop) or #4 (Speed loop) currently? Are you using a custom hardware and is your motor rated at a speed at or higher than 20000 RPM you list? Do you know if the current output of your inverter is being reached (i.e. checked phase current feedback or using a probe)?

    You could look into implementing field-weakening control if you're needing to go beyond the rated speed of your motor, at the expense of reduced torque.

    Best,

    Kevin

  • Hi Kavin,

    I am currently running the Speed Loop.(BUILD_LEVEL4).

    This is our own custom hardware, we spoke to the Motor Manufacturer and they confirmed that the motor was tested upto 16000 RPM and a 270v DC bus.

    The back emf of this Motor is 12.7Vrms/1000 RPM, so i dont see any limitation from the back emf?

    You could look into implementing field-weakening control if you're needing to go beyond the rated speed of your motor, at the expense of reduced torque.

    I see, so thats basically adding the Id current so that the speed raises above synchronous speed?Also the loss of torque in our case is not acceptable , as we expect variable load during run time operation.(Both external Positive and negative torque).

  • Hi AK,

    I'm sorry that it has taken me some time to get back to you. 

    Have you checked if your PWM duty cycle is approaching 100% with your current configuration? PWM deadband needs to be considered when approaching 0% or 100% duty. See below info from the SW project's comments as well:

    // Note that the vectorial sum of d-q PI outputs should be less than 1.0 which
    // refers to maximum duty cycle for SVGEN. Another duty cycle limiting factor
    // is current sense through shunt resistors which depends on hardware/software
    // implementation. Depending on the application requirements 3,2 or a single
    // shunt resistor can be used for current waveform reconstruction. The higher
    // number of shunt resistors allow the higher duty cycle operation and better
    // dc bus utilization. The users should adjust the PI saturation levels
    // carefully during open loop tests (i.e pi_id.Umax, pi_iq.Umax and Umins) as
    // in project manuals. Violation of this procedure yields distorted  current
    // waveforms and unstable closed loop operations that may damage the inverter.

    Best,

    Kevin

  • Hi Kavin,

    My  pi_iq.Umax and Umins iare the same as the maximum modulation index.

        pMotor->ptrFCL->pi_iq.Umax = 1.0 * pMotor->maxModIndex;
        pMotor->ptrFCL->pi_iq.Umin = -1.0 * pMotor->maxModIndex;

    So for a switching frequency of 20 KHz, The maximum modulation index comes to 0.96.

    As you can see for the Images in my previous post , pi_iq.out already reach 0.91 close to 12500 RPM , and if the speed in increased slightly to approx 13000 RPM the whole system becomes unstable and we get a system fault.

    Could you explain this point further:

    Another duty cycle limiting factor
    // is current sense through shunt resistors which depends on hardware/software
    // implementation. Depending on the application requirements 3,2 or a single
    // shunt resistor can be used for current waveform reconstruction. The higher
    // number of shunt resistors allow the higher duty cycle operation and better
    // dc bus utilization

    I don't think there is a duty cycle limitation as pi_iq.out is able to reach its boundary values.

    The current sensing in out application is done like this:

    We have a 500 uOhm shunt connected to a delta-sigma ADC(AMC1303), the digital bit stream is then filtered and converted to a analog value and given to the MCU's internal ADC.

  • Any help on this?

  • Need to set the maxModIndex to a right value according to the FOC execution time and ADC sampling time if the PWM is using immediate update mode. 

  • I though FOC execution time is already fixed?Is it same as FCL execution time? If not how do we find the actural execution time?

    //
    // FCL Computation time predetermined from library
    // tests on F2837xD
    //
    #define M1_FCL_COMPUTATION_TIME  (1.00)  //in uS

    I see that M1_FCL_COMPUTATION_TIME is used to calculate the max modulation index:

    pMotor->maxModIndex = (M1_TPWM_CARRIER -
                    (2 * M1_FCL_COMPUTATION_TIME)) / M1_TPWM_CARRIER;

    In our case the MaxModIndex is already 0.96, are you sugesting we try to increase it further?

  • I though FOC execution time is already fixed?Is it same as FCL execution time? If not how do we find the actural execution time?

    The time will de different if you added any codes in FCL or changed the ADC configuration per the current sensor.

    In our case the MaxModIndex is already 0.96, are you sugesting we try to increase it further?

    Yes. Reduce the value to have a try.

  • I checked the FCL time , it varriers betweem 1.5 to 1.7 microseconds, Checked "motorVars[0].fclLatencyInMicroSec"

    I changed M1_FCL_COMPUTATION_TIME to 1.7 us and tried, and i get the same result.

    One think i noted that at 12000 RPM the motor phase current is very small but if i increase it to about 13000 RPM the current in increased rapidly and i get a overcurrent fault.

    The phase current is still sinusoidal but the the amplitude is increased drastically at 13000 RPM. Any idea why this is happening especially when there is no load and the motor runs perfectly well at 12000 RPM?

    One more point , if i try the same in the opposite direction , i get the same result but this time i am not able to reach -12000 RPM, i get the uncontrolled increase in phase current around 10000 RPM only, any idea what is causing this issue?

  • What pole pairs is the motor? And what PWM frequency are you using? Any measured current waveform for showing this issue?

  • The number of poles are 4 (2 pole pair)

    PWM switching frequency is 20 KHz

    I have attached the current wave form of 2 phase currents:

    There is no load connected, notice that at 10000 RPM the current is very small but the moment i increase the speed to about 12000 RPM the current increases and trips my Hardware limit (Over current)

    C1(DC bus), C2(DC input current), C3(Phase U Current), C4(Phase V Current)

  • What happens if you just run a single motor? Is it possible to monitor the rotor angle with DAC or PWMDAC?

    And can you try to increase the DC bus voltage to see what happens?

  • I am running single motor only as of now. The same phenominon is observed if I run Motor A or Motor B or Motor A and B together.

    Regarding DC bus, we tried the following:

    We reduced the DC bus from 270 to 240v, Now we cannot reach 10000 RPM, Speed saturates at around 9500 RPM. If we try to give speed setpoint of 10000 RPM the same high current phenominon is observed at speed saturation.

    Are you thinking about backemf? The back emf of thos motor is 12.7Vrms/1kRPM , that roughly translates to about 200v rectified DC at 12000 RPM. Still we have 70v margin if DC bus is 270v, but we are not able to reach this speed.

  • Can you try to increase the bus voltage to see what happens if possible?

    12.7Vrms/1kRPM is the RMS voltage value. You need to use the peak voltage to check if the dc bus voltage is enough.

  • Hi Yanming, Today we tried to increase the DC bus to 300v, Now the maximum speed does increase from 10000 RPM to around 11500 RPM.

    You mentioned we need to take the peak value for back emf , by doing that at 10000 RPM we get a maximum voltage of (12.7 * sqrt(2) * 10) , approx 180v. Still there is a lot of margin, but still we are not able to reach higher speeds at 270v DC.

    Anything else we need to check?

  • You should convert the RMS to peak value for calculating the maximum running speed. The calculation speed is just for running the motor without load, the real maximum speed will be far lower than calculation speed since the output torque will need the output voltage as well.