lajilaji110 发表于 2015-4-23 23:01:59

DSP---PWM波形源码

DSP2812---PWM波形 // $          Date:   6/11/2009      整理:eyes417      $
//###########################################################################
////   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-6pins
   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波形 http://blog.21ic.com/UploadFiles/2009-11/61431631831.jpg

http://blog.21ic.com/UploadFiles/2009-11/61430556849.jpg
                              
                         总结: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

panmingfu 发表于 2016-11-26 14:36:41

上下桥臂PWM互补了,死区时间可以再设置大点,效果会更好

cmyldd 发表于 2017-2-20 09:12:08

这个用途多呢,电机啥的应用广

chjchjchj816 发表于 2017-3-21 08:35:16

很标准的

天各一方8 发表于 2017-4-13 08:23:56

收藏下

mass 发表于 2017-4-17 09:02:34

mj8abcd 发表于 2018-2-26 14:55:03

页: [1]
查看完整版本: DSP---PWM波形源码