void calu() { int i,a,b,c;
float vref1,vref2,vref3,t1,t2,t3,t4,ta,tb,tc;
for(i=0;i<200;i++)
{
ualfa=cos(INIA+i*DETA);
ubeta=sin(INIA+i*DETA);
vref1=ubeta;
vref2=(-ubeta+ualfa*1.732051)/2;
vref3=(-ubeta-ualfa*1.732051)/2;
if(vref1>0) a=1;
else a=0;
if(vref2>0) b=1;
else b=0;
if(vref3>0) c=1;
else c=0;
a=4*c+2*b+a;
x=ubeta*0.8;
y=0.8*(1.732051*ualfa+ubeta)/2;
z=0.8*(-1.732051*ualfa+ubeta)/2;
switch(a)
{ case 1 :t1=z, t2=y;break;
case 2 :t1=y, t2=-x;break;
case 3 :t1=-z, t2=x;break;
case 4 :t1=-x, t2=z;break;
case 5 :t1=x, t2=-y;break;
case 6 :t1=-y, t2=-z;break;
default : break; }
if((t1+t2)>0.5)
{t3=t1;t4=t2;
t1=t3/(t3+t4)*0.5;
t2=t4/(t3+t4)*0.5;
}
ta=(0.5-t1-t2 )/4; //占空比
tb=ta+t1/2;
tc= tb+t2/2;
if(a==1) {pwm1[i]=(int)(tb*7500); pwm2[i]=(int)(ta*7500); pwm3[i]=(int)(tc*7500);}
if(a==2) {pwm1[i]=(int)(ta*7500); pwm2[i]=(int)(tc*7500); pwm3[i]=(int)(tb*7500);}
if(a==3) {pwm1[i]=(int)(ta*7500); pwm2[i]=(int)(tb*7500); pwm3[i]=(int)(tc*7500);}
if(a==4) {pwm1[i]=(int)(tc*7500); pwm2[i]=(int)(tb*7500); pwm3[i]=(int)(ta*7500);}
if(a==5) {pwm1[i]=(int)(tc*7500); pwm2[i]=(int)(ta*7500); pwm3[i]=(int)(tb*7500);}
if(a==6) {pwm1[i]=(int)(tb*7500); pwm2[i]=(int)(tc*7500); pwm3[i]=(int)(ta*7500);}
} }
mangui zhang:
这个不好说对错吧 实现方法有多种
写法也不同 建议你在理解原理的基础上再看看
是否符合你的要求