您好,我最近在学习使用UCD3138HSFBEVM-029开发板,对于UCD3138的过流保护和过压保护机制有些疑问。开发板的过流保护和过压保护代码如下
void init_vout_fault(void) // Analog comparator B { FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_POL = 1; FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_SEL = 0; FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 1; FaultMuxRegs.DPWM0FLTABDET.bit.ACOMP_B_EN = 1; // ACOMP-B will turn off DPWM0 FaultMuxRegs.DPWM1FLTABDET.bit.ACOMP_B_EN = 1; // ACOMP-B will turn off DPWM1 FaultMuxRegs.DPWM2FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM2 FaultMuxRegs.DPWM3FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM3 configure_ovp(); } void init_iout_fault(void) // Using analog comparator E { FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_POL = 1; FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_SEL = 0; FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 1; FaultMuxRegs.DPWM0FLTABDET.bit.ACOMP_E_EN = 1; // ACOMP-E will turn off DPWM0 FaultMuxRegs.DPWM1FLTABDET.bit.ACOMP_E_EN = 1; // ACOMP-E will turn off DPWM1 FaultMuxRegs.DPWM2FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM2 FaultMuxRegs.DPWM3FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM3 configure_iout_ocp(); iout_comp_thresh = FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_THRESH; }
开发板使用了模拟比较器B和模拟比较器E作为过压保护和过流保护的阈值判断比较器,然后通过比较器发送错误信号给DPWM0和DPWM1使其关闭。
但是我在测试时,发现出现过压时,电源能正常关机,保护取消后重启可以恢复运行。如下图:
但是我将输出电流增加到过流保护值时,过流保护并没有触发。当保持电源输出电流不变,此时将过流保护值设置到输出电流以下时,会在一瞬间触发过流保护,电源输出掉电,但是电源马上又自动重启。而此时输出还是在过流保护值以上。如下图所示:
进一步,为了测试我的疑问,我修改了代码,将比较器B和比较器E与DPWM0和DPWM1的连接断开,代码改成如下:
void init_vout_fault(void) // Analog comparator B
{
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_POL = 1;
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_SEL = 0;
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 1;
FaultMuxRegs.DPWM0FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM0
FaultMuxRegs.DPWM1FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM1
FaultMuxRegs.DPWM2FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM2
FaultMuxRegs.DPWM3FLTABDET.bit.ACOMP_B_EN = 0; // ACOMP-B will turn off DPWM3
configure_ovp();
}
void init_iout_fault(void) // Using analog comparator E
{
FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_POL = 1;
FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_SEL = 0;
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_EN = 1;
FaultMuxRegs.DPWM0FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM0
FaultMuxRegs.DPWM1FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM1
FaultMuxRegs.DPWM2FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM2
FaultMuxRegs.DPWM3FLTABDET.bit.ACOMP_E_EN = 0; // ACOMP-E will turn off DPWM3
configure_iout_ocp();
iout_comp_thresh = FaultMuxRegs.ACOMPCTRL2.bit.ACOMP_E_THRESH;
}
奇怪的是,此时仍能正常触发过压保护,过流保护的现象也一致。是不是我对UCD3138的故障保护原理理解有问题?