📄 svpwm.zip.txt
字号:
#include "global.c"
#include "float.h"
#include "math.h"
float ualfa[200],ubeta[200];
int sector[200];
#define PI2 2*3.1415926
#define DETA PI2/200
#define INIA 3.1415926/180
#define TP 1200
#define KP 0.7
void initial()
{
IFR=0xFFFF;
IMR=0x0;
SCSR1=0x81FE;
WDCR=0xE8;
T1PR=TP;
T1CON=0x0802;
ACTRA=0x666;
COMCONA=0x9200;
EVAIMRA=0x00;
T1CNT=0x00;
EVAIFRA=0xFFFF;
MCRC=MCRC|0x7E;
WSGR=0x0000;
}
void calu()
{
int i ;
for(i=0;i<200;i++)
{
ualfa[i]=KP*cos(INIA+i*DETA);
ubeta[i]=KP*sin(INIA+i*DETA);
}
}
void SECTOR()
{
int i,a,b,c;
float vref1,vref2,vref3;
for(i=0;i<200;i++)
{
vref1=ubeta[i];
vref2=(-ubeta[i]+ualfa[i]*1.732051)/2;
vref3=(-ubeta[i]-ualfa[i]*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;
switch(a){
case1:sector[i]=1; break;
case2:sector[i]=5; break;
case3:sector[i]=0; break;
case4:sector[i]=3; break;
case5:sector[i]=2; break;
case6:sector[i]=4; break;
default: break;
}
}
}
main()
{
int anticlk[6]={0x1666,0x3666,0x2666,0x6666,0x4666,0x5666};
int i,k=0,cmp1,cmp2;
float x,y,z;
disable();
initial();
calu();
SECTOR();
while(1) {
for(i=0;i<200;i++){
ACTRA=anticlk[sector[i]];
x=ubeta[i];
y=(1.732051*ualfa[i]+ubeta[i])/2;
z=(-1.732051*ualfa[i]+ubeta[i])/2;
switch(sector[i]){
case0:cmp1=(int)(-z*TP),cmp2=(int)(x*TP); break;
case1:cmp1=(int)(y*TP),cmp2=(int)(z*TP); break;
case2:cmp1=(int)(x*TP),cmp2=(int)(-y*TP); break;
case3:cmp1=(int)(z*TP),cmp2=(int)(-x*TP); break;
case4:cmp1=(int)(-y*TP),cmp2=(int)(-z*TP); break;
case5:cmp1=(int)(-x*TP),cmp2=(int)(y*TP); break;
default: break;
}
CMPR1=cmp1;
CMPR2=cmp1+cmp2;
if((i+k)==0) T1CON=T1CON|0x040;
while(1) {
k=EVAIFRA&0x0200;
if(k==0x0200) break;
}
}
}
}
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -