TMS320F2812产生PWM波程序
来源:互联网 发布:des算法f函数 编辑:程序博客网 时间:2024/06/05 06:00
//###########################################################################
//
// 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
- TMS320F2812产生PWM波程序
- MSP430产生PWM波
- 用 STC12C5A60S2 产生PWM波
- 51单片机产生PWM波
- AVR EVB PWM正弦波产生程序
- 7路PWM产生程序阅读
- 2812 PWM波程序
- 略涉用430的定时器产生PWM波
- 定时器产生PWM
- 单片机定时器产生pwm
- dsPIC33F产生PWM
- 通用定时器产生PWM
- AVR产生多种PWM
- MSP430下TB产生两路PWM波的操作
- Android设备通过usb控制zedboard产生pwm波实验
- Kinetis K系列产生两路正交PWM波
- STM32的PWM波产生的问题总结
- 使用STC15F104W产生PWM脉冲
- 在DataSet中处理字段中的NULL问题入门6
- design
- 代码分享,寻找两个字符串的相似度。 ios版本
- 如何在DLL的输出函数中返回字符串给调用者
- 显卡结构与工作原理解读
- TMS320F2812产生PWM波程序
- 在DataSet中实现纪录删除的自定义方法入门7
- F2812中程序从Flash中搬运到SRAM中运行加快速度
- iReport group 控件使用方法
- HMM的资源大部分重复
- 设计放大器
- MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
- 轻轻地,我想说一声:生日快乐,爱你!
- win7 "ClassFactory cannot supply requested class" in VS 2008的错误解决方法