第4章 系统软件设计
本次设计用Keil编程软件进行软件设计。Keil软件是目前最流行的开发系列单片机软件,近年来各仿真机厂商纷纷宣布全面支持Keil。它提供了包括C 编译器、宏汇编、连接器、库管理和仿真调试器在内的完整开发方案,通过集成开发环境将这些部分组合在一起。Keil支持汇编语言和C语言的程序设计,易学易用。
4.1 主程序流程图
系统主程序首先要给传感器预热三分钟,因为MQ-2型半导体电阻式烟雾传感器在不通电存放一段时间后,再次通电时,传感器不能立即正常采集烟雾信息,需要一段时间预热。程序初始化结束后,系统进入监控状态。本论文的主程序设计先对传感器预热三分钟, 预热同时,对传感器加热丝故障检测,采用软件方式检测传感器加热丝或电缆线是否断线或者接触不良。
AT89S52单片机对传感器检测的烟雾浓度信号进行AD转换、平均值法滤波、线性化处理后,将浓度值与报警限设定值相比较,判断是否报警。同时送入段式液晶显示烟雾浓度值。主程序还包括状态指示灯及按键功能设置,中断子程序等,使报警器功能更加完善,主程序流程图如图4-1所示。
4.2中位值平均滤波法数字滤波流程图
在烟雾传感器对烟雾浓度采样时,可能会遇到尖脉冲干扰的现象。干扰通常只影响个别采样点的数据,此数据与其他采样点的数据相差比较大。
如果采用一般的平均值法,则干扰将“平均”到计算结果上去,故平均值法不易消除由于脉冲干扰而引起的烟雾浓度采样值的偏差。
为此,可采取中位值平均滤波法(又称防脉冲干扰平均滤波法),先对N个采样数据进行比较,去掉其中的最大值和最小值,然后计算余下的N–2个数据的算术平均值。这种方法既可滤去脉冲干扰又可滤去小的随机 干扰。保证报警器
检测烟雾浓度的准确性,减小误报、错报的可能。
在实际应用中,N可取任何值,但为了加快测量计算速度,本论文数字滤波的设计中N取10。即调用AD连续进行10次采样,去掉其中的最大值和最小值,计算其余8个值的平均值,将这个平均值送入寄存器。 中位值平均滤波法的程序流程图如图4-2所示。
4.3插值法线性化处理子流程图
在单片机测控系统中,使用之前必须进行静态标定,以得到输出信号与被测信号的关系输出曲线,用来作为使用过程中的计量依据。但是标定时输出曲线往往不是一条理想的直线,所以要对标定曲线进行线性化处理,用一条拟合直线近似代替输出曲线,线性化是智能仪表的典型功能之一。该报警器主要针对甲烷烟雾检测,在软件线性化处理时,以传感器对甲烷的响应曲线为依据。
本论文报警器使用的MQ-2型传感器的电阻是随着烟雾浓度的升高而降低的,因此输入单片机的电压也是随之降低的。从单片机采集电压值与烟雾浓度百分比的对应曲线可以看出,电压值与烟雾浓度之间是非线性的关系,为了实时显示烟雾浓度.需要对其进行线性化处理。在误差许可范围内,根据标定曲线形状,以及单片机处理能力,把曲线分 成若干小段,对每小段分别线性化。
根据分段线性插值法求输入单片机的某一电压值对应的烟雾浓度的公式如下:
f(x)?f(xi)?(x?xi)*[f(xi?1)?f(xi)]/(xi?1?xi) (4-1)
式中 i=1,2,3…N;
N-----所分区间个数; -----实际烟雾检测浓度;
-----实际气体检测浓度对应的电压值; -----区间的下限浓度对应电压值; -----区间的上限浓度对应电压值; -----区间下限烟雾浓度值;
-----为区间上限烟雾浓度值。
根据公式4-1设计分段插值法线性化程序流程图如图4-3所示。
图4-3 插值法线性化处理子程序设计及流程图
4.4报警子程序流程图
当烟雾浓度超过报警设定值时,报警器发出一种近似警笛的鸣叫声,对应通道的红灯闪亮,以提示操作人员采取安全对策或自动控制相关安全装置,从而保障生产安全,避免火灾和爆炸事故的发生。为防止误报,在程序设计上,对烟雾浓度进行快速重复检测和延时报警,以区别出是管道中烟雾的泄漏,还是由于暂短打开阀门产生的可燃烟雾的微量散失,防止误报。报警子程序流程图如图4-4所示。
图4-4 报警子程序流程图