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

📄 tms320f2812spwm.txt

📁 c语言 DSP2407A spwm 还有说明
💻 TXT
字号:
TMS320F2812的SPWM原程序  没有公告

                        加入收藏
                        设为首页
                        联系站长



       . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 
      服务导航 . 邮购 . 资源 . 
      | DSP首页 | DaVinci文章 | C6000文章 | C5000文章 | C3000文章 | C2000文章 | ADI DSP | 
      MOTO DSP | FAQ | 代码示例 | 电路应用 | 

            您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文



             TMS320F2812的SPWM原程序   热     ★★★【字体:小 大】

      TMS320F2812的SPWM原程序

      作者:Free    文章来源:Free    点击数:465    更新时间: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);    //为消除偶次偕波,减少谐波角度出发,选择从A相3/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;  // 选择模式产生PWM波10
       
       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 
      上一篇文章: TMS320LF2407上实现快速傅里叶变换(FFT)

      下一篇文章: 没有了

      【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】

      最新热点最新推荐相关文章
       TMS320C3x源码/范例
       DSP中内部Flash的应用研究
       [组图]TMS320VC5402 I/O资…
       [组图]基于DSP的光伏并网系…
       TI C28X FFT函数库完全注释
       [组图]一种基于A/D和DSP的…
       [组图]基于定点DSP的MP3音…
       [组图]基于TMS320F2812的车…
       取样频率转换算法(sampli…
       二次IIR滤波器
       TMS320C3x源码/范例
       [组图]XDS510 DSP系列仿真…
       [图文]JTAG口与仿真器连接…
       [图文]TMS320VC5410硬件连…
       [图文]采用ADuC834的口0与…
       [图文]AD73360与TMS320VC5…
       [图文]DSP5402和MAX3110硬…
       [图文]主从模式的TLC320AC…
       [组图]DSP2407全系列开发板…
       [组图]DSP器件的现场可编程…
      基于LabVIEW和TMS320F2812的…
      TMS320F2812的CAN调试成功经…
      基于TMS320F2812和μC/OS II…
      TMS320F2812 全局汇编函数
      TMS320F2812 CMD 文件各段含…
      基于TMS320F2812集中供电系统…
      TMS320F2812的CMD文件配置详…
      基于TMS320F2812的多轴伺服控…
      利用TMS320F2812 DSP&DRV592…
      基于TMS320F2812的变频调压功…


        网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) 
          没有任何评论

      | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | 
             站长:61IC 湘ICP备05002478号 

⌨️ 快捷键说明

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