TMS320F2812产生PWM波程序

    技术2022-05-17  36

    //###########################################################################//

    //   FILE :  Example_281xEvPwm.c

    ////  TITLE:  EV-A --- PWM波形程序

    //

    //                                   ASSUMPTIONS://   //   As supplied, this project is configured for "boot to H0" operation.//   Other then boot mode pin configuration, no other hardware configuration is required. 

    ////###########################################################################

     

    # include "DSP281x_Device.h"                        // DSP281x Headerfile Include File# include "DSP281x_Examples.h"                   // DSP281x Examples Include File

    void init_eva(void);

    void main(void){   InitSysCtrl();

    // InitGpio(); 配置IO口功能为PWM模式   EALLOW;   GpioMuxRegs.GPAMUX.all = 0x00FF;        // EVA PWM 1-6  pins   EDIS;

      DINT;                           //关CPU总中断

      InitPieCtrl();                 //初始化PIE控制寄存器  IER = 0x0000;  IFR = 0x0000;  InitPieVectTable();            //初始化PIE中断向量表

     

      init_eva();                    //初始化EV-A 

      EvaRegs.T1CON.bit.TENABLE=1;   //手工启动定时器  

      EINT;        // 使能INTM(全局中断)  ERTM;        // Enable Global realtime interrupt DBGM  

     

      for(;;);

     

    }

     

    //EV-A初始化void init_eva(void){  EvaRegs.T1PR = 37500;   //周期值--连续增减时,PWM频率=TCLK/(2*T1PR)---频率设为1K, PWM=75M/(2*37500)  EvaRegs.T1CMPR = 0x3C00;          // Compare Reg--比较值  EvaRegs.T1CNT = 0x0000;           //计数器初值

     

    //连续增/减模式,x/1分频,内部时钟,使能比较,使用自己的周期,禁止定时器启动(等初始化全部完成后手工启动)  EvaRegs.T1CON.all = 0x0802;

     

      EvaRegs.GPTCONA.bit.TCMPOE = 1;    //通过逻辑产生T1 PWM  EvaRegs.GPTCONA.bit.T1PIN = 1;        //GP定时器1比较时低有效

     //使能比较产生1--6 PWM波  1个比较单元控制2路互补的PWM输出,控制PWM占空比

    //连续增减--低有效时:PWM占空比=CMPR1/T1PR,高有效时:PWM占空比=(T1PR-CMPR1)/T1PR  EvaRegs.CMPR1 = 15000;           //第一路PWM占空比设为0.4,0.4=15000/37500 

      EvaRegs.CMPR2 = 0x3C00;  EvaRegs.CMPR3 = 0xFC00;

    // output pin 1 CMPR1 - 高有效,output pin 2 CMPR1 - 低有效// output pin 3 CMPR2 - 高有效,output pin 4 CMPR2 - 低有效// output pin 5 CMPR3 - 高有效,output pin 6 CMPR3 - 低有效  EvaRegs.ACTRA.all = 0x0666;               //比较方式控制寄存器,控制PWM引脚的 高/低 有效  EvaRegs.DBTCONA.all = 0x0000;          //静止死区  EvaRegs.COMCONA.all = 0xA600;         //比较控制寄存器--禁止空间矢量PWM模式 

    }

     

    总结:PWM波形产生流程

    1):将I/O口设置为PWM引脚模式

    2):设置装载TxCON,决定计数方式,启动比较操作

    3):设置装载TxPR,决定PWM波形周期

    4):初始化EvaRegs.CMPR1--3的值,每个比较单元控制2路互补的PWM输出,控制PWM占空比

    5):EvaRegs.ACTRA比较方式控制寄存器,控制PWM引脚的 高/低 有效

    6):EvaRegs.DBTCONA死区时间的设置

    7):EvaRegs.COMCONA设置比较控制寄存器

     

    附:

     

    EvaRegs.DBTCONA.bit.DBT=5;                  //死区定时器周期为5

    EvaRegs.DBTCONA.bit.EDBT1=1;              //死区定时器1使能

    EvaRegs.DBTCONA.bit.DBTPS=3;              //死区定时器预定标因子,死区时钟为HSPCLK/8


    最新回复(0)