在前一篇文章中,说明了电磁炉是如何检锅的。当检测到有锅具后,则一个标志位表示有锅。现有一个问题,如检测到有锅具后,突然颠锅、移锅后,如何判断是无锅具呢?
可以通过检测电流来判断!电磁炉最低工作电流约3A,也就是大概五六百瓦的样子,所以在工作中,如检测到电流小于2A,则认为无锅。
但在启动期间,电流还小于2A,所以要屏蔽此期间的电流检测。
只要在上一文提到的程序,稍加修改,便可以达到目的。详见程序的最后几行:
void FzCheck(void)
{
uchar i = 13;
uchar j = 0;
uchar k = 0;
if(Test_NoAd) return; //如果当前处于禁止控制状态,则不予处理
if(Test_NoFz) //无锅检测
{
if(Delay_3s == 0) //3S检测
{
CCAP0H = PWM50DUTY; //PWM0的占空比为50% ((64-32)/64)
Set_IGBTOff; //关IGBT
Set_PzCheck; //锅具检测口置高
while(i--); //等待8us
i = 13;
Delay_3s = 3;
EA = 0;
Clr_IGBTOff; //开IGBT
_nop_();
_nop_();
Clr_PzCheck; //锅具检测口拉低
while(i--); //等待8us
Set_PzCheck; //输出高电平准备读
Set_IGBTOff; //关IGBT
for(i = 0; i < 255; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
if(Test_PzCheck) j++;
else k++;
}
EA = 1;
if(k < 100)
{
i = 13;
Clr_NoFz; //设置有锅
Clr_IGBTOff; //开IGBT
_nop_();
_nop_();
Clr_PzCheck; //锅具检测口拉低
while(i--); //等待8us
Set_PzCheck; //输出高电平准备读
}
}
}
else //有锅
{
if((Delay_3s == 0)&&(Cur_Val < CUR_FZ))
{
Set_NoFz;
Set_IGBTOff; //关IGBT
}
}
}
if((Delay_3s == 0)&&(Cur_Val < CUR_FZ))这句话是待启动工作3秒后,再进行电流判断,电流小于设定值后,则标志设置为无锅。
用户424103 2014-5-28 09:11
用户1527862 2014-5-16 09:00
用户377235 2014-5-14 21:52