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.

TMS320F28069M: Vd/Vq Scaling for FOC and Unexpected Motor Speeds

Part Number: TMS320F28069M
Other Parts Discussed in Thread: MOTORWARE

Good afternoon,

I've modified lab01b in order to further understand my hardware and the FOC methods in motorware. I've connected an encoder to my board so that I have a direct measurement of the electric angle, and I'm now using this value for commutation in the FOC methods in lab01b. There are a few interesting observations from this test.

First, the Vd and Vq voltages do not appear to match the gAdcData.V recorded by my datalogger. Based on my configuration, Vs is 0.18376 and Vd and Vq are calculated as 0.055 and 0.0735 based on Vdq_gains of 0.3 and 0.4 (we'll revisit this in my next question), however, I'm seeing a voltage waveform amplitude of roughly 0.025 pu, which corresponds to 0.6 volts. If Vd and Vq are reported in pu based on IQ full-scale, then how come I'm seeing such a large discrepancy between Vq and measured voltages? I believe my voltage IQ and ADC scale factors are correct as I'm reading the correct 10V DC bus voltage.

Second, the motor speed is commanded at 10 kRPM (or 500Hz in electric frequency), but my period is ~163 samples @ 20kHz = 8.15ms or ~ 122Hz. You can see the period either from my electric angle in the first graph, or the two voltage waveforms in the following two graphs. I've confirmed that vs_freq.Freq = 0.408 which based on 1225Hz full-scale IQ speed, should be a commanded 500Hz. Since lab01b is driven open-loop, how can the commanded voltage waveform not match the input speed/frequency?

Third, I'm measuring the gAdcData.I as a sinusoidal waveform with a magnitude of approximately 0.25 pu, which based on 81.25 amp full-scale IQ value, should be ~20 amps. However, I'm only seeing ~1.9 A continuous on my power supply. Any suggestions as to why the measured current is not matching my supply? The first plot below shows the voltage waveform, and the following two plots show the current waveforms for phases A and B.

Lastly, I found that the lab sets the Vd voltage to _IQ(0.3) on line 100 in vs_freq.c, and I found that running this lab at 10 kRPM, it pulls 1.9 A from my supply. From my understanding of FOC, shouldn't Vd be set to 0.0 to minimize wasted energy. After I change line 100 to set Vd equal to 0.2 and then 0.0, I'm seeing only ~1 A and then 0.4 A at the command speed of 10 kRPM, a huge improvement in performance! How come Vd is fixed to IQ(0.3) in this lab?

Thank you again for your support.

Best regards,

Chris

  • 1) There is no apparent relationship between Vd/q and gAdcData.V[] unless you have passed the phase voltage (a,b,c) through Clarke and Park transform. You need to use the appropriate scaling to convert the values to per unit in order to visually compare them. In datalogger, Vd/q looks like a DC value

    2) Lab01b is just intended for low speed hardware verification. We do not claim good speed control with this lab, so we understand that you may see some discrepancy here especially at such high speeds

    3) You cannot compare the DC bus current and the motor line current like this. It makes more sense to measure the overall power consumption, but voltage/current are transformed from DC to AC for 3-phase motor drive

    4) As in item (2), we use this lab for hardware verification, so we set both Vd and Vq in this way. You are correct that in typical FOC we keep Id = 0 for PMSM motors

    I believe items (2) and (4) will also answer your questions you posted here: e2e.ti.com/.../687653
    Item (1) should answer the question posted here: e2e.ti.com/.../687655

    If it's ok with you, we will continue support through this thread only

    If you are interested in spinning the motor at such high speed, please consider moving forward to labs 4, 5, or 10 after running motor ID

    Sean
  • Good afternoon Sean,

    Thank you for the quick reply and go gators! I wasn't sure if you preferred multiple posts with single questions or one post with multiple questions. I'll continue to post all of my questions directly to this thread.

    1) I have applied the Park/Clarke transforms to my fixed Vd and Vq inputs (Vd and Vq are calculated set to 0.055 and 0.0735), and found the Vabc voltage should have an amplitude of 0.09 pu. However, this doesn't correspond to my measured voltage of roughly 0.025 pu. What are the units for the vs_freq Vd and Vq inputs? How is the commanded duty cycle determined based on the target Vabc voltages.

    2) I understand that lab01b is not for high speed control, but I there is a large discrepancy between the commanded frequency of the voltage waveform and my target frequency. Even if there is zero closed-loop performance, wouldn't you still expect the open-loop commanded frequency to match my desired input frequency? In this example, the desired/target frequency is 500Hz, but the commanded voltage frequency is ~122Hz.

    3) How should I best compare overall power consumption? My current consumption is ~1.9A at 10V or 19W, and the amplitude of my current waveform is ~20A. How should I calculate power consumption from the amplitude of my current channels?

    4) Ok thanks!

    Best regard,

    Chris

  • For lab01b, we don't use park and clarke transforms as there is no closed loop control. Vq and Vd are fed into the iPark transform, followed by SVGEN to generate the duty in a -0.5 to 0.5 scale (0.0 = 50%). This is then converted to CMPA values for the 3 phase output. I'm confused how you are reading 0.025pu for the phase voltage. Is this with respect to the DC bus? The Vd and Vq pu values don't correlate to the Vabc values here, not sure how else to help beyond that. It's not a meaningful comparison in terms of motor control

    For (2), I believe the open loop control is not able to drive the frequency to your commanded value. The efficiency is so low that the open loop control cannot reach target freq

    For (3), you will need a DC bus power analyzer and a 3-phase power analyzer tool. Although we calculate V and I sensorlessly, the value is not accurate enough to provide a true power comparison for the input and output

    Sean
  • Good morning Sean,

    Thanks again for your quick reply. This explains why I'm not seeing the expected applied voltage, as it converts the desired Vd and Vq voltage to a PWM input, and this may not match up with ADC readings (there is not closed loop feedback to ensure commanded PWM frequency matches target voltage Vd and Vq). To answer your question, I'm reading the gAdcData.V readings and plotting them as shown in the previous post. The amplitude of this signal is ~0.025 pu.

    Regarding the motor frequency, it makes sense that the commanded frequency does not match actual frequency, because the V/Hz open-loop controller is only driving a constant PWM and there is no feedback as to the actual motor speed.

    I'm going to close out this post as this answers all of my questions regarding the lab01b. I have a few questions regarding the closed-loop current control in lab01c, which I'll post separately.

    Best regards,

    Chris