📄 start.c
字号:
#include "Cpu.h"
#include "Events.h"
#include "Start.h"
#include "ADC1.h"
extern int sina[180];
extern unsigned int sector;
extern bool updown;
extern int cnt;
extern int cnt2spdadj;
extern int ktemp;
extern int ktempmax;
extern int k;
extern double numf;
extern double numfmax;
extern double numn;
extern int num;
static unsigned int numtemp; /* just for calculate */
extern bool clzloop;
extern bool tabset;
extern int cnt2tabstop;
extern bool tabstop;
extern int table[360];
extern int theta;
extern int Vbus;
extern int ktempchg;
extern int isalfa;
extern int isbeta;
extern int isalfae;
extern int isbetae;
extern int Ia;
extern int Ib;
extern int alfa;
extern int vsalfa;
extern int vsbeta;
extern int ualfa; /* Q6 */
extern int ubeta; /* Q6 */
extern int esalfa; /* Q6 alfa axis back EMF */
extern int esbeta; /* Q6 beta axis back EMF */
extern int zalfa; /* Q6 alfa axis sliding control */
extern int zbeta; /* Q6 beta axis sliding control */
extern int a;
extern int gujun;
extern int numtt;
extern int k1;
extern int thetae1;
extern int aa,ab,ac,ad,e;
void Start(void)
{
int temp16;
int temp17;
long int temp32;
unsigned int t1; /* time for vector start */
unsigned int t2; /* time for vector end */
unsigned int large; /* large pwmvalue */
unsigned int middle; /* middle pwmvalue */
unsigned int small; /* small pwmvalue */
int temp=28378; /* Q14 represent 1.732 */
/* calculat the length of vector start(t1) and vector end(t2) in each sector */
temp32=(L_mult(temp,sina[90-numtemp]))>>16; /* Q14 */
temp16=(int)temp32-(sina[numtemp]>>1); /* Q14 */
temp17=800;
temp32=(L_mult(temp16,temp17))>>11; /* Q4 */
temp16=(int)temp32; /* Q4 */
temp32=(L_mult(temp16,k))>>20; /* Q16>>21,if Q15>>20 k=temp32=Q0 origin>>19(for k=Q14) */
t1=(unsigned int)(temp32);
temp32=(L_mult(sina[numtemp],temp17))>>11; /* Q4 */
temp16=(int)temp32; /* Q4 */
temp32=(L_mult(temp16,k))>>20; /* Q16>>21,if Q15>>20 k=Q16 temp32=Q0 origin>>19(for k=Q14) */
t2=(unsigned int)(temp32);
/* calculate each pwmvalue */
large=t1+t2;
if((sector==1) || (sector==3) || (sector==5))
middle=t2;
else
middle=t1;
small=0;
/* set pwmvalue to each channel according to the sector information */
switch(sector)
{
case(1): /* ABC: order from large to small */
{
setReg16(PWM_PWMVAL0, large);
setReg16(PWM_PWMVAL2, middle);
setReg16(PWM_PWMVAL4, small);
PWM_Load();
break;
}
case(2): /* BAC */
{
setReg16(PWM_PWMVAL0, middle);
setReg16(PWM_PWMVAL2, large);
setReg16(PWM_PWMVAL4, small);
PWM_Load();
break;
}
case(3): /* BCA */
{
setReg16(PWM_PWMVAL0, small);
setReg16(PWM_PWMVAL2, large);
setReg16(PWM_PWMVAL4, middle);
PWM_Load();
break;
}
case(4): /* CBA */
{
setReg16(PWM_PWMVAL0, small);
setReg16(PWM_PWMVAL2, middle);
setReg16(PWM_PWMVAL4, large);
PWM_Load();
break;
}
case(5): /* CAB */
{
setReg16(PWM_PWMVAL0, middle);
setReg16(PWM_PWMVAL2, small);
setReg16(PWM_PWMVAL4, large);
PWM_Load();
break;
}
case(6): /* ACB */
{
setReg16(PWM_PWMVAL0, large);
setReg16(PWM_PWMVAL2, small);
setReg16(PWM_PWMVAL4, middle);
PWM_Load();
break;
}
}
/* change adjust frequency,rotate direction,speed */
if(cnt>=cnt2spdadj)
{
cnt=0;
switch(updown)
{
case(0):
{
if(ktemp>-ktempmax)
ktemp-=ktempchg;
if(numf>-numfmax)
numf-=0.0028; // 0.0014
break;
}
case(1):
{
if(ktemp<ktempmax)
ktemp+=ktempchg;
if(numf<numfmax)
numf+=0.0028; // 0.0014
break;
}
}
k=ktemp; // Q15
if(ktemp<0)
k=-ktemp; // Q15
}
/* change the run status */
cnt++;
if(clzloop==0)
{
numn+=numf;
/* set the numn between 0 and 360 */
if(numn>=360) numn-=360;
else if(numn<0) numn+=360;
num=(int)(numn);
}
else
{
k=k1;
num=thetae1;
}
/* set the table */
if((tabset==1) && (tabstop==0))
{
table[num]=gujun;
cnt2tabstop++;
}
/* count to stop setting the table */
if(cnt2tabstop>=360)
{
tabstop=1;
cnt2tabstop=360;
}
/* determine the sector */
if(num<=60)
{
sector=1; numtemp=(unsigned int)(num);
}
else if(num<=120)
{
sector=2; numtemp=(unsigned int)(num)-60;
}
else if(num<=180)
{
sector=3; numtemp=(unsigned int)(num)-120;
}
else if(num<=240)
{
sector=4; numtemp=(unsigned int)(num)-180;
}
else if(num<=300)
{
sector=5; numtemp=(unsigned int)(num)-240;
}
else
{
sector=6; numtemp=(unsigned int)(num)-300;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -