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

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

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=YTy=-Zbreak

case 2:Tx=-XTy=Ybreak

case 3:Tx=ZTy=Xbreak

case 4:Tx=-ZTy=-Xbreak

case 5:Tx=XTy=-Ybreak

default:Tx=-YTy=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)=Thbreak

case 2:*ptr=T0*(ptr+1)=Th*(ptr+2)=Tmbreak

case 3:*ptr=T0*(ptr+1)=T1*(ptr+2)=Thbreak

case 4:*ptr=Th*(ptr+1)=Tm*(ptr+2)=T0break

case 5:*ptr=Th*(ptr+1)=T0*(ptr+2)=T1break

default:*ptr=T1*(ptr+1)=Th*(ptr+2)=T0break

}

}

直接用下面的代码

已经得到验证

function CMPR=svpwm(ualfa,ubeta)

global ts udc_ref

%在IF语句中出现的变量必须赋初值

persistent T1on T2on T3on t1 t2 sectorNO

if isempty(T1on)|isempty(T2on)|isempty(T3on)|isempty(t1)|isempty(t2)|isempty(sectorNO)

T1on=0

T2on=0

T3on=0

t1=0

t2=0

sectorNO=0

end

%#################################

%sectorNO 3(0 30')->1->5->4->6->2->3

%#################################

if ubeta>0

a=1

else a=0

end

if sqrt(3)*ualfa-ubeta>0

b=1

else b=0

end

if -sqrt(3)*ualfa-ubeta>0

c=1

else c=0

end

sectorNO=a+2*b+4*c

%#################################

%

%#################################

x=sqrt(3)*ubeta*ts/udc_ref

y=(1.5*ualfa+sqrt(3)/2*ubeta)*ts/udc_ref

z=(-1.5*ualfa+sqrt(3)/2*ubeta)*ts/udc_ref

%#################################

%voltage vector on time

%#################################

switch sectorNO

case 3

t1=-z

t2=x

case 1

t1=z

t2=y

case 5

t1=x

t2=-y

case 4

t1=-x

t2=z

case 6

t1=-y

t2=-z

case 2

t1=y

t2=-x

end

%#################################

%pwm timer value

%#################################

%饱和判断

if ts-t1-t2<0

t1=ts*t1/(t1+t2)

t2=ts-t1

end

ta=(ts-t1-t2)/4

tb=ta+t1/2

tc=tb+t2/2

switch sectorNO

case 3

T1on=ta

T2on=tb

T3on=tc

case 1

T1on=tb

T2on=ta

T3on=tc

case 5

T1on=tc

T2on=ta

T3on=tb

case 4

T1on=tc

T2on=tb

T3on=ta

case 6

T1on=tb

T2on=tc

T3on=ta

case 2

T1on=ta

T2on=tc

T3on=tb

end

CMPR=[T1on T2on T3on]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11911448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存