大家好,团队
客户提出的问题可能需要您的帮助:
1) PWM 波形问题如下:
PWM2以20K 运行,PWM 波形遵循 SPWM 的模式,PWM 的 CTRMODE = TB_COUNT_updown;或 updown 模式,配置如下:
EPwm2Regs.TBPRD =1500;//CLK=60MHz 则PWM 频率 F=60*1000/2*1500=20K
EPwm2Regs.AQCTLA.Bit.CAU = AQ_SET;
EPwm2Regs.AQCTLA.Bit.CAD = AQ_Toggle;
EPwm2Regs.AQCTLA.Bit.ZRO = AQ_CLEAR;
死区设置如下:
EPwm2Regs.DBCTL.bit.in_mode = DBA_All; // EPWMxA 是这两种延迟的源
EPwm2Regs.DBCTL.Bit.Out 模式= DB_Full-enable; //启用死区模块
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//活动高互补(AHC)
EPwm2Regs.DBFED =60;//死区设置 TBCLK 6US---360
EPwm2Regs.DBRED = 60;//
因此,此时只需要设置 CMPA (EPwm2Regs.CMPA),以设置 PWM 输出的占空比值。 PWM 的数组元素数为200,这是正弦反相50 Hz 的半周期。 现在,只需反转正弦半轴,数组元素的占空比从0到199显示在下图中(UC 显示在图的底部):

从49到199,CMPA 设置为1499 (TBPRD 为1500)。 通常,PWM2A 输出较低,PWM2B 输出较高。 但实际操作是 PWM2A 的电平较高,PWM2B 的低电平输出在49到199之间如果对49到199使用 TZ 力,PWM2A 的电压较低,PWM2B 的电压较高,则不会出现此问题。 程序代码如下:
代码1用于为 CMPA 分配值1499:
如果(((spwm_table_cnnt>=49)&(spwm_table_cnt <=199)){
EPwm2Regs.CMPA-Halt.CMPA = 1499;
}
否则{
EALLOW;
IF (EPwm2Regs.TZFLG.bit.OST=1){
EPwm2Regs.TZCLL.Bit.OST=1;}
EDIS;
}
代码2用于使用 TZ 强制 PWM 输出:
如果(((spwm_table_cnnt>=49)&(spwm_table_cnt <=199)){
EPwm2Regs.CMPA-Halt.CMPA = 1499;
EALLOW;
EPwm2Regs.TZCTL.Bit.TZa=TZ_FORCE_LO;
EPwm2Regs.TZCTL.Bit.TZB=TZ_FORCE_HI;
EPwm2Regs.TZCLL.Bit.OST=1;
EDIS;
}
否则{
EALLOW;
IF (EPwm2Regs.TZFLG.bit.OST=1){
EPwm2Regs.TZCLL.Bit.OST=1;}
EDIS;
}
PWM2控制的 H 桥输出波形如下:(代码1)

PWM2控制的输出波形如下:(代码2)

2)死区问题如下:

如果按照客户代码设置,不要使用 TZ,请假设以下情况:
A. 当中最左侧的 EPWMxA 高且死区的两个边缘计数器都设置为60时,最右侧的 EPWMxA 输出是高还是低? 由于 PWMXA 的脉冲宽度为2 *(1500-1499),60 (即脉冲宽度小于死区计数器设置时),PWMxA 的输出是什么? 上一级输出或输出是否过低?
B. 当 CMPA 设置为1时,EPWMxB 引脚输出电平是高还是低? 还是保持先前的输出级别不变? 由于中的 EPWMxA 脉冲宽度小于 CMPA 为1时的下降边缘计数器,因此客户目前无法理解死区计数的输出。
请帮您检查此案例? 谢谢。
此致,
樱桃