论坛» 嵌入式开发» FPGA

DSP---PWM波形源码

工程师
2014-12-08 19:51 1楼

DSP2812---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波形








总结: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设置比较控制寄存器



附:

——回复可见内容——

菜鸟
2015-07-08 13:48 2楼

学习学习

菜鸟
2015-07-08 13:48 3楼
学习学习
菜鸟
2015-09-15 22:41 4楼
学习学习
菜鸟
2015-09-22 21:26 5楼
学习学习
菜鸟
2015-10-17 18:55 6楼
11
专家
2016-02-17 10:49 7楼
正在学习
菜鸟
2016-11-21 10:28 8楼

学习

菜鸟
2017-08-20 01:23 9楼

66666666666666666666666666666666666666666666666666666666666666

菜鸟
2018-01-23 11:49 10楼

谢谢分享

共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]