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

📄 main.c

📁 TMS320LF2407A DSP交流电机SPWM控制程序
💻 C
字号:
#include "lf2407regs.h"
#include "math.h"
//#define N 81
#define N 234
#define pi 3.1415926
float M=1.0;
float f=50;
int i;
volatile unsigned int k1=0,k2=N/3,k3=2*N/3;
 int led=1;
float lw_cos[N];
int FOOT=1;
#define T  40000000/(2*f*N)

//void inline disable()
//{asm(" setc INTM");}
//void inline enable()
//{asm(" clrc INTM");}

// 系统初始化子程序
int  initial()
{   asm(" setc  INTM");
	asm(" setc	SXM");					// 符号位扩展有效
	asm(" clrc	OVM");					// 累加器中结果正常溢出
	asm(" clrc	CNF");					// B0被配置为数据存储空间
	*SCSR1=0x00FE;					// CLKIN=10M,CLKOUT=4*CLKIN=40M
	*WDCR=0x0E8;					// 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     					// 即WD保护位复位后的缺省值为1,故可以用
		     					// 软件禁止看门狗
	*IMR=0x0000;						// 禁止所有中断
	*IFR=0x0FFFF;					// 清除全部中断标志,"写1清0"
	WSGR=0X00;						// 禁止所有的等待状态
	*MCRC=0x0000;
	*PEDATDIR=0xff00;
}
// EVA模块的PWM初始化程序
int  spwminitial()
{
	*MCRA=*MCRA|0X0fc0;			// IOPE1-6被配置为基本功能方式,PWM1-6
	*ACTRA=0X0666;					// PWM6,4,2 低有效,PWM5,3,1 高有效
	//*DBTCONA=0X01f0;					// 使能死区控制
    *DBTCONA=0X00;
	//*T1PER=40000000/(2*f*N);
	*T1PER=T;
	*COMCONA=0x8200;
	*T1CON=0XC800;					// 定时器3为连续增减计数模式
	*T1CNT=0;
	asm(" clrc INTM");
	//enable();
	*IMR=*IMR|0x02;//INT2 中断使能
	*EVAIMRA=*EVAIMRA|0x0200;//定时器1下溢中断使能
	*EVAIFRA=0xffff;
	for(i=0;i<N;i++)
	{lw_cos[i]=(N/pi)*(cos(i*pi/N)-cos((i+1)*pi/N));
	if(lw_cos[i]<0)
	lw_cos[i]=-lw_cos[i];
	}
	//*CMPR1=(*T1PER)*(1-M*lw_cos[0]);
    //*CMPR2=(*T1PER)*(1-M*lw_cos[360]);
    //*CMPR3=(*T1PER)*(1-M*lw_cos[720]);
}
// 该中断服务程序主要是为了防止干扰,不做任何其它操作
void	interrupt nothing()
{   //enable();
	return;						// 中断直接返回
}
void interrupt Timer1_UFINT()
{
 k1+=FOOT;
 k2+=FOOT;
 k3+=FOOT;
 //led+=FOOT;
 if(k1>=N)  
 {
 k1=0;
 *PEDATDIR=0xff00;
 *PEDATDIR=*PEDATDIR|led++;
 if(led>=0xff)
 led=0;
  }
 if(k2>=N)  k2=0;
 if(k3>=N)  k3=0;
 *CMPR1=(*T1PER)*(1-M*lw_cos[k1]);
 *CMPR2=(*T1PER)*(1-M*lw_cos[k2]);
 *CMPR3=(*T1PER)*(1-M*lw_cos[k3]);
  *EVAIFRA=0x0200;
  //enable();
  
  return;
 
 }

// 主程序
main( )
{
	//disable();							// 总中断禁止
	initial();							// 系统初始化
	spwminitial();// PWM输出初始化
	
	*T1CON=*T1CON|0x0040;// 启动定时器1
    while(1);

}




	 

⌨️ 快捷键说明

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