整理二氧化碳检测仿真之二氧化碳检测仪论文.docx
《整理二氧化碳检测仿真之二氧化碳检测仪论文.docx》由会员分享,可在线阅读,更多相关《整理二氧化碳检测仿真之二氧化碳检测仪论文.docx(23页珍藏版)》请在冰豆网上搜索。
整理二氧化碳检测仿真之二氧化碳检测仪论文
二氧化碳检测仿真
二氧化碳检测仪论文
基于单片机的二氧化碳浓度检测仪设计
摘要随着社会经济的发展,人们生活水平普遍提高,瓜果、蔬菜及花卉的社会需求数量和品质要求也不断提高,特别是大中城市需要周年供应新鲜蔬菜,因此农业温室得到迅速发展。
二氧化碳气体对农作物的生长起着非常重要的作用。
近些年来,我国北方农村形成了以温室大棚为主导的农业产业化,因此,为二氧化碳的增施创造了有利的条件。
由于不同作物所需的二氧化碳浓度不同,在二氧化碳的增施中又难于控制对其量的排放,所以研制二氧化碳浓度检测器并用于温室大棚的农业生产,对提高农业科技含量,促进农业增收,农民增收具有深远的意义。
针对温室二氧化碳浓度,设计了以单片机为核心的温室大棚二氧化碳浓度监控系统。
本文对系统的的软硬件经行了详细的设计,实现了二氧化碳浓度的精确测量。
为了便于系统的调试、修改和改进,采用模块化设计,主要包括数据采集模块、数据处理模块、显示模块。
关键词:
二氧化碳浓度单片机
1项目概况
以STC90C516RD+单片机为主控制器,MG811作为二氧化碳传感器,由LCD1602构成显示模块。
此次设计要求是设计电路简单可靠,尽量选用新型元器件。
为提高效率,缩短开发周期,不仅要仿真电路设计和软件设计,同时还要仿真将两者结合,共同调试,排除各种软硬件故障。
硬件电路的仿真本设计是由Proteus来完成的,Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。
本系统是由Keil单片机开发软件编译系统程序,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。
2设计的目的、意义和背景
利用传统方法对温室环境进行监控,采用人工方法检测和控制,及其浪费人力资源,而且精度低,常常不能达到理想效果。
目前国内推行科学种植技术,对温室大棚采用人工的方法控制温度和湿度,还通过CO2增施肥技术给大棚补充二氧化碳,虽然有科学资料可以借鉴,但是利用人工方法存在着很多弊端[1][2]。
尤其是对CO2浓度的监控,对于温度和湿度的监控,还可以通过温度计和湿度计的读数进行人工操作,而对CO2浓度的监控就没有那么简单。
目前我国大多数大棚所采用的CO2增施肥方法非常笨拙,只是靠人工在固定时间对大棚进行CO2施肥,对CO2施肥的多少无法掌控,而植物对CO2的需求并不是越多越好,有资料表明:
CO2浓度维持在100ppm植物正常进行光合作用,浓度在600-2000ppm光合作用为最佳状态,显然对CO2浓度的控制要得当。
近年来,随着单片机功能的日益强大和计算机的广泛应用,人们对大棚内参数检测的准确性和控制的稳定性越来越高。
本设计就是针对此问题,设计相对准确的、稳定的CO2浓度监控装置,由于系统的灵活性和模块化,可以广泛应用于温室大棚环境监控。
随着传感器和计算机技术的不断进步和完善,CO2检测仪器开始发展起来。
根据国内目前红外二氧化碳气体传感器技术,制作了一种具有广泛开的应用前景,并以其测量范围宽、响应时间快、抗干扰能力强、成本低等特点的CO2气体检测仪[4]。
3方案论证
分析二氧化碳浓度检测仪的工作原理,提出二氧化碳浓度检测的整体方案,整个方案包括3个模块:
二氧化碳浓度检测模块、数据处理模块、显示模块,以单片机STC90C516RD+作为核心控制芯片。
3.1二氧化碳传感器选择
二氧化碳传感器可由以下几种方案可供选择:
方案一:
TGS4160二氧化碳传感器。
方案二:
NDIR红外气体传感器MH-410V/D。
方案三:
MG811二氧化碳传感器。
对于方案一,TGS4160具有体积小、寿命长、耐高温高湿等特点[5]。
可广泛用于自动通风换气系统或是CO2气体的长期监测等应用场合,市场价格在400元左右。
对于方案二,MH-410V/410DNDIR红外气体传感器是一个通用型、智能型、微型传感器,该传感器利用非色散红外(NDIR)原理对空气中存在的CO2进行探测,具有很好的选择性,无氧气依赖性,性能稳定、寿命长[6]。
虽然红外传感器的功能较好,但红外传感器价格较高,性价比低。
对于方案三,MG811二氧化碳传感器不但具有体积小、寿命长的特点外,对CO2有良好的灵敏度和选择性,受温湿度的变化影响较小,好的稳定性[7],市场价在200元左右。
MG811灵敏度高,精度高,价格低,可以满足本次设计的需求,所以本系统采用方案三。
3.2显示
方案一:
采用数码管显示二氧化碳浓度,动态扫描显示方式。
方案二:
采用液晶显示屏LCD显示二氧化碳浓度。
对于方案一,该方案成本低廉,显示温度明确醒目,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。
不足的地方是扫描显示方式是使五个LED逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20MS,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。
对于方案二,LCD的优点主要包括零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。
液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是LED数码管无法比拟的。
但是液晶显示模块价格相对于数码管比较昂贵,容易受到外界环境的影响:
阳光、灰尘、温度等,使用寿命短。
LCD1602双行16字符显示基本满本设计的需求,所以本系统采用方案二。
3.3单片机选择
方案一:
采用AT89S52单片机。
方案二:
采用STC90C516RD+单片机。
对于方案一,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容[8][9]。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash。
对于方案二,STC90C516RD+具备AT89S52的功能并且全兼容AT89S52单片机,运行速度更快。
而且设计所提供的是以STC90C516RD+为核心的开发板。
综合考虑本系统采用方案二。
3.4A/D转换选择
方案一:
采用ADC0809。
方案二:
采用PCF8591。
对于方案一,ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
对于方案二,PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。
PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。
在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
综合考虑本系统采用方案二。
3.5选定方案
按照系统的设计功能要求,本系统的设计必须采用单片机软件系统实现,初步确定设计系统由二氧化碳浓度检测模块、数据处理模块、显示模块共3个模块组成,电路系统框图如图3-1所示。
图3-1系统框图
4硬件系统设计及简介
系统主要部件包括MG811二氧化碳传感器、STC90C516RD+单片机、LCD液晶显示、PCF8591。
4.1STC90C516RD+单片机
STC90C516RD+系列单片机是宏晶科技推出的新一代高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。
STC90C51RD+单片机管脚如图4-1所示
图4-1单片机管脚图
各管脚功能:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口。
P3.0:
RXD(串行输入口);P3.1:
TXD(串行输出口);P3.2:
/INT0(外部中断0);P3.3:
/INT1(外部中断1);P3.4:
T0(记时器0外部输入);P3.5:
T1(记时器1外部输入);P3.6:
/WR(外部数据存储器写选通);P3.7:
/RD(外部数据存储器读选通)。
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
4.2MG811
MG811对CO2具有很高的灵敏度和良好的选择性,探测范围为0~10000ppm,使用寿命长,快速的响应恢复特性,性能稳定可靠,有5个引脚分别是VCC(电源正输入)、DOUT(TTL信号输出)、AOUT(模拟信号输出)、GND(电源负输入)、TCM(温度补偿输出),工作电压为DC6V,双路信号输出(模拟量信号和TTL高低电平信号),具有TTL电平信号灯输出指示,,TTL电平输出有效信号为低电平,模拟量输出电压0-2V,浓度越低输出电压越高。
实物图如图4-4所示。
图4-2MG811实物图
4.2.1MG811工作原理
本传感器采用固体电解质电池原理,由下列固体电池构成:
空气,NASICON,碳酸盐,CO2。
原理图如图4-3所示。
图4-3MG811原理图
当传感器置于CO2气氛中时,将发生以下电极反应:
负极:
2Li++CO2+1/2O2+2e-=Li2CO3
正极:
2Na++1/2O2+2e-=Na2O
总电极反应:
Li2CO3+2Na+=Na2O+2Li++CO2
传感器敏感电极与参考电极间的电势差(EMF)符合能斯特方程:
EMF=Ec-(RxT)/(2F)ln(P(CO2))
上式中:
P(CO2)—CO2分压;Ec—常量;R—气体常量;T—绝对温度(K);F—法拉第常量。
元件加热电压由外电路提供,当其表面温度足够高时,元件相当于一个电池,其两端会输出一电压信号,其值与能斯特方程符合得较好。
元件测量时放大器的阻抗须在100—1000GΩ之间,其测试电流应控制在1pA以下。
灵敏度特性:
图4-4给出了传感器的灵敏度特性曲线。
温度:
28℃、
相对湿度:
65%、
氧气浓度:
21%
EMF:
元件在不同气体,不同浓度下的输出电势
图4-4MG811灵敏度曲线图
响应恢复特性:
图4-5为MG811响应恢复曲线图,从图中可以看出固体电解质元件具有较好的响应恢复特性。
图4-5MG811响应恢复图
4.3A/D转换模块
本设计才用的A/D处理是PCF8591,PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。
PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。
在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
管脚图如图4-6所示。
PCF8591原理图如图4-7所示。
图4-6PCF8591管脚图
各管脚功能:
AIN0~AIN3:
模拟信号输入端。
VDD、VSS:
电源端(2.5-6V)。
SDA、SCL:
I2C总线的数据线、时钟线。
OSC:
外部时钟输入端,内部时钟输出端。
EXT:
内部、外部时钟选择线,使用内部时钟时EXT接地。
AGND:
模拟信号地。
AOUT:
D/A转换输出端。
VREF:
基准电源端。
PCF8591具有以下特性:
1、单独供电
2、PCF8591的操作电压范围2.5V-6V
3、低待机电流
4、通过I2C总线串行输入/输出
5、PCF8591通过3个硬件地址引脚寻址
6、PCF8591的采样率由I2C总线速率决定
7、4个模拟输入可编程为单端型或差分输入
8、自动增量频道选择
9、PCF8591的模拟电压范围从VSS到VDD
10、PCF8591内置跟踪保持电路
11、8-bit逐次逼近A/D转换器
12、通过1路模拟输出实现DAC增益
图4-7PCF8591原理图
4.4LCD1602
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,最佳工作电压为5V,工作电流为2.0mA(5V),有8位数据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
LCD1602管脚图如图4-8所示。
图4-8LCD1602管脚图
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脚背光负极。
4.5总设计电路图
图4-9为总体电路图,电路是在Proteus中仿真,由于Proteus中没有STC系列的单片机和MG811,所以STC90C51RD+单片机用AT89S52代替,MG811二氧化碳传感器用一个滑动变阻器代替。
其它元器件有:
LCD1602液晶显示,PCF8591数模转换。
图4-9总设计电路图
5软件设计
5.1系统流程图
系统主程序首先对LCD初始化,然后读取PCF8591通道3的值,计算二氧化碳的浓度,最后转化成液晶字符并通过LCD1602显示出来。
程序不断地循环执行,显示二氧化碳的浓度。
系统的流程图如图5-1所示。
图5-1系统流程图
5.2LCD1602显示程序
LCD1602初始化函数模块
voidinit_lcd()//初始化函数
{
lcden=0;//默认开始状态为关使能端
write_com(0x0f);
write_com(0x38);//显示模式设置,默认为0x38
write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01
write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1
write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的
}
写命令函数
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
写数据函数
voidwrite_date(uchardate)
{
lcdrs=1;
P0=date;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
5.3A/D转换程序
bitISendByte(unsignedcharsla,unsignedcharc)
{
Start_I2c();//启动总线
SendByte(sla);//发送器件地址
if(ack==0)return(0);
SendByte(c);//发送数据
if(ack==0)return(0);
Stop_I2c();//结束总线
return
(1);
}
unsignedcharIRcvByte(unsignedcharsla)
{unsignedcharc;
Start_I2c();//启动总线
SendByte(sla+1);//发送器件地址
if(ack==0)return(0);
c=RcvByte();//读取数据0
Ack_I2c
(1);//发送非就答位
Stop_I2c();//结束总线
return(c);
}
5.4计算CO2浓度值
voidmain()
{
lcdrw=0;
delay(5);
init_lcd();//液晶初始化
while
(1)
{
ISendByte(PCF8591,0x43);
CO2=IRcvByte(PCF8591);//ADC0模数转换1放大2倍显示
//CO2=100;
CO2=CO2-255;
CO2=abs(CO2);
CO2*=39.21568627;
display();
}
}
6调试
本设计的全过程都是在仿真软件中完成的,是将PROTEUS软件和KEIL软件结合起来共同模仿的此温度控制系统的设计。
首先在PROTEUS中设计出仿真硬件电路,在设计仿真电路的过程中,此软件中有许多元件可以供我们使用,但仍有些元器件无法找到,我就自己设计元件,但自己设计的元件无法模拟元件的电气特性和元件特性,我只有找功能相似或原理相同的元件来替代。
再在KEIL软件中编写硬件电路的驱动程序,在编写程序的过程中,重要的是设置好单片机的I/O口和生成HEX文件,用来支持硬件电路[10]。
在这两个准备工作做好之后,将两个软件联合起来调试,即将KEIL生成的HEX文件导入到PROTEUS设计的主控芯片中,运行硬件电路,观察是否出现自己预想的效果。
在出现问题时,首先调试自己编写的源程序,再调试硬件电路。
调试好之后,LCD1602可以正常显示出当前的二氧化碳浓度值。
测试结果表明,本系统基本实现了预期功能。
实物的调试是在普中开发板上进行的,将写好的程序生成的.hex文件烧进STC90C51RD+单片机中,连接好线路,可以实现二氧化碳浓度从0ppm到10000ppm的变化。
图6-1为实物调试图,实物调试在普中开发板上进行,下图为二氧化碳浓度上限。
图6-1CO2浓度上限
图6-2为二氧化碳浓度下限。
图6-2CO2浓度下限
图6-3为最终实物图
图6-3实物图
总结
随着毕业日子的到来,毕业设计也接近了尾声。
经过几周的奋战我的毕业设计终于完成了。
在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。
毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。
通过这次毕业设计使我明白了自己原来知识还比较欠缺。
自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。
通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。
本设计,主要用到了单片机,传感器,A/D转换和LCD显示,通过本次毕业设计,使我对这些器件的了解得到了进一步的升华,理论结合实践,通过不断的调试,基本实现了本设计预期的功能。
由于本人的学识有限,本设计还存在一定的不足,检测到的二氧化碳浓度不够精确,这些都是有待提高的。
二氧化碳浓度检测仪在温室大棚,生产生活中都有一定的应用,所以本设计有一定的应用价值,所以,本设计的功能还有待提高和增强,比如说,在温室大棚中对可以对二氧化碳的浓度自动化控制,增添一个报警功能,设置二氧化碳浓度的上限和下限,当超过一定的浓度是,可以对