TMS320F2812产生PWM波程序

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

// 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值