
/************************************************************
**描述:利用GP定时器1的比较器在改槐产生一路PWM波,外设时钟25M**
**同时用全比较器产生3对PWM波,GP定时器1作全比较单元时基***
************************************************************/
#include "DSP28_Device.h"
void EVA_PWM()
{
EvaRegs.EXTCON.bit.INDCOE = 1 //单独使能比较输出模式
EvaRegs.ACTRA.all = 0x0aaa//空间矢量不动作
EvaRegs.DBTCONA.all = 0x08ec //死区定时器启动
EvaRegs.CMPR1 = 0x0006
EvaRegs.CMPR2 = 0x0005
EvaRegs.CMPR3 = 0x0004
EvaRegs.COMCONA.all = 0xa4e0 //空间向量禁止,全比较使能,陷阱禁止
}
void EVA_Timer1()
{
EvaRegs.EXTCON.bit.INDCOE = 1 //单独使能比较输出模式
EvaRegs.GPTCONA.all = 0x0012 //GP定时器1比较输出低有效芹梁
EvaRegs.T1PR = 0x0013 // 定时周期为5.12us*(T1PR+1)
EvaRegs.T1CMPR = 0x0003 // GP定时器的比较寄存器
EvaRegs.T1CNT = 0x0000// 定时器初值
EvaRegs.T1CON.all = 0x1742//连续增计数,128分频,使能比较,打开定时器
}
void IOinit()
{
EALLOW
//将GPIOA配置为外设口
GpioMuxRegs.GPAMUX.all = 0xffff
EDIS
}
void main(void)
{
InitSysCtrl() //初始化系统控制寄存器, 时钟频率150M
EALLOW
SysCtrlRegs.HISPCP.all = 0x0003//高速时钟的工作频率=25M
EDIS
DINT//关闭总中断,清除中断标志
IER = 0x0000 //关闭外围中断
IFR = 0x0000//清中断标志
IOinit()
EVA_PWM()
EVA_Timer1()
for(){}
}
我再看了你的原贴,可以肯定1,肯定要有EV自带的SVPWM功能,由2812自动生成,这样2000系列适合电机控制的根本原知唤因,2,配置相搭铅凯关的周期寄存器,比较寄存器,产生期待的SVPWM波形,在激亩2812的data sheet里,有说明,可以细读一下。对于28335的话,可以在EPWM配置模块添加下绝纯面的语句://adc
EPwm1Regs.ETSEL.bit.SOCAEN = 1// Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 2// TBPRD
EPwm1Regs.ETPS.bit.SOCAPRD = 1
这是默认EPWM1来触桥野发AD转换(目前我程序里用的就是这个)。要想保证AD好用,你AD的初始化并消咐及相关标志位的配置也得配套设定好,光有启动语句的话照样没用
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)