不知道你的DSP设置情况,我就说下我怎么设置吧。我设置的DSP频率是150M,你要发的PWM波周期是20KHz,设置乎余返连续增减模式,计数的最大值应该设为150M/40k=3750,你在设置比较值,如果占空比是50%,就设一半。然后你设个计数值,确定是什么时候开通哪个PWM,定义个flag就可以
了,设置为012,到了你毁郑的PWM长度就加1,到3时清0,等于0开PWM1,1开PWM2,2开PWM3就ok了。
用EVA事件管理器产生 重点看哈那张的内容 占空比有公式计算 自己动手做了才知道是怎么回事/****************************************************************************
*
*文棚册件名:EvPwm02.c
*
*功 能:PWM1和PWM2输出频率为1KHz的PWM波形。波形的占空比每隔1s变化5%,范围在10%
*到90%之间。
*
*说 明:EVA下面的通用定时器T1工作于嫌键连续增/减计数模式,产生对称的PWM波形。通过
*T1的周期中断来计时,每隔1s钟改变1次占空比。死区时间为4.27us。
*
****************************************************************************/
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
Uint32 intcount
int increase
int decrease
/****************************************************************************
*
*名称:main()
*
*功能:初始化系统和各个外设
*
*入口参数:无
*
*出口参数:无
*
****************************************************************************/
void main(void)
{
InitSysCtrl() //初始化系统函数
DINT
IER = 0x0000 //禁止CPU中断
IFR = 0x0000 //清除CPU中断标志
InitPieCtrl() //初始化PIE控制寄存器
InitPieVectTable() //初始化PIE中断向量表
InitGpio() //初始化Gpio口
InitEv() //初始化EV
intcount=0//T1定时器周期中断计数器
increase=0//占空比逐渐变小的变化趋势标志位
decrease=1//占空比逐渐变大的变化趋势标志位
PieCtrl.PIEIER2.bit.INTx4=1 //使能PIE中断,T1定时器中断位于INT2.4
IER|=M_INT2
EINT //开全局中断
ERTM //开实时中断
EvaRegs.T1CON.bit.TENABLE=1 //使能定时器T1计数芹和巧 *** 作
while(1)
{
}
}
这岁饥个挺简单的吧不知道你的DSP设置情况,我就说下我怎么设置吧。我设置的DSP频率是150M,你要发的PWM波周期是20KHz,设置乎余返连续增减模式,计数的最大值应该设为150M/40k=3750,你在设置比较值,如果占空比是50%,就设一半。然后你设个计数值,确定是什么时候开通哪个PWM,定义个flag就可以 了,设置为012,到了你毁郑的PWM长度就加1,到3时清0,等于0开PWM1,1开PWM2,2开PWM3就ok了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)