Design of Fire Alarm System Based on PIC16F87X
引言
火灾报警系统是各行各业必需的一种安全系统网络,可靠的监测与数据传输是该系统非常重要的环节。以往的火灾报警系统经常会出现总线上的数据冲突、长距离数据传输的不可靠以及不易扩展等问题,随着近年来一些低价格、高性能单片机被广泛应用于各个电路系统,尤其是电路控制等方面,这些问题都得到了一定的改善。
本系统采用了美国微芯公司生产的运行速度快、功耗低且驱动能力强的PIC16F87X系列单片机,作为该系统电路的逻辑控制、总线侦听以及数据读取与发送单元,解决了可靠数据监测以及长距离传输所面临的问题,可以准确地远程监视火灾发生地点。
硬件设计
系统硬件电路设计
系统基本工作原理如图1所示。传感器输出的电流信号经过电流转换电压电路变为电压信号,然后由信号放大电路将信号转化为适合模数转换器件(A/D)的输入信号,最后将数字化的采样结果送入单片机PIC16F87X,分析该数据是否已经达到了火灾效应。若分析得到有火灾发生时,先进行总线侦听,当总线“空闲”时则单片机立即读出外部ROM事先存储好的有关室内所有的信息数据(包括报警装置的放置位置),然后发送数据并将这些重要数据送到部门远程监视系统的液晶显示器LCD上,最后输出连续脉冲信号,通过驱动电路驱动报警喇叭以提醒监视人员有火灾危险。
图1 火灾报警系统的总体原理图(略)
传感器介绍及其外围电路的设计
该系统使用的传感器为HS系列一氧化碳电化学气体传感器,以定电位电解为基本原理。当一氧化碳扩散到气体传感器时,其输出端产生电流输出,起着将化学能转化为电能的作用。当一氧化碳气体浓度发生变化时,气体传感器的输出电流也随之成正比变化。
传感器测定范围:0-1000ppm
输出电流:40±10nA/ppm
工作气压:1atm ± 10%
如图2所示,将电流信号转换为电压信号是引入一个电阻R1,将0~40mA的电流信号转换为0~4V的电压信号,然后进行放大滤波。图中OPA637接成电压跟随方式,它的输入阻抗很高,可以减少对R1的分流作用。OP07接成运放电路,可以通过调节Rf的大小来改变运放的闭环增益,以调节为适应于A/D的电压输入范围。
图2 传感器外围电路设计(略)
PIC16F87X的特性
PIC16F87X是微芯(Microchip)公司于1998年年底推出的产品,采用哈佛总线结构,指令单字节化,寻址方式简单,精简指令 集(RISC)技术,仅有35条指令。它运行速度快,功耗低,驱动能力强,具备有USART模块和MSSP模块,程序保密性强,目前尚无其他办法对其直接进行解密拷贝。它的一大特征是片内带有64、128或256字节的EEPROM数据存储器,另外其程序存储器是Flash型存储器,这种存储器可以实现在电路板上直接擦/写程序。
PIC16F87X与外部串型存储器ROM的硬件连接
在选择外部存储器ROM时,由于要在安装报警器前通过单片机将与安装地点有关的重要信息全部写入外部存储器中,所以必须使用容量较大的静态存储器ROM,以便写入尽可能多的数据信息且掉电后数据不易丢失。当有火灾发生时,单片机立即在其RA0口模拟出移位时钟CLK,并输入给外部存储器ROM的CLK引脚,同时RA1口向 SI口发送读 命令,最后从存储器SO输出口读取已经保存好的数据,并立即将这些数据送入部门远程监视系统的显示器上。
在考虑PIC单片机与本系统所选的外部串行存储器AT25F1024的引脚 连接时,由于PIC16F87X供电电源为 V CC =5V,输出为 CMOS电平,即输出 高电平约5V,低电平约0V。但是其 输入为TT L电平,而供电电压为2.7V~3.6V左右的AT25F1024,其V LL 在?0.6V~ 0.3V CC 之间,V IH 在0.7V CC ~V CC +0.5之间 。所以如果将单片机和ROM直接连接, 当单 片机输出高电 平给ROM时,该值将超过ROM的输入门限值,此 刻就有可 能出现无法识别数据或烧毁存储器管脚的情况 。 但是 ,AT25F1024的输出可以直接和单片机相连接,因 为PIC单片机的输入为TTL电平 , 故只 需考虑ROM的输入接口电平匹配问题。同理,输入输出电流也是如此分 析。为了解决接口电平匹配问题,有很多可采用的方法:使用分压电阻分压,通过三级管和CMOS管的开关作用以及其他适合的芯片来调节电压等。
在设计该电路的过程中,由于分压电路易于实现,如图3所示,首先考虑使用电阻分压得到适当的电平送给串行ROM,经调试后可实现数据通信。此电路结构简单,不需要太多的电子元器件,但一般在此情况下使用较少。
图3 使用分压电阻连接单片机和AT25F1024(略)
为了达到更好的通信效果。如图4所示,在此电路中选择了非门芯片74LVC04A,该非门的供电电压在1.2V~3.6V之间,可以和外部ROM使用同一个电源供电,其管脚的高电平电压输入范围在2.0V~5.5V之间,低电平输入为0V左右,可识别单片机的CMOS输出电平。该芯片输出高电平电压约为电源供电电压,低电平电压约为0V左右,所以可串联两个74LVC04A非门将单片机的输出信号转换为AT25F1024可准确识别的输入电压,从而提高了数据的准确传输。
图4 使用非门连接单片机和AT25F1024(略)
避免总线冲突的设计
如图5所示,在本结构中,为了保证正确有效的长距离数据传输,使用了开关管RF634来增加电路的驱动能力,在接收端使用LM393比较器来修正信号,并在其后端连接一个非门7406,用以还原原始信号。
当一个节点需要使用总线时,为了实现总线通信可靠,在有数据需要发送的情况下先侦听总线。在硬件接口上,将报警终端单片机的数据发送引脚TX与其中断引脚INT0相连接,且将RA2口作为接收引脚,通过驱动电路与起侦听作用的单片机的RA3引脚相连接。报警终端网络中的单片机在发送数据前,先探测其RA2口是否保持高电平输入。若有,则表明总线“忙”,等待主控方释放总线;若没有,则表明总线“空闲”,可以发送数据。因主控方在发送数据的同时也将数据传给了中断引脚INT0,起侦听作用的单片机接收数据后,通过其RA3口向报警装置网络中的所有单片机以广播的通信方式发送高电平1。报警终端网 络中的单片机在一直不停地查询其中断引脚INT0是否有电平变化,并同时查询其RA2接收口是否有高电平输入。若单片机的RA2口有高电平输入且又有中断引脚电平变化,则继续发送数据;若只有RA2口有高电平输入但中断引脚INT0没有电平变化,表示其探测到总线正“忙”,则待主控方完成通信交出总线控制权后,再让其得到总线控制权,这样就较好地解决了总线冲突的问题。采用这种工作方式后,系统中已经没有主、从节点之分,各个节点对总线 的使用权限是平等的,从而有效避免了个别节点通信负担较重的情况。总线的利用率和系统的通信效率都得以提升,从而也使系统响应的实时性得到改善。而且,即使系统中个别节点发生故障,也不会影响其他节点的正常通信和正常工作。这样使得系统的“危险”分散,从某种程度上来说,增强了系统的工作可靠性和稳定性。
图5 报警终端电路与起侦听作用的单片机外围电路的硬件连接(略)
在查询INT0引脚的高低电平变化时,宜采用定时器TIMER0来定时,在一个固定的时间内查询INT0引脚是否有高低电平变化。以避免所发送的数据有连续的1或0发送时,INT0引脚无高低电平变化,从而导致主控方停止发送数据。
系统软件设计
软件的主要流程如下:
1)报警装置终端程序:如图6所示,完成系统的初始化工作,开始给模数转换器发送启动转换信号,使之开始工作,将转换后的数据与空气中的一氧化碳浓度(已知数据)相比较,如果其浓度远大于空气中一氧化碳的浓度,则说明有火灾发生,否则,继续进行转换、比较。当判断有火灾发生时,先进行总线侦听,若检测到总线上有数据传输时,则等待总线释放,若没有检测到,则立即从外部ROM里读出数据,进行数据发送。
图6 报警装置终端程序框图(略)
2)侦听电路中的单片机程序:如图7所示,判断是否有数据接收,若有数据接收,则发送数据给远程终端,并同时输出高电平给报警装置单片机的RA2口。
图7 起侦听作用的单片机程序框图(略)
3)数据显示程序:判断是否有数据接收,若有,则初始化LCD,数据写入LCD,显示信息。最后输出连续脉冲信号以驱动报警喇叭。
结论
基于PIC16F87X单片机的报警网络系统,其电路简单、功耗低、电源要求单一、精度高、系统监视范围广,具有检测总线冲突的功能,可以在远程监视系统中显示火灾的具体位置和有关的重要信息。该系统尽可能减少了火灾损失,容易扩展为一台显示器监视较多的报警装置的系统网络,在石油化工、航空、煤炭以及其他易于发生火灾的领域,都具有实用价值。