工具/软件:Code Composer Studio
这是我的代码:
#include "math.h"
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
易失性 UINT16 Ton = 360;//定义导通时间,稳定工作时Ton = 950
uint16还要减小= 180;//μ s
void InitEPwm1Example (void);//配置 ePWM 模块
int main (void){
InitSysCtrl();//初始化系统控制
InitGpio();//初始化 GPIO
InitEPwm1Gpio ();//PWM1_L
InitTzGpio();
//配置 ePWM 模块
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
InitEPwm1Examples();
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
//等待 timer0中断
for (;;);
}
void InitEPwm1Examples(){
//设置 TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm1Regs.TBPRD = 9000;//设置定时器周期
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;//启用相位加载
EPwm1Regs.TBPHS.Half.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0x0000;//清除计数器
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
//将影子寄存器加载设置为零
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//设置比较值
EPwm1Regs.CMPA.half.CMPA = Ton+Tdelay;//设置比较 A 值
EPwm1Regs.CMPB = Tdelay;//设置比较 B 值
//设置操作
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;//将 PWM1A 设置为零
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;//在事件 A 上清除 PWM1A、递增计数
// EPwm1Regs.AQCTLA.bit.CBU = AQ_CLEAR;//将 PWM1B 设置为零
// EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1B,递增计数
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 0x1;// DCAH = TZ2
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 0x2;// DCAEVT1 = DCAH 高电平、DCAL 无关;
EPwm1Regs.DCACTL.bit.EVT1SRCSEL = 0x0;// 0源为 DCAEVT1信号;1源为 DCEVTFILT 信号;
EPwm1Regs.DCACTL.bit.EVT1SYNCE = 0x1;//采用同步路径
}
TZ2(绿色),EPWM1A(深蓝色),EPWM1B(浅蓝色),为什么 EPWM1A 异常?
