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

📄 c-pfc.txt

📁 dsp开发镇流器程序
💻 TXT
字号:
#include "LF2407.h"
#include "LF2407Avector.h"
#include "float.h"
#include "math.h"
float ualfa[200],ubeta[200];
int   sector[200];
#define      PI2       2*2.1415926
#define      DETA      PI2/200
#define      KP        0.7

//屏蔽中断子程序
void inlne disable()
{
   asm("setc  INTM");
}
//系统初始化子程序
void  initial()
{
      *IFR=0xFFFF;
      *IMR=0X0;
      *SCSR1=0X81FE;
      *WDCR=0XE8;
      *T3PER=TP;
      *T3CON=0X0802;
      *ACTRB=0X666;
      *COMCONB=0X9200;
      *EVBIMRA=0X00;
      *T3CNT=0X00;
      *EVBIFRA=0X0FFFF;
      *MCRC=*MCRC|0X7E;
      WSGR=0X0000;
}
//根据Uout的标幺值kp计算ualfa,ubeta子程序
void  calu()
{
    int  i;
    for(i=0;i<200;i++)
      {
        ualfa[i]=KP*cos(i*DETA);
        ubeta[i]=KP*sin(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;
     }
   }
}
//输入和输出电压的平均值计算程序
void average()
{
   M=M+1;
   
}   
//数字pi子程序
void pi()
{    
     
   
//主程序
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(1=0;i<200;i++)  {
           *ACTRB=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;
                deafault;break;
               }  
              *CMPR4=cmp1;
              *CMP5=cmp1+cmp2;
              if((i+k)==0)*T3CON=*T3CON|0X040;
              while(1)    {
              k=*EVBIFRA&0X0200;
              if(k==0x200)break;
              }
          }
     }
 }
//如果由于扰引起中断,则执行次直接返回程序
                           
         void  interrupt nothing()
   { 
               return;
   }
























⌨️ 快捷键说明

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