永发信息网

C语言编程,用数字量输出SVPWM波形,求一简单程序输出单路SVPWM波。

答案:1  悬赏:80  手机版
解决时间 2021-02-01 04:34
  • 提问者网友:孤凫
  • 2021-01-31 14:55
C语言编程,用数字量输出SVPWM波形,求一简单程序输出单路SVPWM波。
最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-01-31 15:48

void svpwm(float *ptr)

{
int A,B,C,N;
double X,Y,Z,Tx,Ty,T0,T1,Tm,Th;
if(usbeta>0)A=1;
else A=0;
if((1.732051*usalfa-usbeta)>0)B=1;
else B=0;


if((1.732051*usalfa-usbeta)>0)C=1;
else C=0;
N=A+2*B+4*C;//计算扇区
X=1.732051*usbeta*Ts/udc;
Y=(0.8660*usbeta+1.5*usalfa)*Ts/udc;
Z=(-0.8660*usbeta+1.5*usalfa)*Ts/udc;


swith(N)//各扇区工作时间
{
case 1:Tx=Y;Ty=-Z;break;
case 2:Tx=-X;Ty=Y;break;
case 3:Tx=Z;Ty=X;break;
case 4:Tx=-Z;Ty=-X;break;
case 5:Tx=X;Ty=-Y;break;
default:Tx=-Y;Ty=Z;
}
 
if((Tx+Ty)>Ts)
{
Tx=Tx*Ts/(Tx+Ty);
Ty=Ty*Ts/(Tx+Ty);
}
T0=(Ts-(Tx+Ty))/4;
T1=(Ts+Tx-Ty)/4;
Tm=(Ts-Tx+Ty)/4;
Th=(Ts+Tx+Ty)/4;
swith(N)//比较寄存器赋值
{
case 1:*ptr=Tm;*(ptr+1)=T0;*(ptr+2)=Th;break;
case 2:*ptr=T0;*(ptr+1)=Th;*(ptr+2)=Tm;break;
case 3:*ptr=T0;*(ptr+1)=T1;*(ptr+2)=Th;break;
case 4:*ptr=Th;*(ptr+1)=Tm;*(ptr+2)=T0;break;
case 5:*ptr=Th;*(ptr+1)=T0;*(ptr+2)=T1;break;
default:*ptr=T1;*(ptr+1)=Th;*(ptr+2)=T0;break;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯