网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  TMS320F2812的SPWM原程序         ★★★ 【字体:
TMS320F2812的SPWM原程序
作者:Free    文章来源:Free    点击数:    更新时间:2008-1-2    

 

 

 //实现了SPWM的输出

#include "DSP281x_Device.h"

#include "stdio.h"

#include "math.h"

#include "float.h"

#define NX 404

#define PI 3.1415925

float M=0.8;

int k0=0,h1=0;

double a[NX];

void zkb();

interrupt void eva_T1UFINT_ISR(void);

 unsigned int n=0;

  float q,l,j;

void main(void)

{

    InitSysCtrl(); //系统初始化

    DINT;         //禁止全局中断

    IER=0x0000;

    IFR=0x0000;

   

    EALLOW;    

    GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6  pins

    EDIS;

  

    InitPieCtrl();    

    InitPieVectTable();

   

    EALLOW;        //使能定时器1下益中断

    PieVectTable.T1UFINT=&eva_T1UFINT_ISR;

    EDIS;

   

    IER|=M_INT2;  //开中断2

    PieCtrlRegs.PIEIER2.bit.INTx6=1; //开下益中断

 

////////////////////

 

  while (n<=NX) 

  {

    q=(n+0.75);    //为消除偶次偕波,减少谐波角度出发,选择从A3/4周期进行采样

    q=q*2*PI;     

    q/=405;

    j=sin(q);    

    l=1875*(1+M*j);//M为调制比     //计算占空比表达式

    //if(l>=187&l<=1687)(此处网友设置为错误的)

   if(l>=375&l<=3375)

     a[n]=l; 

    else

        {

        if(l>3375)

         a[n]=3375;

        else

         a[n]=375;

        } 

    

   n=n+1;

  }

//////////////////////////////

 

   

  ///init_eva

///////////////////////////////

 EvaRegs.ACTRA.all=0x0666;

 EvaRegs.DBTCONA.all = 0x0000;  // Disable deadband

 EvaRegs.COMCONA.all = 0xa600;  //使能比较操作

 

 EvaRegs.EVAIMRA.all=0x0200; //EVAIMRA(EVA的中断屏蔽寄存器A).T1UIINT(通用定时器1的下溢中断使能)

 EvaRegs.EVAIMRB.all=0x0000;

 EvaRegs.EVAIMRC.all=0x0000;

 EvaRegs.EVAIFRA.all=0xffff;//EVAIFRA(EVA的中断标志寄存器.T1UIINT(通用定时器1的下溢中断标志)

 EvaRegs.EVAIFRB.all=0xffff;//1清除定时器1的下溢中断标志

 EvaRegs.EVAIFRC.all=0xffff;                            

 EvaRegs.CMPR1=0;           //初始化寄存器的值

 EvaRegs.CMPR2=0;

 EvaRegs.CMPR3=0;       

 

 EvaRegs.GPTCONA.all=0x0041;

    //周期必须大于最大的正弦表格值

 EvaRegs.T1PR = 3750;       // Timer1 period PWM载波周期为 65536个定标的定时器时钟周期

 //EvaRegs.T1PR = 0xffff;

 //EvaRegs.T1CNT = 937;      // Timer1 counter

 EvaRegs.T1CNT = 937;

 //EvaRegs.T1CON.all = 0x0b4e;  // 选择模式产生PWM10

 

 EvaRegs.T1CON.all = 0x0b4e;

 EINT;

 

 

 

 return;

///////////////////////////

  EvaRegs.T1CON.all=EvaRegs.T1CON.all|0x0040;  //启动定时器1

 

     

           for(;;); 

}

 

interrupt void eva_T1UFINT_ISR(void)    // EV-A

{

  int h2;

  int flag;

  flag=(EvaRegs.EVAIFRA.all)&0x0200;  //T1UFINT中下益中断标志位置1

    if(flag!=0x0200)

      {

       EINT;

       return;

      }

    else

     {

      if(k0<=NX)

       {

       h1=k0+135;      //B相表达式

       if(h1>=404)h1=h1-404;

       h2=k0+270;      //C相表达式

       if(h2>=404)h2=h2-404;

        EvaRegs.CMPR1=a[k0];

       EvaRegs.CMPR2=a[h1];  //更新比较寄存器2的值  

       EvaRegs.CMPR3=a[h2];  //更新比较寄存器3的值

       k0=k0+1;

       }

      else      

       {

        k0=0;

       }

      }

 

    EvaRegs.EVAIMRA.bit.T1UFINT=1; //清除中断屏蔽标志

    EvaRegs.EVAIFRA.bit.T1UFINT=1; //清楚中断使能标志

    PieCtrlRegs.PIEACK.all=0x0002;     //响应同组中断

    EINT;                          //开全局中断

} 

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    基于LabVIEW和TMS320F2812的…
    TMS320F2812的CAN调试成功经…
    基于TMS320F2812和μC/OS II…
    TMS320F2812 全局汇编函数
    TMS320F2812 CMD 文件各段含…
    基于TMS320F2812集中供电系统…
    TMS320F2812的CMD文件配置详…
    基于TMS320F2812的多轴伺服控…
    利用TMS320F2812 DSP&DRV592…
    基于TMS320F2812的变频调压功…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号