⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svpwm.c

📁 用于TI公司的TMS320LF2407上的程序
💻 C
字号:
#include "2407c.h"
#include "stdlib.h"


#define F_Uout		8				/*电压空间矢量频率<50Hz*/
#define Dirt		1				/*1 or -1*/

void interrupt gptime1(void);		/*T1_Underflow_ISR*/
void interrupt PHANTOM(void);		/*假中断ISR*/
void Delay(unsigned int nDelay);	/*delay subroutine*/
extern void init_dsp(int);			/*initilization*/

/*************************Variable Definition************************************/
	int Temp1;
	int Delta_p_T1P=0;	/*每T1周期Uout转过的度数,Q14格式*/
	int VT1P;			/*参考电压*T1P,用于中间计算*/
	long Theta=0;		/*Uout角度值,Q14格式*/
	long D_360=5898240;	/*360度,Q14格式*/
	int Theta_I;		/*角度查表索引值*/
	int Sector;			/*扇区号*/
	int	SinTheta;
	int CosTheta;
	int UaT1P;
	int UbT1P;
	int	CMP_1;
	int	CMP_2;
	int	CMP_0;
	int CMPRM[3];
		
	int index[6][3]={
				0,1,2,
				1,0,2,
				1,2,0,
				2,1,0,
				2,0,1,
				0,2,1};
	
	unsigned int aaa=0;/*测试用*/
	unsigned int bbb=0;/*测试用*/
	unsigned int ccc=0;/*测试用*/
	unsigned int ddd=0;/*测试用*/
	
	int	InvrtM[6][4]={              /*逆阵表,Q14格式有符号数*/
			20066,-11585,0,23170,
			-20066,11585,20066,11585,
			0,23170,-20066,-11585,
			0,-23170,-20066,11585,
			-20066,-11585,20066,-11585,
			20066,11585,0,-23170};
	
	int sinEntry[361]={
		   0,                   	/*SIN值表,Q14格式有符号数*/
           286,572,857,1143,1428,
           1713,1997,2280,2563,2845,
           3126,3406,3686,3964,4240,
           4516, 4790,5063,5334,5604,
           5872,6138,6402,6664, 6924,
           7182,7438,7692,7943,8192,
           8438,8682,8923,9162,9397,
           9630,9860,10087,10311,10531,
           10749,10963,11174,11381,11585,
           11786,11982,12176,12365,12551,
           12733,12911,13085,13255,13421,
           13583,13741,13894,14044,14189,
           14330,14466,14598,14726,14849,
           14968,15082,15191,15296,15396,
           15491,15582,15668,15749,15826,
           15897,15964,16026,16083,16135,
           16182,16225,16262,16294,16322,
           16344,16362,16374, 16382,16384,         //90
           
           16382,16374,16362,16344,16322,
           16294,16262,16225,16182,16135,
           16083,16026,15964,15897,15826,
           15749,15668,15582,15491,15396,
           15296,15191,15082,14968,14849,
           14726,14598,14466,14330,14189,
           14044,13894,13741,13583,13421,
           13255,13085,12911,12733,12551,
           12365,12176,11982,11786,11585,
           11381,11174,10963,10749,10531,
           10311,10087,9860,9630,9397,
           9162,8923,8682,8438,8192,
           7943,7692,7438,7182,6924,
           6664,6402,6138,5872,5604,
           5334,5063,4790,4516,4240,  
           3964,3686,3406,3126,2845,
           2563,2280,1997,1713,1428,
           1143,857,572,286,0,                      //180 
                   		
           -286,-572,-857,-1143,-1428,
           -1713,-1997,-2280,-2563,-2845,
           -3126,-3406,-3686,-3964,-4240,
           -4516, -4790,-5063,-5334,-5604,
           -5872,-6138,-6402,-6664, -6924,
           -7182,-7438,-7692,-7943,-8192,
           -8438,-8682,-8923,-9162,-9397,
           -9630,-9860,-10087,-10311,-10531,
           -10749,-10963,-11174,-11381,-11585,
           -11786,-11982,-12176,-12365,-12551,
           -12733,-12911,-13085,-13255,-13421,
           -13583,-13741,-13894,-14044,-14189,
           -14330,-14466,-14598,-14726,-14849,
           -14968,-15082,-15191,-15296,-15396,
           -15491,-15582,-15668,-15749,-15826,
           -15897,-15964,-16026,-16083,-16135,
           -16182,-16225,-16262,-16294,-16322,
           -16344,-16362,-16374,-16382,-16384,            //270

           -16382,-16374,-16362,-16344,-16322,
           -16294,-16262,-16225,-16182,-16135,
           -16083,-16026,-15964,-15897,-15826,
           -15749,-15668,-15582,-15491,-15396,
           -15296,-15191,-15082,-14968,-14849,
           -14726,-14598,-14466,-14330,-14189,
           -14044,-13894,-13741,-13583,-13421,
           -13255,-13085,-12911,-12733,-12551,
           -12365,-12176,-11982,-11786,-11585,
           -11381,-11174,-10963,-10749,-10531,
           -10311,-10087,-9860,-9630,-9397,
           -9162,-8923,-8682,-8438,-8192,
           -7943,-7692,-7438,-7182,-6924,
           -6664,-6402,-6138,-5872,-5604,
           -5334,-5063,-4790,-4516,-4240,  
           -3964,-3686,-3406,-3126,-2845,
           -2563,-2280,-1997,-1713,-1428,
           -1143,-857,-572,-286,0                         //360
           };            

           
main()
{   

    init_dsp(1250);					/*初始化dsp*/
    
/**********************************主循环****************************************/
	
	while(1)
	{   
		Delta_p_T1P=Dirt*F_Uout*369;	/*Q14格式*/
//		VT1P=565*F_Uout;				/*Q5格式*/
//		VT1P=28250;
		VT1P=14250;
		    	
   	    bbb+=1;
	    
	}
}               

void interrupt gptime1(void)
{

	*EVAIFRA=0x0fff;		/*清中断标志*/
	ccc+=1;
    
/******计算角度*********/
	Theta+=Delta_p_T1P;              /*Q14格式*/
	if(Theta<0)
		Theta+=D_360;
	else if(Theta>=D_360)
		Theta-=D_360;
	
	Theta_I=(int)(Theta>>14);        /*Q0格式*/
	
				
/********计算Ua*T1P,Ub*T1p******/
	SinTheta=sinEntry[Theta_I];      /*Q14格式*/
	Temp1=Theta_I+90;
	if(Temp1>=360)
		Temp1-=360;
	CosTheta=sinEntry[Temp1];        /*Q14格式*/
	
	UaT1P=(((long)VT1P*CosTheta)>>14);/*Q5格式*/
	UbT1P=(((long)VT1P*SinTheta)>>14);/*Q5格式*/
	

/********确定扇区号,查表进行相关计算*****************/
	Sector=((Theta_I*68)>>12);
	CMP_1=(((long)UaT1P*InvrtM[Sector][0]+(long)UbT1P*InvrtM[Sector][1])>>19);	/*t1脉冲数Q0格式*/
	CMP_2=(((long)UaT1P*InvrtM[Sector][2]+(long)UbT1P*InvrtM[Sector][3])>>19);	/*t2脉冲数Q0格式*/
	CMP_0=((1250-CMP_1-CMP_2)>>1);
	CMPRM[index[Sector][0]]=CMP_0;
	CMPRM[index[Sector][1]]=CMP_0+CMP_1;
	CMPRM[index[Sector][2]]=CMP_0+CMP_1+CMP_2;

/********删除窄脉宽************/
	if(CMPRM[0]<0)
		CMPRM[0]=0;
	else if(CMPRM[0]>1250)
		CMPRM[0]=1250;
	
	if(CMPRM[1]<0)
		CMPRM[1]=0;
	else if(CMPRM[1]>1250)
		CMPRM[1]=1250;
		
	if(CMPRM[2]<0)
		CMPRM[2]=0;
	else if(CMPRM[2]>1250)
		CMPRM[2]=1250;
		
	*CMPR1=CMPRM[0];
	*CMPR2=CMPRM[1];
	*CMPR3=CMPRM[2];
		
   	
   	asm("	CLRC     INTM");
}   

void interrupt PHANTOM(void)                       
{
	aaa+=1;
	asm("	CLRC	INTM");
}

void Delay(unsigned int nDelay)
{
	int i,j,k;
	for ( i=0;i<nDelay;i++ )
		for ( j=0;j<16;j++ )
			k++;
}



 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -