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.

TMS320F28027F: how to make Dead time distortion correction

Part Number: TMS320F28027F
Other Parts Discussed in Thread: CONTROLSUITE

Hi everyone!

I am using C:\ti\controlSUITE2_DMC Rev\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Scalar

DC voltage =550VDC

Poles =2 (1500RPM)

fmin =0.1  fmid=60Hertz  fmax =120Hz

V min= 3Volt  V max =550v

Dead time is 2.5us.

at the beginning of Start motor smoothly rotate but when motor speed up  (600RPM)  motor starts to  vibrate. and in 1300RPM we have vibration .

and current of leg shunt Resistors changes between 1A to 12 A ! 

it turns out that this problem happened because of  Dead time distortion.

in year of 1997 Mr. Dave Wilson published one Application note about that ,  it is so old method ,I am wondering if  TI has any solution for this problem.

How to detect the region of  current polarity in order to -DT of +DT?

would it be possible to detect it by current leg-shunt Resistor sensors? if so How to do it . 

is there any better way to do it?

thanks for attention.
Dave.

  • BTW,I read  AN form  dear Dave Wilson around 10 years ago in some section he pointed out that we can have distortion correction by LEM sensor ,since we used the Leg-Shunt resistor 

    I could get the current wave form and subtract and add (DT/2 ) to main PWM

    which my code goes some thing like this 

      gDeadTimeCorrection.DT[AdcCnt]=(_IQtoF(gAdcData.I.value[AdcCnt])>0)? -DeadTime:DeadTime;

    by doing that I could solve my problem about %70

    but  I want my motor rotate smoothly (now I sense vibration on my motor and current will change from 1A~ 4A in every rotation) 
    I don't know how to fine low magnitude region in order to apply +(DT/2 ) or -(DT/2 ).

    does  TI have any better solution  or code to solve these problem?

    please explain more about that.

    thanks

    Dave. 

  • Sorry, there is no new solution and code for dead time compensation except the using method in controlSUIET.

    Generally, the right dead time compensation value is based on the current direction.

  • hi dear Luo
    you mentioned "using method in controlSUIET."

    Q1:what method do you mean?

    Q2: please  tell me where can I find that method?

    regards.

    Dave.

    using method in controlSUIET.
  • 1. Install  ControlSUITE https://www.ti.com/tool/controlsuite

    2. Find the example project at the folder C:\ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_eSensorles

    3. Find the code below in the project.

    dbc1.scale = _IQdiv(_IQdiv2(pwm1.Deadband), dbc1.Ith); // uncomment to tune in debug
    dbc1.Kdtc = _IQmpy(dbc1.scale, dbc1.gain); // uncomment to tune " "
    PWMwDBC_MACRO(1,2,3,pwm1,clarke1,dbc1);

  • thanks dear Luo,

    I analyze the code and I have a question

    _iq type can't be more than -127 to 127 but dbc1.scale  is more than 60000 how to solve this problem.

    _IQdiv(_IQdiv2(pwm1.Deadband), dbc1.Ith);

    _IQdiv(_IQdiv2(120), 0.001); it is supposed to be 60000 but it is 127 because of limitation !!!

    Am I right ,would you please  explain about it?

    thanks 

    Dave.

  • dbc1.Ith is an _IQ value also, it is not equal to 0.001, should be _IQ(0.001), and the pwm1.Deadband will be converted to _IQ format also, not equal to 120.