最近使用TI 提供的DEMO板(DSP28027移相全桥控制),TI官方提供例程(路径controlSUITE-development_kits-HVPSFB_v1.1-HVPSFB_PCMC-HVPSFB-Main.c)中有两个问题:问题1:在 A1()(定期的执行的函数)函数中有这样的一个语句:if ( (*ePWM[1]).TZFLG.bit.OST == 1 ),有点不太明白:程序为什么要定期查询这个标志位,做什么用。问题2:C2()函数中有这些语句:
if (input_good == 80)
{ EPwm1Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm2Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm4Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
}
TI提供的后面的解释是“Clear any spurious OC trip”,为什么程序要这样设置,为什么要清除标志位,这样做的目的是什么?望各位高手不吝赐教。小弟在此谢过。
Eric Ma:
yi,
首先需要了解的一点是OST是一次保护动作,配置OST相关寄存器后,如果对应的危险事件发生,会关断PWM引脚。然后用户程序需要对这种出错情况出现后进行相应的处理。假如检测到危险事件消失了,再清除OST事件,PWM才会打开。
所以A1就是判断如果OST出现时,即出现危险事件时,用户程序要做一些什么,比如是指示灯报警,或是继续检测相关信号,看是否危险事件还存在。
C2是当没有危险情况出现了,那么就清除OST事件。
Eric
最近使用TI 提供的DEMO板(DSP28027移相全桥控制),TI官方提供例程(路径controlSUITE-development_kits-HVPSFB_v1.1-HVPSFB_PCMC-HVPSFB-Main.c)中有两个问题:问题1:在 A1()(定期的执行的函数)函数中有这样的一个语句:if ( (*ePWM[1]).TZFLG.bit.OST == 1 ),有点不太明白:程序为什么要定期查询这个标志位,做什么用。问题2:C2()函数中有这些语句:
if (input_good == 80)
{ EPwm1Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm2Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm4Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
}
TI提供的后面的解释是“Clear any spurious OC trip”,为什么程序要这样设置,为什么要清除标志位,这样做的目的是什么?望各位高手不吝赐教。小弟在此谢过。
user3681076:
回复 Eric Ma:
首先感谢的您的解释,还有点疑问,贴出程序:
void C2(void)
{if (Gui_Vfbin > 11200 && Gui_Vfbin < 13440) // 350<Vfbin<420
if (input_good >= 100)
{ if (start_flag == 0)
{ VfbSetSlewed = 2093568;
Gui_VfbSet = 12.2*1024;
start_flag = 1;
}
}
else
{ input_good++;
if (input_good == 80)
{ EPwm1Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm2Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm4Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
}
}
}
else…………
在C任务中,首先是判断输入电压是否在350~420之间,在此范围的话,在进行计数,使用input_good标志位,我的疑问是,为什么要技术到80时,要清楚OST事件标志位,后面官方给出的解释是Clear any spurious OC trip,我是不太明白,为什么要在80的时候清标志位,请您解释下。小弟在此谢过。
最近使用TI 提供的DEMO板(DSP28027移相全桥控制),TI官方提供例程(路径controlSUITE-development_kits-HVPSFB_v1.1-HVPSFB_PCMC-HVPSFB-Main.c)中有两个问题:问题1:在 A1()(定期的执行的函数)函数中有这样的一个语句:if ( (*ePWM[1]).TZFLG.bit.OST == 1 ),有点不太明白:程序为什么要定期查询这个标志位,做什么用。问题2:C2()函数中有这些语句:
if (input_good == 80)
{ EPwm1Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm2Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm4Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
}
TI提供的后面的解释是“Clear any spurious OC trip”,为什么程序要这样设置,为什么要清除标志位,这样做的目的是什么?望各位高手不吝赐教。小弟在此谢过。
wang wang hongxing:
回复 user3681076:
看这个程序也有两三周时间了,以下是我的理解,不知是否理解透彻:
这个计数值设定为80是执行80次循环,(每(0.5us*2)执行一次),也就是为100次循环(0.1ms)时执行start_flag=1做准备。
程序中采用了两个COMP模块,comp1执行的斜率补偿功能来控制PCMC电流控制功能,另一个COMP2执行一次性的TPIP跳闸操作。
在汇编代码中,对EPWM1的UP段和DOWN段怎么处理做了明确:UP段由EPWM1A和EPWM2B配对才有功率输出,所以有OST出现时EPWM2B 会FORCE_LOW,DOWN段由EPWM1B和EPWM2A配对才有功率输出,所以有OST出现时EPWM2A 会FORCE_LOW。
对同步整流的处理分轻载,中载和重载分别处理:轻载时关闭同步整流输出,中载时只有重叠输出时才打开对应整流MOS,重载时只有对方重叠时才关闭整流MOS输出。
TRIP_UP(74)和TRIP_DOWN(PRD-68)的执行时为下次COMPB的同步信号输出,以及下次中断信号发生做准备。
汇编中剩下的就是AD采样,2P2Z和DAC_RAMP的调用,没什么特别之处。
最近使用TI 提供的DEMO板(DSP28027移相全桥控制),TI官方提供例程(路径controlSUITE-development_kits-HVPSFB_v1.1-HVPSFB_PCMC-HVPSFB-Main.c)中有两个问题:问题1:在 A1()(定期的执行的函数)函数中有这样的一个语句:if ( (*ePWM[1]).TZFLG.bit.OST == 1 ),有点不太明白:程序为什么要定期查询这个标志位,做什么用。问题2:C2()函数中有这些语句:
if (input_good == 80)
{ EPwm1Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm2Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
EPwm4Regs.TZCLR.bit.OST = 1; // Clear any spurious OC trip
}
TI提供的后面的解释是“Clear any spurious OC trip”,为什么程序要这样设置,为什么要清除标志位,这样做的目的是什么?望各位高手不吝赐教。小弟在此谢过。
user3681076:
回复 wang wang hongxing:
嗯,谢谢您的回复,不过好像没有回答我的问题。