我们使用C2000 F2.8374万的PWM单元使用死带模块为降压-升压级生成PWM信号。
在极端点(启动/停止,100 % / 0 % 双循环,不同的死区设置等)测试PWM操作时 我发现对我来说没有任何合理的行为。
PWM单元按某种方式配置,信号A和B在CMPA上具有相同的操作限定符,而信号B在死区模块上反转。 红色可应用于信号A,馈送至单个B
在0 % 占空比操作中,信号A为高,信号B为低,在100 % 占空比中为低。
当红色为0时将占空比更改为0 % ,然后将红色增加为例如100ns,将强制输出A降低。 只有在工作循环更改之前红色为0时才会发生这种情况。 这意味着,将占空比更改为0,红色= 100ns,然后将红色更改为0,再将其更改为100ns,工作方式与预期相同(输出A保持高位)。
在100 % 占空比操作中,当更换进纸时,输出B也会发生相同情况。
当然,使用 100或0 % 占空比的死时间是没有意义的,我们可能永远看不到这种情况,因为我们允许 的死时间最小,所以在正常操作中没有人可以将FED / RED设置为0。 无论如何,我的主张是了解 PWM单元在100 % 所有理论上可能的工作条件下的配置和结果行为。
对此行为是否有任何解释?
您可以在下面找到我们的配置例程:
PWM单元的配置:
void PWMConfigBooster (易失性结构ePWM_regs *ePWM)
{
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//不对称模式
EPwm1Regs.TBPRD = PWM_50KHz_PRD_CNTUPDOWN;//周期= 900 TBCLK计数
EPwm1Regs.TBPHS.bit.TBPHS = 0; //将相位寄存器设置为零
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位同步,因为增压器PWM为主
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 0;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;// 同步输出到所有从属设备
EPwm1Regs.TBCTL.bit.PHSDIR = 1; //同步事件后计数,加载相位的新值(TBPHS)。
EPwm1Regs.TBPHS.bit.TBPHS = 0; //初始-相对于ePWM1的粗相位偏移
EPwm1Regs.TBCTL.bit.PRDLD = TB_shadow;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //预分频器= 1
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; //在CTR上加载=零
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; //在CTR上加载=零
StopBoosterPWM();
EPwm1Regs.AQCTL.bit.SHDWAQAMODE =1; //为操作限定符A寄存器启用阴影加载
EPwm1Regs.AQCTL.bit.SHDWAQBMODE =1; //为操作限定符B寄存器启用阴影加载
//将死区模块配置为在输出A上使用上升边缘延迟并反转输出B
//有关详细信息,请访问DeadBandModuleConfigHssPwms.png
EPwm1Regs.DBCTL.bit.in_mode = 0x2;// EPWMxA是上升边缘延迟的来源,EPWMxB是下降边缘延迟的来源。 (S4 = 0,S5 = 1)
EPwm1Regs.DBCTL.bit.DEDB_mode = 0x0; // S8 = 0
EPwm1Regs.DBCTL.bit.POLSEL = 0x2; //反转ePWMxB信号从下降边缘延迟块中发出(S2 = 0,S3 = 1)
EPwm1Regs.DBCTL.bit.out模式 = 0x3; //为EPWMxA和EPWMxB信号启用死带模块(S0和S1 = 1)
EPwm1Regs.DBCTL.bit.OUTSWAP = 0x0;// S6和S7 = 0
EPwm1Regs.DBFED.bit.DBFED = PWM_DEADTIME _IN_TKS; // fed =最初50 TBCLK
EPwm1Regs.DBRED.bit.DBRED = PWM_DEADTIME _IN_TKS; // RED = 最初50 TBCLK
}
用于停止PWM的功能
void StopBoosterPWM (void)
{
#ifdef set_SS_PWM_STOP_GPIO
Set_HSS_PWM_STOP_GPIO
#endif
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CAU = AQ_set; //信号在死区模块中反转
EPwm1Regs.AQCTLB.bit.CAD = AQ_set; //信号在死区模块中反转
#ifdef Clear_HSS_PWM_START_GPIO
Clear_HSS_PWM_START_GPIO
#endif
}
用于启动PWM的功能
void StartBoosterPWM (void)
{
#ifdef set_SS_PWM_STOP_GPIO
Set_HSS_PWM_STOP_GPIO
#endif
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;//信号在死区模块中反转
EPwm1Regs.AQCTLB.bit.CAD = AQ_set; //信号在死区模块中反转
#ifdef Clear_HSS_PWM_STOP_GPIO
Clear_HSS_PWM_STOP_GPIO
#endif
}
谢谢!
Jens
