论文部分内容阅读
可燃物燃烧时候迅速释放出大量的能量,且以红外、紫外射线方式传播,根据这一特性,采用特殊的紫外传感器,及相应的驱动器(例如电荷泵)对紫外射线进行采集,将辐射光强转换成电信号,然后通过微处理器结合特定的软件算法对火焰进行分析后判定是否为火灾。采用状态机处理方式进行软件编程,即可以提高软件运行效率,又可以提高探测灵敏度,将火灾响应速度提到最高。
1.硬件电路
系统主要由紫外传感器、电荷泵、MCU微处理器三部份组成(图1所示)。紫外传感器被电荷泵驱动器加载300V左右高电压后管内稀有气体电离,遇到185~260nm波长的紫外射线后管内部电流形成回路反馈到电荷泵驱动器,经过处理后形成可直接与MCU微处理器对口的TTL逻辑电平信号,再通过软件编程即可实现相关的算法对火焰的紫外射线能量分析,达到探测目的。
图1 系统结构图
2.软件算法之信号采集子函数
MCU微处理器IO采用状态机处理方式实现多线程处理方式进行信号采集,可以降低MCU的内部资源达到响应速度迅速提高采集的灵敏,且不需要特殊的外部中断IO,用普通IO即可采集所输入的TTL信号,可扩展到多路信号采集。
系统运行速度最高为时钟周期,将信号采集子函数放到main()主函数的while()循环中,那么信号采集速度达到了单个时钟周期速度,快速响应避免了漏报的现象出现。
uin8 UvIOFlag,UvPulse;//定义脉冲变量
void UvPulseCol(void)//采集传感器脉冲信号函数,放在main()函数中
{
UvIO=P1^0;
if (UvIO==0)UvIOFlag=1; //状态1
if (UvIO!=0)//状态2
{
if (UvIOFlag==1)//
{
UvIOFlag=0 ;
UvPulse++;//TTL脉冲信号累加
}
}
}
3.求平均子函数
采集10个周期的信号去掉最大最小值后求平均值,能有效地提高抗干扰能力,避免误报漏报的现象发生。
uchar BackAverage(uchar A[10]) //求平均函数(去掉最大最小值)
{
uin8 i,MinA,MaxA,Back,Temp1;
uin16 ADD=0;
MinA=A[0]; MaxA=A[0];
for (i=0;i<10;i++)
{
if (A[i]<=MinA)MinA=A[i];/
if (A[i]>=MaxA)MaxA=A[i]; ADD+=A[i];
}
temp1=ADD-MinA-MaxA; Back=temp1/8;
return Back;
}
4.抗干扰处理算法
紫外传感器对有辐射紫外射线的物体相当敏感,例如烧焊、大功率卤素灯等工作时能发射出大量的紫外射线,针对这些干扰源,我们可以在系统上电初始化时,设备对现场环境干扰元素进行采集,得出环境背景信号基础阀值并保存在存储器中,当设备监视时,有效的火灾探测阀值可以在背景信号的基础上进行比较揉取,当信号达到预定阀值(3~50个脉冲)范围内时候,则输出报警信号,
将火灾算法放在1mS定时器中不需要延时等待,能有效地提高程序运行的效率,达到高的响应探测速度。
uin8 Pot,UvBuf[10],UvBack,Step;
uin16 Timeing;
void SignalDeal(void)//信号处理算法,放在1mS定时器里,
{
Timeing++;
if (Step==0)//状态1:上电初始化,求背景干扰信号
{
if (Timeing>=1000)//采集周期 1000mS
{
UvBuf[Pot++]=UvPulse;
if (Pot>=10)
{
UvBack=BackAverage(UvBuf); //背景信号求平均
Pot=0;Step=2;
}
Timeing=0;UvPulse=0;
}
}
if (Step==2)//状态2:监视状态,有火灾输出报警
{
if (Timeing>=1000)//采集周期 1000mS
{
UvBuf[Pot++]=UvPulse;
if (Pot>=10)Pot=0;
UvAv=BackAverage(UvBuf); //火灾信号求平均
if (UvAv>(3+UvPulseBack))//信号在3~50范围内,达到阀值,则输出报警
{
if (UvAv<(50+UvPulseBack)) Alarm();//輸出报警
}
}
}
}
1.硬件电路
系统主要由紫外传感器、电荷泵、MCU微处理器三部份组成(图1所示)。紫外传感器被电荷泵驱动器加载300V左右高电压后管内稀有气体电离,遇到185~260nm波长的紫外射线后管内部电流形成回路反馈到电荷泵驱动器,经过处理后形成可直接与MCU微处理器对口的TTL逻辑电平信号,再通过软件编程即可实现相关的算法对火焰的紫外射线能量分析,达到探测目的。
图1 系统结构图
2.软件算法之信号采集子函数
MCU微处理器IO采用状态机处理方式实现多线程处理方式进行信号采集,可以降低MCU的内部资源达到响应速度迅速提高采集的灵敏,且不需要特殊的外部中断IO,用普通IO即可采集所输入的TTL信号,可扩展到多路信号采集。
系统运行速度最高为时钟周期,将信号采集子函数放到main()主函数的while()循环中,那么信号采集速度达到了单个时钟周期速度,快速响应避免了漏报的现象出现。
uin8 UvIOFlag,UvPulse;//定义脉冲变量
void UvPulseCol(void)//采集传感器脉冲信号函数,放在main()函数中
{
UvIO=P1^0;
if (UvIO==0)UvIOFlag=1; //状态1
if (UvIO!=0)//状态2
{
if (UvIOFlag==1)//
{
UvIOFlag=0 ;
UvPulse++;//TTL脉冲信号累加
}
}
}
3.求平均子函数
采集10个周期的信号去掉最大最小值后求平均值,能有效地提高抗干扰能力,避免误报漏报的现象发生。
uchar BackAverage(uchar A[10]) //求平均函数(去掉最大最小值)
{
uin8 i,MinA,MaxA,Back,Temp1;
uin16 ADD=0;
MinA=A[0]; MaxA=A[0];
for (i=0;i<10;i++)
{
if (A[i]<=MinA)MinA=A[i];/
if (A[i]>=MaxA)MaxA=A[i]; ADD+=A[i];
}
temp1=ADD-MinA-MaxA; Back=temp1/8;
return Back;
}
4.抗干扰处理算法
紫外传感器对有辐射紫外射线的物体相当敏感,例如烧焊、大功率卤素灯等工作时能发射出大量的紫外射线,针对这些干扰源,我们可以在系统上电初始化时,设备对现场环境干扰元素进行采集,得出环境背景信号基础阀值并保存在存储器中,当设备监视时,有效的火灾探测阀值可以在背景信号的基础上进行比较揉取,当信号达到预定阀值(3~50个脉冲)范围内时候,则输出报警信号,
将火灾算法放在1mS定时器中不需要延时等待,能有效地提高程序运行的效率,达到高的响应探测速度。
uin8 Pot,UvBuf[10],UvBack,Step;
uin16 Timeing;
void SignalDeal(void)//信号处理算法,放在1mS定时器里,
{
Timeing++;
if (Step==0)//状态1:上电初始化,求背景干扰信号
{
if (Timeing>=1000)//采集周期 1000mS
{
UvBuf[Pot++]=UvPulse;
if (Pot>=10)
{
UvBack=BackAverage(UvBuf); //背景信号求平均
Pot=0;Step=2;
}
Timeing=0;UvPulse=0;
}
}
if (Step==2)//状态2:监视状态,有火灾输出报警
{
if (Timeing>=1000)//采集周期 1000mS
{
UvBuf[Pot++]=UvPulse;
if (Pot>=10)Pot=0;
UvAv=BackAverage(UvBuf); //火灾信号求平均
if (UvAv>(3+UvPulseBack))//信号在3~50范围内,达到阀值,则输出报警
{
if (UvAv<(50+UvPulseBack)) Alarm();//輸出报警
}
}
}
}