主题中讨论的其他器件: C2000WARE、 SysConfig
您好:
我在使用 TMS320F28335系列芯片配置 HRPWM 时遇到了此类问题。 配置代码如下:
空
HRPWM6_Config (周期)
{
//
//使用 HRPWM 配置 ePWM6寄存器
// ePWM6A 通过在下降沿进行 MEP 控制来切换高/低电平
//
EPwm6Regs.TBCTL.bit.PRDLD = TB_immediate;//设置立即加载
EPwm6Regs.TBPRD =周期-1;
EPwm6Regs.CMPA.half.CMPA = 0;//仅通过 CMPAHR 设置占空比控制
EPwm6Regs.CMPA.half.CMPAHR =(255<< 8);//初始化 HRPWM 扩展
EPwm6Regs.TBPHS.all = 0;
EPwm6Regs.TBCTR = 0;
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_DOWN;//向下计数模式
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;// ePWM6是主控方
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_影子;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_影子;
EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR;// PWM 切换高电平/低电平
EPwm6Regs.AQCTLA.bit.CAD = AQ_SET;
//EPwm6Regs.AQCTLB.bit.PRD = AQ_CLEAR;
//EPwm6Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EALLOW;
EPwm6Regs.HRCNFG.all = 0x0;
EPwm6Regs.HRCNFG.bit.EDGMODE = HR_REP;//上升沿上的 MEP 控制
EPwm6Regs.HRCNFG.bit.CTLMODE = HR_CMP;
EPwm6Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
EDIS;
}
在主函数中、我配置 SYSCLKOUT=PWM 150MHz 和150MHz、并且将100作为周期参数传递到 HRPWM6_Config (PERIOD)函数中、所以生成的 PWM 频率为1.5MHz。 现在、要求占空比为30.2%。 如果高分辨率边沿被设定为下降边沿、PWM 输出在 CNT=ZRO 时设定、CMPA 和 CMPAHR 的值按照公式:计算
假定 MEP 阶跃为150ps、它对应于150MHz 的 SYSCLK 频率、且相应的 MEPScaleFactor=44.44
CMPA=integer (100*30.2%)=30;
CMPAHR=(Fract(100*30.2%)*(MEPScaleFactor)+0.5(舍入))<<8=(0.2*44.44+0.5)<<8=2403;
最后、根据获取的 CMPA 和 CMPAHR 值、可以得到占空比约为30.2%的 PWM 波形。
然而、当配置为高分辨率上升沿调节时、当 CNT 达到根据上述公式计算出的 CMPA 值时、在 MEP 边沿控制调节后、PWM 波形被设置、当 CNT=PRD 时、波形被清除为零、 然后、得到的 PWM 波形占空比仍为所需的30.2%?
根据上面的结果、我认为获得的 PWM 波形占空比应为1-30.2=69.8%、而不是所需的30.2%、如果您想获得所需的30.2%占空比、则应根据60.8% CMPA 和 CMPAHR 值计算上升沿控制。 或者硬件是否会帮助自动切换? 或者、我们是否应该根据我说过的内容切换占空比的值、然后根据上面的公式重新计算 CMPA 和 CMPAHR 所需的值?
此致、
润浩