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.

PMSM control problem with load test by TMS320F28054F

Other Parts Discussed in Thread: MOTORWARE

Hi,

    I use the 28054F to control a 3.5kw  sensorless PMSM, based on lab5b in motorware 13.

   motor para:

           rated voltage :300VDC,  rated current :14ADC, rated toque :5.5Nm,rated speed :7000rpm.

1.    No-load, the motor can  run  from 0~8000rpm;

2.    Underload, in1000rpm, the motor only  can  undertake 4.0N.m. When I increase  the torque , the speed will  decrease ,and  the phase current will directly goto the  USER_Maxcurret.

3.     the controller is  designed based on  TI's HV+PFC kit.

        we can  run  the lab2b smoothly. however the motor  identifed is 0.16ohms (less than  the real  0.24ohms).

4.     when  I user  lab5a to debug  the program,  the current can realize  the close loop .In a certain load of 4.2Nm, increase the Iq_ref, motor  will  increase  the speed . when  the Iq_ref  goes to a  bigger value (22A), the speed will  stay 800rpm. Increase the Iq_ref  to 24A, still  the phase current can goto  24A,but the speed will directly decrease .

5.     I tried to adjust  the PI of  speed loop, it  can  help  with load condition ,but  it still  can't  realize the full load  and  full  speed .

6.     It's very  strange that  If I decrease  50% of  Iab (the input of EST_run()), the motor can easily run  from 0~5000rpm, and 0~5.5Nm. howerever during 6000~7000rpm, the situation  dosen't improve.

       So,please help me analyze what problem it  can  be ? and below is my  user.h file. some lines  added which dosen't exsit in the orginal file  is  not  releavent to the control .

       best regards

   8311.user.h

  • what might be happening is that something could be off with the current and/or voltage sense circuit. Is it possible to share this circuit with me? I am concerned about having so much current range (154.88 Amps) for a motor ID of 2 Amps. Is it possible to have a better ADC current sense resolution? Maybe more gain to your current sensor?

    I would like to double check the ADC values so please share your current sense and voltage sense circuit.

    Also, change these two values as this is critical for startup:

    #define USER_ZEROSPEEDLIMIT (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)
    #define USER_FORCE_ANGLE_FREQ_Hz (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz)

    -Jorge

  • Hi, Jorge

    First ,thanks for your reply.

    1.  the motor pahse current  runs from -35A ~35A. so I choose current sense from -77A to 77A。(FullADC =154A) .

    2. the startup preformance now is ok, in a certain load , motor can  start up ,and increase to some  speed , then it will  vibrate .

        That means startup is ok , and  in some  speed ,it  can't  undertake that much load .(not  exceed the full  load )

    3.  below is the ADC sense circuit ,BTW, current and voltage sense goes to AFE port of 28054F,(fixed gain  of  3) ,so the input range to DSP is 0~1.1V.and the         V_ref  of ADC circuit is 0.55V. The bus voltage sense goes to normal ADC port,so in the program ,I multiply 3 for the bus sense value.

    4.  I watch the expression in CCS6.0. the current and voltage ADC bias is  correct .

    5. In motor ID process, I watch the TECH SCOPE, current value is almost the same with the vaule input in USER.H file. The whole progress is similar to the progress  in UserGuide File.(SPRUHJ1F, Chapter 6.5)

       thanks again,  any  suggestion is much appreciated.ECCU_20150917.pdf

  • I don't see anything wrong in the schematics. A few suggestions though:

    1. Could you put a filtering capacitor to all of the current feedback inputs? There is already an output resistance of 56 Ohms, I would suggest a 2.8nF capacitor, so that it has a cutoff frequency of around 1 MHz.

    2. If possible, and this would require modifications to your schematic, please avoid using PGA inputs if the PGA itself won't be used. Especially for the current sense, since these signals are chopped with a PWM, so their slew rate is critical. then the current feedback circuits would have to be changed, so that it uses a value center around 1.65V, and you will have a better signal to noise ratio as opposed to using a 0.55 reference.

    -Jorge

  •  thanks  to your reply .Jorge

    1.  in the schematics , arouding clamping element U10, I already put a 3.3nF to every current feedback inputs.

    2.  I tried to ignore the PGA port and put the current signal to the normal ADC port, but the situation didn't improve.

    3.  I was confused about the motor ID process,  the identified Rs(0.16) is less than the real Rs(0.25). I think that's maybe the reason why I can't take full load.

        Attached is my scope of the whole ID process, and ADC bias scope.
        below is the para. I set in the user.h file.  

               #define USER_MOTOR_RES_EST_CURRENT (2.0) 
               #define USER_MOTOR_IND_EST_CURRENT (-1.0) 
       
               #define USER_IQ_FULL_SCALE_CURRENT_A (80.0) 
               #define USER_ADC_FULL_SCALE_CURRENT_A (154.88) 
     
               #define USER_IQ_FULL_SCALE_VOLTAGE_V (450.0)
               #define USER_ADC_FULL_SCALE_VOLTAGE_V (437.86) 
      
       I am curious about the Rs ID process. The real DC current of U phase is exactly 2.0A which I set in the user.h file. 
      So, what else parameter does the Rs calculating process need in the program?  and what can be wrong to cause the Rs not correct in the theory?
       thanks for your patience ,and any suggestion is much appreciate.

     

  • What value do you get if you measure the phase to phase resistance with a multimeter? Make sure the motor is completely disconnected from the inverter.

    Other parameters that can affect accuracy of the identified Rs are:

    • current controller gains. You might want to make them more aggressive.
    • More current, to get more bits into the ADC. If this is a +/- 35 A motor, try higher current, like 5 Amps, or even 10 Amps and see if there is any difference.

    The multimeter test usually tells you the true resistance from phase to phase, as opposed to what a motor manufacturer might tell you.

    -Jorge

  • Hi, Jorge

     1. the true resistance is the value I measure by digital micro-ohmmeter, (the multimeter's measurement  accuracy is  only +/- 0.1ohm)

     2. I tried with more current ,the result is the same .

     3. In my  opinion , the basic principle is R= U / I .

         so does the voltage measurement  matter for the  Rs identified not corrent ? 

    4. BTW,below is  the two picture  during the experiment ,one is the normal current scope ,the other is the current  sope when the control is abnormal .

         Is this phenomenon caused by PI coefficients not suitable ,and the whole  system  not stable ? 

        Thanks again for your patience ,Jorge. That's so nice to have someone to share the ideas and opinions.And,you already helped me a lot .

        (the scope describes the phase current during the process of  increasing load   )

      

  • Yes tuned down the current controller gains so you don't see those oscillations. In fact, I wouldn't change the current controller gains at all, I would leave them unchanged from the default values that do R/L calculation

    You can still measure the resistance by your self, with a normal voltage power supply. Get two motor windings, and pass a fixed voltage, say, 0.5V, and measure the current going through the motor with a current probe. Then divide input voltage / Current, and that would be 2Rs, so divide that over 2 and that's Rs.

    Looking at the currents you sent during motor ID, it seems like Rs recalibration does work ok.

    Yes voltage feedback is very important in InstaSPIN during motor ID and also during motor running. And yes, voltage feedback is used during Rs identification

    During motor ID, could you confirm that the motor actually rotates when doing flux and Ls identification? so after Rs identification, is the 2 A enough to ramp up the motor in open loop to do flux and Ls identification? Please confirm.

    It is also possible that your duty cycle is too high, and that the time to sample the currents is too small, so you might need to run a lab that handles overmodulation. Please try lab 11a of MW version 15. that lab does not use motor ID, but hopefully with supplying a voltage and current you can confirm that the resistance identified by InstaSPIN is the correct one.

    Another possibility is that the inductance is not correct. Usually this is apparent in the output of the Id controller. So please send me screenshots of values of Ui of the Id controller as it gets close to being unstable. The value should always be around zero (assuming Id reference is kept as zero).

    -Jorge

  • Hi Jorge

     1. I found the reason why I can't get a correct Rs value.

         I measured  3 phase and DC_bus voltages and take thease values directly to the PGA ports of 28054F, (Not as the controlCARD, get a 1/3 prescalar first ) ,

         And I calculated the USER_VOLTAGE_FILTER_POLE_Hz without concerning the tranformation .(that's should be a wrong filter pole )

         When I put the voltage signal to normal ADC ports , I get the right Rs value .

        (hopefully that will help someone else who uses Instaspin FOC)

    2. Now I get the right Rs value and  the Flux_VpHz value(I did measure the VpHz variable ,it's the same as the identified value).

         howerver , the load situation  doesn't improve ,and I'm still try to found the reason .

         Now, my voltage sampling circuit  is directly  goto the normal ADC ports. Because my spared  ADC ports are connecting the ground, so I don't have another 3 ports  to measure the phase current. Now I decide to design another PCB board without using the PGA ports.

      (BTW, in the datesheets, the PGA needs 23 ACQPS(too  long ), and what's the PGA‘s slew rate ? I'm trying to ingore the external Amps ,and just using the PGA in the present circuit board.)

    3. below is the screenshots of the values of Spd Id Iq Vdq, however it's the value when the system is unstable and the motor is stopped . I will do more tests  tomorrow .

           best regards  

           Arrow

  • I am glad you solved the Rs issue. Yes, using PGAs needs a long time to sample the signal, so when possible, for current measurements use the ADC inputs directly where no PGAs are present.

    I have a question on the Kp values, why are they so high? 58? According to my calculations, if you use the specified voltage, the Kp values of the current controllers should be in the 1.0 or 2.0 range.

    Also, looking at Ui of the Id controller, it seems like you need to update your inductance value. Please try different values of Ls, so 10% higher, 10% lower, and see if it makes a difference when controlling the motor. Specifically try to replicate the same conditions of load and speed, and look at Ui. This value needs to be around zero. Right now it shows 0.2.

    -Jorge

  • Hi Jorge The original value of KP is not 58. It's around 1.0. The value changed to 58 when the controller went wrong. And yes ,the ID controller didn't run properly. In empty load,the output Ui is always around 0.while increasing the load, the Ui increases too.I'think although the Id still equals 0,the position FAST estimates is now different from the actual angle.And not all the Iq in the FAST estimator provides torque, and the real is not around 0 ,too.So, this time the controller's efficiency is less than the controller whose Id equal to 0 actually . I tried to change the Ls value, sorry for it not helpful. In my eyes, when taking load, the angle estimated is no longer the right one. I'm confused why the angle is not correct when the current and voltage are correct in it's value. Is the phase delay of current sample? Or the voltage sample? The motor' parameters are correct. Best regards
  • Hi, Jorge

    Glad to tell you that I found the reason why I can't take full load .

    My PMSM is a salient motor , TI's program is Id=0, and it can't uitilize the actual torque of the motor just by Iq control , I take a 35 degree advanecd angle, it now can run with the full load till 7000rpm. (I choose to set Id = -0.7*Iq_ref ).   //  ( tan(35°)=0.7

    Howerer, I want to start a motor with nearly full load .I must use the reluctance torque which is genarated by Id & Iq together .

    If I just set Id=-0.7*Iq_ref, where Iq_ref = CTRL_getSpd_out_pu(handle);

    It  can't  start smoothly , and the start performance is even worse than 'Id=0' algorithm.

    Do you have any suggestion for the motor start for salient motor ? or  how I should control Id when start a motor with nealy full load ?

    best regards 

    Arrow