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

📄 spwmnew.c

📁 SPWM用于控制三相交流电机的程序(北京工业大学)
💻 C
字号:
#include	"register.h"
#include	"math.h"
long unsigned int CLK=40000000,CLK2=20000000;
unsigned int FREQ=50,N=360,T1PERTEMP;
int i=0,j=0,k=0,T=20;
signed int SIN1[3][120],m;
long msin;
unsigned int t1=0,t2=1,t3=2;
long unsigned int CMPRTEMP;

void  system_init()
{
   asm(" SETC	INTM ");
   asm(" SETC  	SXM ");
   asm(" CLRC   OVM ");
   asm(" CLRC   CNF ");
   *SCSR1=0x818E;
   *WDCR=0x6f;
   *WDKEY=0x5555;
   *WDKEY=0xaaaa;
   *IMR=0x0002; 
   *IFR=0x0FFFF;
   WSGR=0x000;
}

void  SPWMINIT()
{
   *MCRA=0X0FC0; 
   *ACTRA=0X0999; 
   *T1CNT=0X0000;
   *T1CON=0X0800; 
   *T1PER=T1PERTEMP;
   *GPTCONA=0X0000;	
   *EVAIMRA=0X0080;
   *EVAIFRA=0X0FFFF;
   *CMPR1=0;
   *CMPR2=0;
   *CMPR3=0;
   *COMCONA=0X8200;
   *T1CON=0x0840;
   asm(" CLRC	INTM ");
}

void caculate()
{ 
  T1PERTEMP=CLK2/(FREQ*N);
  for(i=0;i<3;i++)
    for(j=0;j<(N/3);j++)
     { SIN1[i][j]=16384*(sin(6.2831852*k/N));
	   k++;
     }
    m=16384;
//  m=(FREQ/T)<<14;
  i=0;j=0;
}

void interrupt GISR2()
{ 
  if((*EVAIFRA&0x0080)==0x0080)
    { msin=m*SIN1[t1][j];
      CMPRTEMP=268435456+msin;
      CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
      *CMPR1=CMPRTEMP;
      
      msin=m*SIN1[t2][j];
      CMPRTEMP=268435456+msin;
      CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
      *CMPR2=CMPRTEMP;
      
      msin=m*SIN1[t3][j];
      CMPRTEMP=268435456+msin;
	  CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
      *CMPR3=CMPRTEMP;
      
      j++;
      if(j==(N/3))
       { t1=t2;
       	 t2=t3;
       	 t3=3-t1-t2;
       	 j=0;
       }
    }
   *EVAIFRA=0x0080;
   asm(" CLRC INTM ");      
}

void interrupt nothing()
{  asm(" CLRC INTM ");
}

main()
{  system_init();
   caculate();
   SPWMINIT();
   while(1)
   {;
   }
}

⌨️ 快捷键说明

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