基于单片机的二氧化碳浓度测量及播报系统.docx

上传人:b****7 文档编号:8766780 上传时间:2023-02-01 格式:DOCX 页数:25 大小:467.33KB
下载 相关 举报
基于单片机的二氧化碳浓度测量及播报系统.docx_第1页
第1页 / 共25页
基于单片机的二氧化碳浓度测量及播报系统.docx_第2页
第2页 / 共25页
基于单片机的二氧化碳浓度测量及播报系统.docx_第3页
第3页 / 共25页
基于单片机的二氧化碳浓度测量及播报系统.docx_第4页
第4页 / 共25页
基于单片机的二氧化碳浓度测量及播报系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机的二氧化碳浓度测量及播报系统.docx

《基于单片机的二氧化碳浓度测量及播报系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的二氧化碳浓度测量及播报系统.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机的二氧化碳浓度测量及播报系统.docx

基于单片机的二氧化碳浓度测量及播报系统

引言

我们的地球被一层大气包围着,其中氧气占21%,78%是氮气,1%是其它气体。

这1%气体当中,就有只有一小部分为二氧化碳气体,约为300ppm(百万分之一,即%)。

虽然含量较少,但是二氧化碳的作用缺越来越受到高度的重视。

大气二氧化碳持续增加,从而对整个地球的气候产生重大影响,让人们对二氧化碳这一微量气体有了新的认识。

另一方面,做为植物光和作用的原料气体,二氧化碳的应用技术水平对农业大国来说也是至关重要。

在办公室的公共场合,二氧化碳测量也十分必须。

二氧化碳在空气中的含量越高,对人体的影响就越大,当二氧化碳含量高出%时,人体就会感到不舒服,当二氧化碳含量超过10%时,人体就会出现昏迷和死亡。

达到20%,人就会在几秒内死亡。

因此在人群比较密集的地方,二氧化碳含量是一个非常重要的参数,直接关系到人体舒适度和安全。

当代电子技术飞速发展,大规模集成电路不断普及应用,给人们的生活带来巨大的变化。

同时人们对于自己的生活质量要求也不断提高。

如何根据实际需求设计二氧化碳浓度测量系统就成为一个具有现实意义的课题。

传感技术应用的领域越来越广泛,同时对其的要求也越来越高,需求越来越迫切。

二氧化碳传感器的技术研究也越来越成熟,产品的性能也越来越高。

同时,语音芯片应用不断普及,语音芯片产品的发展也十分迅速,新型号的语音芯片的功能更加强大。

这使得设计一个二氧化碳浓度测量系统在技术层面上的难度逐渐降低。

本文中设计的系统,正是针对人群密集公共场所对二氧化碳浓度测量需求而设计。

该系统能够对公共场合的二氧化碳浓度进行测量,并且能将测得浓度显示和语音播报,当浓度过高时还可以向办公室等公共场所的人员进行报警提示,使得能及时提醒人员通风以降低二氧化碳浓度。

公共场所二氧化碳浓度播报器围绕AT89S52来作为核心控制元件设计整个系统,通过外围电路的设计,利用液晶和语音芯片实现对二氧化碳浓度的现实以及播报。

本系统,具有成本低,技术开发难度小,适用性、灵活性较好,具有一定得应用性。

 

1设计方案

二氧化碳语音播报器,顾名思义,即该系统实现的功能为对二氧化碳浓度的测试同时对其浓度进行播报。

二氧化碳浓度通过传感器转化成电量信号,再通过单片机进行采集处理。

系统中的核心控制单元为单片机,围绕单片机设计相应系统需求功能模块。

1.1系统需求分析:

系统需求分析主要是通过系统要求实现的功能对各个模块部分应该所具备的功能进行分析。

本系统基于AT89S52单片机,实现对于室内二氧化碳的浓度测量及及时播报。

系统的所需要的功能有:

实现对二氧化碳浓度的测量;语音播放功能;按键控制;LCD显示功能。

对于各部分性能有以下4点要求。

(1)LCD显示器正确测量结果,测量结果动态变化,并且可以控制切换设置界面菜单;

(2)二氧化碳浓度定时播报,可以通过按键控制进行播报,可以实现对浓度值的正确播报;

(3)系统出现异常可以复位;

(4)系统具有按键控制功能。

方案设计

1.2.1数据采集

通过信号采集电路,主要是将二氧化碳的浓度值这一非电量信号转化为模拟电信号再转化为能通过单片机处理的数字量。

因此前向通道由传感器、信号放大电路和AD转化电路组成。

1.2.2控制部分

本系统中控制信号主要是用来设置定时播报时间和报警浓度限值以及按键控制语音播报,根据实际功能的需求,可以通过软件使按键的功能灵活使用,仅需独立按键即可以达到控制功能。

1.2.3显示部分

因为有不同的设置功能要实现,用LCD显示比较方便,可以切换不同设置界面和二氧化碳浓度显示界面。

1.2.4语音播报

单片机控制语音芯片来进行语音播报。

每次播报的内容中有很多是重复的,只有二氧化碳的浓度值是变动的。

因此通过单片机来动态调动语音芯片内

的语音内容实现相应的播报内容。

设计框图

基于以上的功能分析和设计的方案。

单片机输入端接收传感器的测量信号和键盘控制信号,输出端控制液晶显示和音乐芯片音乐芯片驱动扬声器放音。

设计框图如下:

 

图系统总体框图

二氧化碳浓度为非电量信号,不能由单片机直接处理,要先经过传感器,将二氧化碳浓度(非电量信号)转化电压信号(电量信号)。

然后由单片机进行数据处理,将采集到得电压信号转化成对应的二氧化碳浓度值。

再通过单片机控制液晶显示浓度值,并控制语音芯片进通过扬声器进行语音播报。

按键向单片机提供控制信号,控制单片机实现报警浓度设置功能。

 

2硬件设计

本应用系统的硬件电路设计包含4部分内容:

一是信号采集部分;二是控制单元部分;三是液晶显示电路;四是语音电路。

系统的扩展和模块设计应遵循下列原则:

(1)尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性;

(2)外围电路配置的水平应充分满足应用系统的功能要求;

(3)硬件结构应结合应用软件方案一并考虑。

硬件结果与软件方案会产生相互影响,考虑的原则是:

软件能实现的功能尽可能由软件来实现,以简化硬件结构。

但必须注意,由软件实现的硬件功能,其响应时间要比直接用硬件响应来的长,而且占用CPU时间。

所以,选择软件方案时,要考虑到这些因素;

(4)整个系统中相关的器件要尽可能做到性能匹配;

(5)单片机外接电路较多时,必须考虑其驱动能力。

驱动能力不足时,系统工作不可靠,解决的办法是增加驱动能力,增设线驱动器或减少芯片功耗,降低总线负载。

传感器选择及信号采集部分

传感器选择及其性能

测量二氧化碳浓度,传感器的选择十分重要。

传感器的性能直接决定后续电路的设计以及整个系统设计的难度。

因此了解二氧化碳传感器的种类,加以选择十分重要。

目前,国际成熟的二氧化碳传感器有电化学式、半导体陶瓷式、固体电解质式、红外吸收式等四种原理产品。

半导体陶瓷式二氧化碳传感器以其制作简单、成本低廉、抗恶劣环境等特点,受到业内人士的重视。

但是,这种类型的二氧化碳传感器市场上不多,可能技术还不够成熟。

红外吸收式的CO2传感器的精度及稳定性能都很好,但是由于它需要与光学系统组装在一起成为一个完整的装置。

而这种装置体积大,价格高,因此,在一般的公共场合中不方便使用。

电化学式及热传导式的CO2传感器虽然体积小,但是其精度、稳定性及对气体的选择性都不太理想。

且电化学式的CO2传感器还存在着必须在电解质溶液中使用的缺点。

本系统采用的传感器MS4100为固态电解质测量方式,具有对二氧化碳反应灵敏,受温度和湿度影响小,成本低。

二氧化碳传感器相对于其他一般的烟雾传感价格较为昂贵,而且技术相对成熟的产品大多为进口,MS4100在众多二氧化碳传感器中,价格适中,性能比较稳定,器采用原理是固态电解质测量方式,使用时需要预热。

本产品预热时间

为1个小时。

工作电压5伏,与系统其它芯片可以统一供电,同时量程可以满足公共场合测量二氧化碳浓度的需求。

相应时间较快只需5秒,输出电压易于放大,可以使测量电路简化。

而且输出电压与二氧化碳气体浓度成线性关系,使得数据处理较为简单

主要参数:

量程:

0~30,000ppm

工作电压:

5VDC±%

功耗:

至少800mW

输出电势:

430~540mV(0ppmCO2)

准确性:

±5%;

图MS4100二氧化碳传感器

输出电压与气体浓度关系曲线,以及内部原理可见图和图所示。

图传感器灵敏度曲线图图传感器内部结构图

图中浓度与输出电动势(EMF)关系表达式为:

EMF=EMF0-R×Log(Concentration)(2—1)

其中EMF0为co2为0ppm时,输出的电压,一般为470~540mv之间。

R为曲线的斜率,一般在55~75之间。

Concentration代表二氧化碳浓度,单位为PPM。

EMF为实际电压,即为1脚和6脚电压差。

在图中可以知道,传感器电源供电端为3脚和4脚。

此传感器的电源

端为加热器供电,电源接入方向没有要求。

当加热器加热到一定温度时,电解质部分才能和空气中的二氧化碳产生反应,此时1脚和6脚产生电动势。

1脚和6脚的电压满足式(2—1)。

电路中我们可以测得的1脚和6脚的电动势即为EMF。

而公式(2-1)中R和EMF0中都为参数,所以要求的二氧化碳浓度Concentration可从以下公式中求得:

(2—2)

其中EMF0=534,R=65为厂商提供的在温度为25摄氏度,湿度为65%时的标定值。

由于没有标准的二氧化碳浓度测量仪来进行标定,系统中数据处理将采用厂商提供的标准。

二氧化碳传感器的测量浓度单位为:

百万分单位或ppm。

600ppm浓度的二氧化碳意味着:

每1,000,000公升的空气中有600公升的二氧化碳(或在1公升的空气中有毫升的二氧化碳)。

放大电路设计

传感器的输出电动势为1脚和6脚的差值,因此选择用差分放大电路实现对电量信号的放大,同时,AD转换采用ADC0809,其参考电压为正5伏,因此要把信号放大到电压范围内,根据传感器灵敏特性曲线知输出电压范围为(0~540mv),所以电路放大十倍就可以。

放大电路设计如下:

 

图差分放大电路

若设1脚输出电压为,6脚输出电压为,放大电路输出电压为,运放正极电压,运放负极电压,则根据虚短和虚断概念有:

(vi1-vn)/R4=(vn-vo)/R5(2—3)

(vi2-vp)/R1=vp/R2(2—4)

当R4/R1=R3/R2时,Vo=R4*(vi2-vi1)/R1(2—5)

本电路要放大信号十倍,所以R4、R3取20k,R1、R2取2k。

运放6脚输出电压接ADC0809模拟输入端。

本电路选用op07运算放大器,op07是高精度低失调电压的精密运放集成电路,用于微弱信号的放大,如果使用双电源.能达到最好的放大效果。

给op07提供正负12伏电压,而系统中其他部分供电电压为+5伏,通过7805将+12伏电压转化成+5伏,这样外部供电就只需提供正负12伏电压即可。

 

图电压转化电路

模数转化

模数转化采用ADC0809将模拟信号转化成数字信号,提供给单片机处理。

本系统中ADC0809只有一路输入,即二氧化碳传感器的放大信号,所以芯片三条地址选择线直接接地,即只选中IN0通道。

数据端接P0口,其他控制端连接如下图:

 

图ADC0809接口电路

ADC0809控制端口直接接单片机普通I/O口,通过I/O口模拟ADC0809时序,实现对ADC0809的控制,从而获得最终数模转换后的数据。

ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

ADC0809时钟由单片机ALE端4分频后得到,单片机的晶振为12MHz,ALE端为晶振频

率的1/6,即2MHz,所以ADC0809的时钟信号频率为500KHz。

4分频信号可由两级D触发器获得。

控制单元电路

单片机最小系统

AT89S52单片机是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52单片机为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

本系统主要通过IO口来控制个部分电路以及接受信号,32位I/O口控制线足以满足系统功能需求。

AT89S52具有P0、P1、P2、P3四个I/O口。

由于外围电路比较多,所以要合理的利用端口,同一个器件尽量使用同一个I/O端口。

根据这个原则,各模块之间因合理分配。

P0口接ADC0809数据端口,P2口用来控制ADC0809和语音芯片(语音芯片采用端口模拟SPI控制,需要4条I/O口控制线,ADC0809需要3条),P1接液晶数据端,而液晶使能端和键盘控制接P3口。

如图所示。

需要注意的是,P0口作为普通I/0口时需要增加上拉电阻。

键盘控制

根据系统功能考虑,系统的按键控制有以下5个功能。

启动语音播报;

进入播报定时时间设置菜单;

修改时间;

进入报警限值设置菜单;

修改报警数值。

基于以上功能设置键盘按键的功能。

语音播报可以用以个独立按键控制。

关于播报间隔时间和设置报警限值,可以采用一个按键进行功能切换:

按第一次,进入播报时间间隔设置;按第二次,进入设置报警限值;按第三次,退出设置菜单。

然后再用2个键控制数值的增减即可。

基于以上功能设计,可以不必使用4×4键盘,只用独立按键即可,即3个按键直接接单片机I/O口。

这样的好处是可以使得布局简单。

硬件功能的设计要根据具体功能需要,而不是全部都是标准设置。

按键与接口连接如图所示。

 

图单片机控制电路

 

图按键接口电路

3个按键接单片机I/O口,通过对I/O口的电位判断判断否有键按下。

在显示浓度值时,可以通过P34的按键控制语音播报。

在进入设置菜单时,可以通过P33口按键切换菜单,通过P36和P34来上调和下调设置。

液晶显示部分

字符与数字显示部分才用LCD1602液晶显示模块,1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,足够系统需求的功能要求。

每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出

来,我们就能看到字母“A”。

1602采用标准的16脚接口,其中:

第1脚:

VSS为电源地

第2脚:

VDD接5V电源正极

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E(或EN)端为使能(enable)端。

第7~14脚:

D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。

15脚背光正极,16脚背光负极。

根据引脚对应功能,将双向数据端接单片机P1口,控制端接到P3口(使液

晶模块与单片机端口连接全部处于同侧),接口连接设计如下:

 

图液晶模块接口电路

语音电路

本系统中语音播报的内容的特点是有很多内容是相同的,只有每次测量到

得数据,即二氧化碳的浓度是动态测量不断变化。

其他的播报内容中的文字信息也有重复内容,因此要充分利用单片机的控制能力,实现动态控制自动调用语音内容组合成播报内容。

本系统选择了ISD1720语音芯片,是华邦公司新推出的ISD1700系列芯片中的一种。

改系列芯片提供多种功能而且音质较好。

芯片内部包含自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。

芯片特点:

可录、放音十万次,存储内容可以断点保留一百年。

两种控制方式,两种录音输入方式,两种放音输出方式。

工作电压在之间,最高不能超过6V。

用户可以自己根据需求在芯片中在任意地址空间录入所需的播放内容,同时也可以按地址直接调用录好的内容进行播放。

这样就可以满足系统的播报要求。

而语音芯片的外围电路比较简单,仅需一些电阻、电容,电容主要是起到

滤波的作用。

本系统中单片机通过SPI模式控制语音芯片。

主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1720进行串行通信,本系统中通过I/O口模拟串行通信,与单片机的连接仅需4个端口。

系统中将其与连接。

语音芯片接口电路如图所示。

图语音芯片接口电路

语音芯片的语音输出端SP+输出的信号强度有限,所以要通过LM386设计一个放大电路来驱动扬声器工作。

LM386电压增益内置为20,当在1脚和8脚之间加一只外接电阻和电容,可使电压增益最大增益到200。

如图所示,可以通过R12,10k的电位器来控制输出音频的大小5脚作为输出脚与的喇叭相连,为了滤掉低频滤波,减少杂音以及储存能量,在

5脚和喇叭之间需加上一个220UF的极性电容。

为了使喇叭发出的声音柔和动听,要在5脚和地之间接上一个和10欧的电阻。

在7脚和地之间接上一个

10U的电容能滤除噪声。

在这里只选3脚作为输入端,所以另一反相输入端2脚接地。

语音放大电路如图所示。

 

图语音放大电路

3软件设计

应用系统中的应用软件是根据系统功能要求设计的,应该可靠地实现系统的各种功能。

一个优秀的应用系统的软件应具有下列特点:

(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。

设计出软件的总体结构,使其结构清晰、简捷、流程合理。

(2)要树立结构化程序设计风格,各功能程序实现模块化、子程序化。

既便于调试、链接,又便于移植、修正。

(3)建立正确的数学模型。

即根据功能要求,描绘出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。

(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。

(5)注意在程序的有关位置处写上功能注释,提高程序的可读性。

(6)加强软件抗干扰设计,它是提高计算机应用系统可靠性的有利措施。

本系统的软件包括以下几个程序模块:

(1)按键识别程序与处理程序;

(2)ADC0809驱动程序;

(3)LCD显示程序;

(4)语音播报程序;

(5)数据处理部分。

主程序流程图

程序主要要实现的功能:

启动ADC0809进行模数转化,并将所得数据转化成实际的二氧化碳浓度,并且控制液晶显示,控制语音芯片进行语音播报。

程序主流程如图.

 

 

图系统主程序流程图

ADC0809程序设计

ADC0809是典型的逐次比较A/D转换器,通常都是以二进制码输出的,数据的输出符合微处理器数据总线的要求。

控制ADC0809要按照其时序进行。

START为启动转换信号,该信号的上升沿使逐次逼近寄存器复位,从它的下降沿开始进行A/D转换。

ALE是地址锁存信号,在ALE的上升沿,A,B,C被锁入地址锁存器。

OE为允许输出信号:

当OE=1时,三态输出锁存器重的数据被送上数据总线。

EOC为转换结束信号:

当A/D转换结束时,EOC变为搞电平,并将结果送入三态输出锁存器。

硬件电路所有控制端口直接接普通I/O口,通过I/O置高和置低来模拟ADC0809时序。

ADC0809程序流程图

 

图ADC0809程序流程图

ADC0809程序代码主要如下:

AD0809_ST=0;

delay_ms(10);

AD0809_ST=1;

delay_ms(10);

AD0809_ST=0;

while(!

AD0809_EOC);

AD0809_OE=1;

DigitalData=GetResult();

其中GetResult()子程序为读取ADC数据端端口的转化数值。

DigitalData保存所得数据提供单片机处理。

液晶显示程序

显示采用LCD1602模块。

数据与命令都通过D0~D7传入;读写操作时序由使能信号E完成;对读写操作的识别时对R/W信号上的电平判断,R/W的信号的宽度要大于E;RS信号用于识别数据总线的数据是属于指令代码还是属于显示数据。

接口端的信号逻辑功能如下表:

表接口端逻辑功能

RS

R/W

E

DB7~DB0

功能

0

0

高脉冲

指令码

写指令

0

1

高电平

状态字

读状态

1

0

高脉冲

数据

写数据

1

1

高电平

数据

读数据

表状态字输出口

STA7

STA6

STA5

STA4

STA3

STA2

STA1

STA0

D7

D6

D5

D4

D3

D2

D1

D0

表状态字功能说明

STA0-6

当前数据地址指针的数值

STA7

读写操作使能

1:

禁止

0:

允许

上述是基本时序和状态字的功能,其他指令的格式还有很多不一一列举,仅介绍本系统中用到得显示方法。

本系统中无论是二氧化碳的浓度显示还是设置界面的菜单显示,都是只有中间的数字是变化的。

因此可以在初始化液晶显示后,编写一个显示字符串的子程序。

显示内容送字符串数组中,然后送显示,每次只要将字符串里的数值改变即可。

如图所示。

 

图液晶显示流程图

各部分主要程序如下:

液晶初始化程序如下:

voidLCD_init(void)

{

delay(10);

WriteCode(0x80);0C00F09F09F08F0”9”十”4.1.12M12M4.1.24.1.44.2.14.2.24.2.3片机KeilCx51应用开发技术[M].人民邮电出版社.

[2]谭浩强.C程序设计[M].清华大学出版社,2005,104~106.

[3]白驹珩,雷晓平.单片计算机及其应用.高等教育出版社&电子科技大学出版社,2005.

[4]康华光等.电子技术基础模拟部分(第五版).高等教育出版社,2005.

[5]马忠梅.单片机的C语言应用程序设计[M].北京航空航天大学出版社,1999.

[6]劳五一,劳佳编着.模拟电子电路分析、设计与仿真[M].清华大学出版社,.

[7]王秋爽,曾昭龙着.单片机开发基础与经典设计实例.机械工业出版社,2008

[8]松井邦彦.传感器应用技巧(梁瑞林)[M].科学出版社,2006,16~18

[9]Digitallogiccircuitanalysisanddesign.Victor[.]1995byPrenticeHall,Inc.

[10]田立,田清着,51单片机C语言程序设计快速入门.人民邮电出版社出版发行,2007.

 

附录

附录一:

电路原理图

 

 

附录二:

程序清单

主函数程序:

voidmain(void)

{

LCD_init();

ISD_PU();

time0_int();

temp2=0;

temp3=0;

delay(10);

alarm=0;

time=10;

while

(1)

{

AD0809_ST=0;

AD0809_ST=1;

delay(10);

AD0809_ST=0;

while(!

AD0809_EOC);

AD0809_OE=1;

DigitalData=GetResult();

DigitalData=DigitalData*100;

DigitalData=(534-DigitalData)/65;

temp1=pow(10,DigitalData);

sprintf(buffer,"co2:

%uppm",temp1);

LCD_Disp();

while(!

BACK)

{

while(!

BACK);

alarm=showmenu1();

time=showmenu2();

}

while(!

DOWN)

{

bfnd();

}

if(temp3>time*6)

{EA=0;

bfn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1