火灾是人类面临的最大威胁之一,火灾探测对防御火灾具有举足轻重的作用。光电感烟探测器是目前消防中使用的主要探测器之一。光电感烟探测器分为两大类:其中“线型光电感烟”是利用烟雾对光束能量的衰减原理制成的光电感烟探测器,该探测器正常工作需要比较长的空间距离,所以称之为“线型”,否则,烟雾对光束能量的衰减太小不能获取足够的报警信息;“点型光电感烟”是利用烟雾对光束的散射原理制作的光电感烟探测器,该探测器总体积不超过10×10×10cm,所以称之为“点型”。本文主要介绍基于PIC16F676单片机的点型光电感烟探测器的设计方法。
1 点型光电感烟原理
点型光电感烟探测器是“主动”式探测器,其工作原理见图1。没有烟雾时,由于光学迷宫的特殊设计(即红外发光二极管与光电接收二极管的轴向夹角成钝角等等),光电接收二极管不能直接接收到红外发光二极管(在火灾报警领域主要采用红外波段,波长在900nm左右)发射的光信号,当有火灾发生时,烟雾扩散到探测器的迷宫之内会对红外发光二极管的发射光产生散射,从而使光电接收二极管能够接收到散射光信号,光信号的大小标志着烟雾浓度,也标志着火灾燃烧的程度。
光学迷宫的主要功能是阻止外部的杂散光进入光电接收二极管的探测领域,吸收内部杂散光信号以降低本底,同时保证烟雾的通畅进入。总之,光学迷宫的作用是保证没有烟雾进入迷宫时放大器的输出信号(本底信号)最小,而当有烟雾进入迷宫时,光电接收二极管能接收到足够的被烟雾散射的光信号,然后经过放大和识别以形成报警信号。
2 PIF16F676单片机的模数转换
PIC16F676单片机有8个模数转换输入通道,共用一套采样、保持、模数转换电路。其中模数转换电路负责把模拟信号转换成10位数字信号。与模数转换模块相关的寄存器主要有ADCON0、ADCON1、AB-SEL、ADRESH、ADRESL。寄存器的位定义及其相应功能简介见表1。如果模数转换的时钟源采用内部晶振,则该模数转换电路还可以工作在单片机的睡眠模式。
表1 与模数转换模块相关的主要寄存器
寄存器名称 | 寄存器位定义 |
寄存器位功能简介 |
BIT7(ADFM) | 规定模数转换生成的10位二进制数据的保存方式 | |
BIT6(VCFG) | 规定模数转换采用的参考电压 | |
BIT5(未用) | ||
模数转换控制寄存器0 ADCON0 |
BIT4(CHS2) BIT3(CHS1) BIT2(CHS0) |
BIT4~BIT2联合起来规定模数转换的通道选择,因为PIC16F676共有8个模数转换输入通道 |
BIT1(GO/DOWN) | 标志着模数转换是否完成 | |
BIT0(ADON) | 模数转换正在进行还是被关掉 | |
BIT6(ADCS2) | BIT6~BIT3联合起来规定模数转换模块采用的时钟 | |
模数转换控制寄存器1 ADCON1 |
BIT5(ADCS1) | |
BIT4(ADCS0) | ||
其它数据位 | 未用 | |
模拟输入选择寄存器ABSEL | 所有数据位 | 因为PIC16F676共有8个模数转换输入通道,该通道还可以用作普通的I/O口,该寄存器用于设定管脚如何使用 |
模数转换结果存储寄存器ADRESH、ADRESL | 所有数据位 | 两个寄存器联合存储最终转换生成的10位二进制数据 |
假设对模数转换模块的使用要求是:放大信号由模拟输入通道管脚PIN7(RC3/AN7)输入;模数转换生成的10位二进制数据从寄存器ADRESH的最高位开始存放;模数转换模块采用的参考电压是单片机工作电压VDD,采用的时钟取自内部晶振;则寄存器的部分设置程序如下:
;以下6句对模数转换模块相关寄存器进行初始化
MOVLW B'00011100';
MOVWF ADCON0;
MOVLW B'01110000';
MOVWF ADCON1;
MOVLW B'10000000'; ?
MOVWF ABSEL;
以下是模数转换模块完成一个完整的模数转换所采用的程序片断:
BSF ADCON0,ADON;
;以下4句完成模拟数据的采样延时
MOVLW SAMPLE TIME
MOVWF TEMP0
FOR_SAMPLE DECFSZ TEMP0,1
GOTO FOR_SAMPLE
;以下3句监测模数转换过程的完成与否
BSF ADCON0,GO_DONE
;启动模数转换
CONVERTING BTFSC ADCON0,GO_DONE
GOTO CONVERTING
BCF ADCON0,ADON ;关闭模数转换
3 探测器与总线的接口
该探测器与总线的接口包括编码输入电路和回执输出电路。
3.1 编码输入电路
编码输入电路是总线与探测器的接口,用于把总线编码的电平幅度(一般24V)降低到适合单片机输入的要求(一般5V)。由于输入编码信号经过远距离长线传输后,部分信号会发生畸变。故应用编码输入电路对总线编码信号进行滤波,以消除总线干扰,同时可利用比较器电路对输入编码信号做整形。一般情况下,为了降低成本,该比较器可用分离元件搭建,而单片机PIC16F676内部恰好集成了一个功能强大的比较器,该比较器的正向输入是单片机的管脚13(RA0/AN0/CIN+), 反向输入为单片机的管脚12(RA1/AN1/CIN-),输出是管脚11(RA2/AN2/COUT)。与此比较器相关的寄存器有CMCON和VRCON,具体功能参见表2。
表2 与比较器模拟相关的关键性寄存器
寄存器名称 | 寄存器位定义 | 寄存器位功能简介 |
比较器控制寄存器CMCON | BIT7(未用 | |
BIT6(COUT) | 比较器的输出位,该位数值就是比较器的输出结果 | |
BIT5(未用) | ||
BIT4(CINV) | 控制比较器的输出结果是否反向 | |
BIT3(CIS) | 控制输入信号是从RA1(CIN1)还是RA0(CIN+)输入 | |
BIT2(CM2) | ||
BIT1(CM1) | BIT2~BIT0联合控制八种比较器I/O口工作模式的选择 | |
BIT0(CM0) | ||
比较器参考电压控制器VRCON | BIT7(VREN) | 参考电压启动控制位 |
BIT6(未用) | ||
BIT5(VREN) | 参考电压范围选择控制位 | |
BIT4(未用) | ||
BIT3(VR3) | BIT3~BIT0联合控制参考电压的具体设置 | |
BIT2(VR2) | ||
BIT1(VR1) | ||
BIT0(VR0) |
如果对比较器的使用要求是:模拟信号由单片机管脚12(连接比较器的负向)输入;参考电压选自片内参考电压(参考电压设定为3V)(连接比较器的正向);比较器的输出结果不反向(即比较器正向输入大于负向输入则比较器输出高电平,反之输出低电平),则此与比较器相关的寄存器CMCON、VRCON设置程序如下:
MOVLW B'00010011' ;选择比较器模式011
MOVWF CMCON
MOVLW B'10101110' ;选择参考电压1110(其十进制是14)14/24×5=3V
MOVWF VRCON
3.2 回执输出电路
回执输出电路用于把探测到的代表烟雾浓度的数字信号通过总线回送到控制器。单片机信号一般为5V,总线上的信号大于20V。回执输出电路必须进行电平转换,并使信号有足够的总线驱动能力。
4 探测器的地址读写
火灾报警控制器通过总线上的地址编码来识别各个探测器。以往探测器的编码是依靠机械式拨码开关实现的。由于拨码开关寿命短、易损坏而且成本较高,因此现在多采用串行EEPROM来存储探测器地址。同时,探测器工作过程中的其它重要数据也需要存储保留,所以更有必要使用串行EEP-ROM。而单片机PIC16F676本身恰好内置有128字节的串行EEPROM,因此使用PIC16F676有助于简化电路设计、降低成本。与PIC16F676片内串行EEPROM有关的寄存器主要有EEDAT、EEADR、EECON1、EECON2(EECON2不是一个物理可用的寄存器)。其具体功能见表3所列。
表3 与PIC16F676内置EEPROM相关的寄存器
寄存器名称 | 寄存器位定义 | 寄存器位功能简介 |
EEPROM数据寄存器EEDAT | 所有数据位 | 用于暂时存储操作的目标数据 |
EEPROM地址寄存器EEADR | 所有数据位(7位) | 用于暂时存储目标数据的地址 |
EEPROM控制寄存器EECON1 | BIT7~BIT4(未用) | |
BIT3(WRERR) | 写操作完毕还是被复位行为中断 | |
BIT2(WREN) | 允许还是禁止写周期 | |
BIT1(WR) | 启动还是禁止写过程 | |
BIT0(RD) | 启动还是禁止读过程 |
因为片内EEPROM的最大空间是128字节,所以EEADR寄存器仅使用到前7位,最高位不用。其中EECON1用于实现对串行EEPROM的具体操作命令。下面是部分读取地址的操作程序:
?与串行EEPROM有关的寄存器全部在数据存储器的第一分区中
BSF STATUS?RP0
MOVLW .0 ;假如内置EEPROM的.0地址用于存储探头地址
MOVWF EEADR
BSF EECON1?RD ;启动“读”命令
MOVF EEDATA,W
MOVWF NODE ;假如数据寄存器NODE用于暂时存储读出的地址数据
存储地址的操作程序片断举例:
BSF STATUS,RP0 ;Bank 1
MOVLW .0 ;假如内置EEPROM的.0地址用于存储探头地址
MOVWF EEADR ;Address to read
MOVLW .1 ;假如探头地址为“1”
MOVWF EEDATA ;Move data to w
BSF STATUS,RP0 ;//DATA EEPROM WRITE//
BSF EECON1,WREN ?;启动“写”的使能命令
BCF INTCON,GIE ;暂时关闭全局中断以执行下列5句命令
;以下5句相当重要并且必要,否则“写操作”不能初始化。
MOVLW B′01010101′;
MOVWF EECON2 ;
MOVLW B′10101010′; ?
MOVWF EECON2;
BSF EECON1,WR ;启动“写”命令
?以上5句相当重要并且必要,否则“写操作”不能初始化。
BSF INTCON,GIE ; 打开全局中断
BCF EECON1,WREN ; 完成“写操作”之后关闭“写”的使能命令
5 基于PIF16F676的感烟探测器
图3是采用PIC16F676单片机设计的光电烟探测器的硬件结构框图。
图4是该光电感烟探测器的工作程序框图。表4简要注解了图4所示的程序流程图中所使用的程序模块的具体功能。
表4 程序流程图中程序模块的功能定义
程序模块名称 | 程序模块完成的功能 |
模块1 | 完成对主机发出的编码信号的解码 |
模块2 | 驱动发光电路、放大电路 |
模块3 | 对光点二极管的放大输出信号进行模数转换、抗干扰处理 |
模块4 | 对主机输出回答信号 |
模块5 | 点亮探测器指示灯 |
模块6 | 熄灭探测器指示灯 |
6 结束语
本文详细介绍了基于PIC16F676的点型光电感烟探测器的设计原理和方法,重点介绍了单片机PIC16F676的转换功能及其在探测器设计中的应用方法和程序,最后给出了探测器的系统硬件及软件设计流程。该光电感烟探测器不仅功耗很低、设计简单,同时利用单片机有助于探测器的智能化探测。