我正在尝试为双脉冲测试设置生成合适的双脉冲。 我正在尝试使用 CMPA 和 CMPB 在一个 TBCTR 周期内生成双脉冲、并在一个周期后冻结时基计数器(TBCTR)、以便不会重复双脉冲。 但我得到的示波器结果如下所示、

DPT PWM 的代码如下所示、
#include "F28x_Project.h"
void GPIO_select (void);
void Setup_EPWM (void);//PWM 设置函数
UINT16 TBPrd=224;
UINT16 DB = 5;
浮点 D1 = 0.8;
浮点 D2 = 0.1;
空 main (void)
{
InitSysCtrl();
Dint;
GPIO_select ();
//启用 PWM1、PWM2
CpuSysRegs.PCLKCR2.bit.EPWM4 = 1;
//初始化设备外设:
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;
Setup_ePWM ();//初始化 PWM
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1;
EDIS;
while (1)
{
}
}
void GPIO_select (void)
{
EALLOW;
InitEPwm4Gpio();
InitEPwm5Gpio();
GPIO_SetupPinOptions (31、GPIO_output、GPIO_ASYNC);
GPIO_SetupPinOptions (34、GPIO_output、GPIO_ASYNC);
EDIS;
}
void Setup_ePWM (void)
{
//初始化基于时间的子模块
EALLOW;
EPwm4Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1
EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm4Regs.TBCTL.bit.CTRMODE = 2;//向上向下计数-模式
EPwm4Regs.TBCTR = 0;//清除计数器
EPwm4Regs.TBCTL.bit.PRDLD = 1;// TBPRD 立即加载到 TBCTR 中
EPwm4Regs.TBPRD = TBPrd;
EPwm4Regs.TBCTL.bit.FREE_SOFT = 1;
//设置隐藏
EPwm4Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm4Regs.CMPCTL.bit.LOADAMODE = 1;
EPwm4Regs.CMPA.bit.CMPA = D1*TBPrd;
EPwm4Regs.CMPB.bit.CMPB =(1 - D2)* TBPrd;
//初始化动作限定器模块
EPwm4Regs.AQCTLA.bit.ZRO = 2;//在 ZRO 处设置上行计数(U)为高电平(2)
EPwm4Regs.AQCTLA.bit.CAU = 1;//在 CMPA 处设置向上计数(U)为低电平(1)
EPwm4Regs.AQCTLA.bit.PRD = 2;//在 PRD 处设置向下计数(D)为高电平(2)
EPwm4Regs.AQCTLA.bit.CBD = 1;//在 PRD 处设置向下计数(D)为低电平(1)
//初始化一次性跳闸
EPwm4Regs.TZCLR.bit.OST = 1;
EPwm5Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1
EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm5Regs.TBCTL.bit.CTRMODE = 2;//向上向下计数-模式
EPwm5Regs.TBCTR = 0;//清除计数器
EPwm5Regs.TBCTL.bit.PRDLD = 1;// TBPRD 立即加载到 TBCTR 中
EPwm5Regs.TBPRD = TBPrd;
EPwm5Regs.TBCTL.bit.FREE_SOFT = 1;
//设置隐藏
EPwm5Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm5Regs.CMPCTL.bit.LOADAMODE = 1;
EPwm5Regs.CMPA.bit.CMPA = D1*TBPrd + DB;
EPwm5Regs.CMPB.bit.CMPB = TBPrd - DB;
//初始化动作限定器模块
EPwm5Regs.AQCTLA.bit.ZRO = 1;//在 ZRO 处设置上行计数(U)为低电平(1)
EPwm5Regs.AQCTLA.bit.CAU = 2;//在 CMPA 处设置向上计数(U)为高电平(2)
EPwm5Regs.AQCTLA.bit.CBU = 1;//在 CMPB 处设置上电计数(U)为低电平(1)
//初始化一次性跳闸
EPwm5Regs.TZCLR.bit.OST = 1;
EDIS;
}