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.

Question about Controlsuite Vd/Vq & SVPWM

I'm using TMDSHVMTRPFCKIT & HVMotorCtrol+pfcKit_v2.1/HVPM_Sensored_Servo project & below SVPWM.

1. I want to know detailed explanation about below SVPWM(v4.1). How to select sector and calculate PWM duty Ta,Tb,Tc?

Ubeta, Ualpha are normalized with Real DC bus voltage? 

.

.

2. I received the answer below about calculate real Vd/Vq. What is the theoretical basis for multiplying Real DC bus voltage?

To make sure real Vd/Vq values are right, I measured U&V line-to-line voltage with multimeter at 1500RPM. Vline-to-line = 110V_rms

Then, U phase peak voltage is 110*sqrt(2)/sqrt(3) = 89.8V ( sqrt(2) used for convert from rms to peak, sqrt(3) used for convert from line-to-line to phase )

I think that Vs=sqrt(Vd^2 + Vq^2)*300(Real DC bus voltage)=103V should be the same with U phase peak*1.5 = 134.7V. (Vd = pi_id.out, Vq = pi_iq.out are PU)

But different. Was I wrong? 

I want to make sure that Real Vd/Vq values are correct.

Help me.

SVPWM

  • As your another post.
    1. The SVPWM in svgen_comm.h is based PWM with a common mode signal added to all three modulation signals of a three-phase PWM inverter. The common mode signal is made up of third harmonics of the supply frequency. The line-line output will not contain the common mode signal since the same common mode signal is added to all three phases. This svgen mode doesn't need to calculate the sector, you have to use the mode in svgen.h if you need sector. The output (Ta/Tb/Tc) is the same in both modes, which is the duty for pwm output.
    2. The Vd/Vq output from PI regulator is based on scale voltage, the real voltage need to multiply dc bus voltage, and then multiply the 0.816 if the standard svpwm mode without over modulation.
  • Thanks Yanming.
    1.Basically, HVPM_Sensored_Servo project use svgen.h like below.
    I want to know about principles of below code, not svgen_comm.h
    Looking at the code, it select sector and calculate Ta,Tb,Tc.

    #define SVGENDQ_MACRO(v)
    v.tmp1= v.Ubeta;
    v.tmp2= _IQdiv2(v.Ubeta) + (_IQmpy(_IQ(0.866),v.Ualpha));
    v.tmp3= v.tmp2 - v.tmp1;

    v.VecSector=3;
    v.VecSector=(v.tmp2> 0)?( v.VecSector-1):v.VecSector;
    v.VecSector=(v.tmp3> 0)?( v.VecSector-1):v.VecSector;
    v.VecSector=(v.tmp1< 0)?(7-v.VecSector) :v.VecSector;

    if (v.VecSector==1 || v.VecSector==4)
    { v.Ta= v.tmp2;
    v.Tb= v.tmp1-v.tmp3;
    v.Tc=-v.tmp2;
    }

    else if(v.VecSector==2 || v.VecSector==5)
    { v.Ta= v.tmp3+v.tmp2;
    v.Tb= v.tmp1;
    v.Tc=-v.tmp1;
    }

    else
    { v.Ta= v.tmp3;
    v.Tb=-v.tmp3;
    v.Tc=-(v.tmp1+v.tmp2);
    }


    2. what is 0.816?
    I want to know where Voltage scale occurs.
    In current case, ADC received -10A ~ 10A to -1 ~ 1.