function [CMPA,CMPB,CMPC] = SVPWM(u)

Va = u(1);
Vb = u(2);
Vc = u(3);
Ts = u(4);
PRD = u(5);


%% 60°坐标变换

Vg = 2/3 * (Va - Vb);
Vh = 2/3 * (Vb - Vc);

% 进行标幺化
Vdc = 700;
Vg = Vg/(2*Vdc/3);
Vh = Vh/(2*Vdc/3);

%% 判断扇区、 其他扇区与第1扇区的映射关系

if(Vh>=0 && Vg>=0)
    Sec = 1;
    Vgg = Vg;
    Vhh = Vh;
elseif(Vh>=0 && Vg+Vh>=0)
    Sec = 2;
    Vhh = Vg + Vh;   % 注意第2、4、6扇区 的起始矢量顺序,与第1扇区的区别
    Vgg = -Vg;
elseif(Vh>=0 && Vg+Vh<=0)
    Sec = 3;
    Vgg = Vh;
    Vhh = -Vg - Vh;
elseif(Vg<=0 && Vh<=0)
    Sec = 4;
    Vhh = -Vg;
    Vgg = -Vh;
elseif(Vg>=0 && Vg+Vh<=0)
    Sec = 5;
    Vgg = -Vg - Vh;
    Vhh = Vg;
else
    Sec = 6;
    Vhh = -Vh;
    Vgg = Vg + Vh;
end


%% 计算 T0、T1、T2矢量的作用时间
T1 = Vgg;    % 这里本来应该乘以 Ts,但是在下面计算CL时,又要除以Ts,
T2 = Vhh;    % 因此,可以同时省去。
T0 = 1- T1 - T2;

if (T0 < 0)
    Tsum = T1 + T2;
    T1 = T1/Tsum;
    T2 = T2/Tsum;
    T0 = 0;
end
    
TL = 0.25 * T0;
TM = TL + 0.5 * T1;
TH = TM + 0.5 * T2;

CL = TL * PRD * 2;
CM = TM * PRD * 2;
CH = TH * PRD * 2;


%% 根据扇区,确定a、b、c三相CMP寄存器的值。

switch Sec
    case 1
        CMPA = CL;
        CMPB = CM;
        CMPC = CH;
    case 2
        CMPA = CM;
        CMPB = CL;
        CMPC = CH;
    case 3
        CMPA = CH;
        CMPB = CL;
        CMPC = CM;
    case 4
        CMPA = CH;
        CMPB = CM;
        CMPC = CL;
    case 5
        CMPA = CM;
        CMPB = CH;
        CMPC = CL;
    case 6
        CMPA = CL;
        CMPB = CH;
        CMPC = CM;
    otherwise 
        CMPA = CL;  % 不会进入这个分支,但是matlab要求必须有 otherwise
        CMPB = CH;
        CMPC = CM;    
end