《毕业设计基于AT89S52单片机的二氧化碳浓度测量及播报系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计基于AT89S52单片机的二氧化碳浓度测量及播报系统设计.doc(38页珍藏版)》请在三一办公上搜索。
1、引言我们的地球被一层大气包围着,其中氧气占21,78是氮气,1是其它气体。这1气体当中,就有只有一小部分为二氧化碳气体,约为300ppm(百万分之一,即0.03)。虽然含量较少,但是二氧化碳的作用缺越来越受到高度的重视。大气二氧化碳持续增加,从而对整个地球的气候产生重大影响,让人们对二氧化碳这一微量气体有了新的认识。另一方面,做为植物光和作用的原料气体,二氧化碳的应用技术水平对农业大国来说也是至关重要。在办公室的公共场合,二氧化碳测量也十分必须。二氧化碳在空气中的含量越高,对人体的影响就越大,当二氧化碳含量高出0.7时,人体就会感到不舒服,当二氧化碳含量超过10时,人体就会出现昏迷和死亡。达到
2、20,人就会在几秒内死亡。因此在人群比较密集的地方,二氧化碳含量是一个非常重要的参数,直接关系到人体舒适度和安全。当代电子技术飞速发展,大规模集成电路不断普及应用,给人们的生活带来巨大的变化。同时人们对于自己的生活质量要求也不断提高。如何根据实际需求设计二氧化碳浓度测量系统就成为一个具有现实意义的课题。传感技术应用的领域越来越广泛,同时对其的要求也越来越高,需求越来越迫切。二氧化碳传感器的技术研究也越来越成熟,产品的性能也越来越高。同时,语音芯片应用不断普及,语音芯片产品的发展也十分迅速,新型号的语音芯片的功能更加强大。这使得设计一个二氧化碳浓度测量系统在技术层面上的难度逐渐降低。本文中设计的
3、系统,正是针对人群密集公共场所对二氧化碳浓度测量需求而设计。该系统能够对公共场合的二氧化碳浓度进行测量,并且能将测得浓度显示和语音播报,当浓度过高时还可以向办公室等公共场所的人员进行报警提示,使得能及时提醒人员通风以降低二氧化碳浓度。公共场所二氧化碳浓度播报器围绕AT89S52来作为核心控制元件设计整个系统,通过外围电路的设计,利用液晶和语音芯片实现对二氧化碳浓度的现实以及播报。本系统,具有成本低,技术开发难度小,适用性、灵活性较好,具有一定得应用性。1设计方案二氧化碳语音播报器,顾名思义,即该系统实现的功能为对二氧化碳浓度的测试同时对其浓度进行播报。二氧化碳浓度通过传感器转化成电量信号,再通
4、过单片机进行采集处理。系统中的核心控制单元为单片机,围绕单片机设计相应系统需求功能模块。1.1 系统需求分析:系统需求分析主要是通过系统要求实现的功能对各个模块部分应该所具备的功能进行分析。本系统基于AT89S52单片机,实现对于室内二氧化碳的浓度测量及及时播报。系统的所需要的功能有:实现对二氧化碳浓度的测量;语音播放功能;按键控制;LCD显示功能。对于各部分性能有以下4点要求。(1)LCD显示器正确测量结果,测量结果动态变化,并且可以控制切换设置界面菜单;(2)二氧化碳浓度定时播报,可以通过按键控制进行播报,可以实现对浓度值的正确播报 ;(3)系统出现异常可以复位;(4)系统具有按键控制功能
5、。1.2方案设计1.2.1数据采集通过信号采集电路,主要是将二氧化碳的浓度值这一非电量信号转化为模拟电信号再转化为能通过单片机处理的数字量。因此前向通道由传感器、信号放大电路和AD转化电路组成。1.2.2控制部分本系统中控制信号主要是用来设置定时播报时间和报警浓度限值以及按键控制语音播报,根据实际功能的需求,可以通过软件使按键的功能灵活使用,仅需独立按键即可以达到控制功能。1.2.3显示部分因为有不同的设置功能要实现,用LCD显示比较方便,可以切换不同设置界面和二氧化碳浓度显示界面。1.2.4语音播报单片机控制语音芯片来进行语音播报。每次播报的内容中有很多是重复的,只有二氧化碳的浓度值是变动的
6、。因此通过单片机来动态调动语音芯片内的语音内容实现相应的播报内容。1.3设计框图基于以上的功能分析和设计的方案。单片机输入端接收传感器的测量信号和键盘控制信号,输出端控制液晶显示和音乐芯片音乐芯片驱动扬声器放音。设计框图如下:LCD显示(二氧化碳浓度及各设置菜单的显示)二氧化碳气体传感器C51单片机控制系统按键控制扬声器语音芯片 图1.1 系统总体框图 二氧化碳浓度为非电量信号,不能由单片机直接处理,要先经过传感器,将二氧化碳浓度(非电量信号)转化电压信号(电量信号)。然后由单片机进行数据处理,将采集到得电压信号转化成对应的二氧化碳浓度值。再通过单片机控制液晶显示浓度值,并控制语音芯片进通过扬
7、声器进行语音播报。按键向单片机提供控制信号, 控制单片机实现报警浓度设置功能。2硬件设计本应用系统的硬件电路设计包含4部分内容:一是信号采集部分;二是控制单元部分;三是液晶显示电路;四是语音电路。系统的扩展和模块设计应遵循下列原则:(1)尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性;(2)外围电路配置的水平应充分满足应用系统的功能要求;(3)硬件结构应结合应用软件方案一并考虑。硬件结果与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件来实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,其响应时间要比直接用硬件响应来的长,而且占用CPU时间。所以,选
8、择软件方案时,要考虑到这些因素;(4)整个系统中相关的器件要尽可能做到性能匹配;(5)单片机外接电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,解决的办法是增加驱动能力,增设线驱动器或减少芯片功耗,降低总线负载。2.1传感器选择及信号采集部分传感器选择及其性能测量二氧化碳浓度,传感器的选择十分重要。传感器的性能直接决定后续电路的设计以及整个系统设计的难度。因此了解二氧化碳传感器的种类,加以选择十分重要。 目前,国际成熟的二氧化碳传感器有电化学式、半导体陶瓷式、固体电解质式、红外吸收式等四种原理产品。半导体陶瓷式二氧化碳传感器以其制作简单、成本低廉、抗恶劣环境等特点,受到业内人士
9、的重视。但是,这种类型的二氧化碳传感器市场上不多,可能技术还不够成熟。红外吸收式的CO2传感器的精度及稳定性能都很好,但是由于它需要与光学系统组装在一起成为一个完整的装置。而这种装置体积大,价格高,因此,在一般的公共场合中不方便使用。电化学式及热传导式的CO2传感器虽然体积小,但是其精度、稳定性及对气体的选择性都不太理想。且电化学式的CO2传感器还存在着必须在电解质溶液中使用的缺点。本系统采用的传感器MS4100为固态电解质测量方式,具有对二氧化碳反应灵敏,受温度和湿度影响小,成本低。二氧化碳传感器相对于其他一般的烟雾传感价格较为昂贵,而且技术相对成熟的产品大多为进口,MS4100在众多二氧化
10、碳传感器中,价格适中,性能比较稳定,器采用原理是固态电解质测量方式,使用时需要预热。本产品预热时间为1个小时。工作电压5伏,与系统其它芯片可以统一供电,同时量程可以满足公共场合测量二氧化碳浓度的需求。 相应时间较快只需5秒,输出电压易于放大,可以使测量电路简化。而且输出电压与二氧化碳气体浓度成线性关系,使得数据处理较为简单主要参数:量程:030,000ppm工作电压:5VDC0.5%功耗:至少800mW输出电势:430540mV(0ppm CO2)准确性: 5%;图2.1 MS4100 二氧化碳传感器 输出电压与气体浓度关系曲线,以及内部原理可见图2.2和图2.3所示。图2.2 传感器灵敏度曲
11、线图 图2.3 传感器内部结构图图2.2中浓度与输出电动势(EMF)关系表达式为:EMF=EMF0-RLog(Concentration) (21)其中EMF0为co2为0ppm时,输出的电压,一般为470540mv之间。R为曲线的斜率,一般在5575之间。Concentration代表二氧化碳浓度,单位为PPM。EMF为实际电压,即为1脚和6脚电压差。在图2.3中可以知道,传感器电源供电端为3脚和4脚。此传感器的电源端为加热器供电,电源接入方向没有要求。当加热器加热到一定温度时,电解质部分才能和空气中的二氧化碳产生反应,此时1脚和6脚产生电动势。1脚和6脚的电压满足式(21)。电路中我们可以
12、测得的1脚和6脚的电动势即为EMF。而公式(2-1)中R和EMF0中都为参数,所以要求的二氧化碳浓度Concentration可从以下公式中求得: (22)其中EMF0=534,R=65为厂商提供的在温度为25摄氏度,湿度为65%时的标定值。由于没有标准的二氧化碳浓度测量仪来进行标定,系统中数据处理将采用厂商提供的标准。二氧化碳传感器的测量浓度单位为:百万分单位或ppm。600 ppm浓度的二氧化碳意味着:每1,000,000 公升的空气中有600 公升的二氧化碳(或在1公升的空气中有0.6 毫升的二氧化碳)。放大电路设计传感器的输出电动势为1脚和6脚的差值,因此选择用差分放大电路实现对电量信
13、号的放大,同时,AD转换采用ADC0809,其参考电压为正5伏,因此要把信号放大到电压范围内,根据传感器灵敏特性曲线知输出电压范围为(0540mv),所以电路放大十倍就可以。放大电路设计如下: 图2.4 差分放大电路若设1脚输出电压为,6脚输出电压为,放大电路输出电压为,运放正极电压,运放负极电压,则根据虚短和虚断概念有:(vi1-vn)/R4=(vn-vo)/R5 (23)(vi2-vp)/R1=vp/R2 (24) 当R4/R1=R3/R2时, Vo=R4*(vi2-vi1)/R1 (25)本电路要放大信号十倍,所以R4、R3取20k,R1、R2取2k。运放6脚输出电压接ADC0809模拟
14、输入端。本电路选用op07运算放大器,op07是高精度低失调电压的精密运放集成电路,用于微弱信号的放大,如果使用双电源.能达到最好的放大效果。给op07提供正负12伏电压,而系统中其他部分供电电压为+5伏,通过7805将+12伏电压转化成+5伏,这样外部供电就只需提供正负12伏电压即可。 图2.5 电压转化电路模数转化 模数转化采用ADC0809将模拟信号转化成数字信号,提供给单片机处理。 本系统中ADC0809只有一路输入,即二氧化碳传感器的放大信号,所以芯片三条地址选择线直接接地,即只选中IN0通道。数据端接P0口,其他控制端连接如下图: 图2.6 ADC0809接口电路ADC0809控制
15、端口直接接单片机普通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触发器获得。2.
16、2控制单元电路单片机最小系统AT89S52单片机是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52单片机为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。本系统主要通过IO口来控制个部分电路以及接受信号,32位I/O口控制线足以满足系统功能需求。 AT89S52具有P0、P1、P2、P3四个I/O口。由于外围电路比较多,所以要
17、合理的利用端口,同一个器件尽量使用同一个I/O端口。根据这个原则,各模块之间因合理分配。 P0口接ADC0809数据端口,P2口用来控制ADC0809和语音芯片(语音芯片采用端口模拟SPI控制,需要4条I/O口控制线,ADC0809需要3条),P1接液晶数据端,而液晶使能端和键盘控制接P3口。如图2.7所示。需要注意的是,P0口作为普通I/0口时需要增加上拉电阻。键盘控制根据系统功能考虑,系统的按键控制有以下5个功能。启动语音播报;进入播报定时时间设置菜单;修改时间;进入报警限值设置菜单;修改报警数值。 基于以上功能设置键盘按键的功能。语音播报可以用以个独立按键控制。关于播报间隔时间和设置报警
18、限值,可以采用一个按键进行功能切换:按第一次,进入播报时间间隔设置;按第二次,进入设置报警限值;按第三次,退出设置菜单。然后再用2个键控制数值的增减即可。基于以上功能设计,可以不必使用44键盘,只用独立按键即可,即3个按键直接接单片机I/O口。这样的好处是可以使得布局简单。硬件功能的设计要根据具体功能需要,而不是全部都是标准设置。按键与接口连接如图2.8所示。 图2.7 单片机控制电路图2.8 按键接口电路 3个按键接单片机I/O口,通过对I/O口的电位判断判断否有键按下。在显示浓度值时,可以通过P34的按键控制语音播报。在进入设置菜单时,可以通过P33口按键切换菜单,通过P36和P34来上调
19、和下调设置。2.3液晶显示部分字符与数字显示部分采用LCD1602液晶显示模块,1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,足够系统需求的功能要求。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过
20、高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。根据引脚对应功能,将双向数据端接单片机P1口,控制端接到P3口(使液晶模块与单片机端口连接全部处于同侧),接口连接设计如下: 图2.9 液晶模块接口电路2.4语音电路本系统中语音播报的内容的特点是有很多内容是相同的,只有每次测量到
21、得数据,即二氧化碳的浓度是动态测量不断变化。其他的播报内容中的文字信息也有重复内容,因此要充分利用单片机的控制能力,实现动态控制自动调用语音内容组合成播报内容。本系统选择了ISD1720语音芯片,是华邦公司新推出的ISD1700系列芯片中的一种。改系列芯片提供多种功能而且音质较好。芯片内部包含自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。芯片特点:可录、放音十万次,存储内容可以断点保留一百年。两种控制方式,两种录音输入方式,两种放音输出方式。工作电压在2.4V-5.5V之间,最高不能超过6V。用户可以自己根据需求在芯片中在任意地址空间录入所需的播放内容,同
22、时也可以按地址直接调用录好的内容进行播放。这样就可以满足系统的播报要求。而语音芯片的外围电路比较简单,仅需一些电阻、电容,电容主要是起到滤波的作用。本系统中单片机通过SPI模式控制语音芯片。主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1720进行串行通信,本系统中通过I/O口模拟串行通信,与单片机的连接仅需4个端口。系统中将其与P2.0-P2.3连接。 语音芯片接口电路如图2.10所示。 图2.10 语音芯片接口电路语音芯片的语音输出端SP+输出的信号强度有限,所以要通过LM386设计一个放大电路来驱动扬声器工作。LM386电压增益内置为20,当在1脚和8脚
23、之间加一只外接电阻和电容,可使电压增益最大增益到200。如图2.11所示,可以通过R12,10k的电位器来控制输出音频的大小5脚作为输出脚与1.25W的喇叭相连,为了滤掉低频滤波,减少杂音以及储存能量,在5脚和喇叭之间需加上一个220UF的极性电容。为了使喇叭发出的声音柔和动听,要在5脚和地之间接上一个0.047UF和10欧的电阻。在7脚和地之间接上一个10U的电容能滤除噪声。在这里只选3脚作为输入端,所以另一反相输入端2脚接地。语音放大电路如图2.11所示。图2.11 语音放大电路3 软件设计应用系统中的应用软件是根据系统功能要求设计的,应该可靠地实现系统的各种功能。一个优秀的应用系统的软件
24、应具有下列特点:(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。设计出软件的总体结构,使其结构清晰、简捷、流程合理。(2)要树立结构化程序设计风格,各功能程序实现模块化、子程序化。既便于调试、链接,又便于移植、修正。(3)建立正确的数学模型。即根据功能要求,描绘出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。(5)注意在程序的有关位置处写上功能注释,提高程序的可读性。(6)加强软件抗干扰设计,它是提高计算机应用系统可靠性的有利措施。本系统的软件包括以下几个
25、程序模块:(1)按键识别程序与处理程序;(2)ADC0809驱动程序;(3)LCD显示程序;(4)语音播报程序;(5)数据处理部分。3.1 主程序流程图 程序主要要实现的功能:启动ADC0809进行模数转化,并将所得数据转化成实际的二氧化碳浓度,并且控制液晶显示,控制语音芯片进行语音播报。 程序主流程如图3.1.设置菜单按键是否按下播报键是否按下设置菜单按键是否按下开始系统初始化启动AD0809数模转化是否结束数据处理液晶显示二氧化碳浓度设置报警时间限值设置菜单按键是否按下显示时间设置菜单设置时间否否是是显示设置报警限 菜单是否否是是语音播报 否图3.1 系统主程序流程图3.2 ADC0809
26、程序设计 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程序流程图开始 AlE
27、和START置低AlE和START置高AlE和START置低查询EOC是否高电平?否是OE置高读取端口数据结束图3.2 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保存所得数据提供单片机处理。3.3液晶显示程序 显示采用 LCD1602模块。数据与命令
28、都通过D0D7传入;读写操作时序由使能信号E完成;对读写操作的识别时对R/W信号上的电平判断,R/W的信号的宽度要大于E ;RS信号用于识别数据总线的数据是属于指令代码还是属于显示数据。接口端的信号逻辑功能如下表:表3.1 接口端逻辑功能RSR/WEDB7DB0功能00高脉冲指令码写指令01高电平状态字读状态10高脉冲数据写数据11高电平数据读数据表3.2状态字输出口STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0表3.3 状态字功能说明STA0-6当前数据地址指针的数值STA7读写操作使能1:禁止 0:允许 上述是基本时序和状态字的功能,其他指
29、令的格式还有很多不一一列举,仅介绍本系统中用到得显示方法。 本系统中无论是二氧化碳的浓度显示还是设置界面的菜单显示,都是只有中间的数字是变化的。因此可以在初始化液晶显示后,编写一个显示字符串的子程序。显示内容送字符串数组中,然后送显示,每次只要将字符串里的数值改变即可。如图3.3所示。开始显示内容输入缓冲区bufferi=0bufferi送液晶显示bufferi是否为终止符?否 i+是结束 图3.3 液晶显示流程图各部分主要程序如下:液晶初始化程序如下:void LCD_init(void) delay(10); WriteCode(0x80);/显示数据指针初始化; WriteCode(0x
30、01);/ 显示清屏; WriteCode(0x38);/ 设置162显示,57点阵,8位数据接口; WriteCode(0x0C);/ 开显示,不显示光标; WriteCode(0x06);/ 写字符后地址指针加一; 字符串显示子程序:void LCD_Showstring(uchar line , uchar str)uchar i , j; i=line*0x10; for(j=0;strj!=0;j+) LCD_Showchar(i+,strj);void LCD_Showchar(uchar position,uchar z ) uchar p; if(position16) p=p
31、osition+0x80; else; p=position+0xB0; WriteCode(p); WriteData(z); 字符串处理程序:DigitalData=GetResult();sprintf(buffer,co2 concentration :%d ppm,DigitalData); 利用sprintf将数值打印到buffer数据缓冲区中,其中buffer就是字符串缓冲区,可以直接传到字符串显示子程序中送显示。 不同的菜单内容可以通过传不同的数据缓冲区的内容得以调用。3.4数据处理传感器输出电压为毫伏级,AD采集到得是输出电压的10倍电压。转换公式中,传感器电压为毫伏级时的数
32、值,AD转化后的数字量为传感器实际值的1/100,所以先对AD转换后的数值100倍放大,再利用公式处理所得数据。数据处理程序:DigitalData=GetResult(); DigitalData=DigitalData*100; DigitalData=(534-DigitalData)/65; temp1=pow(10,DigitalData);其中534对应式(22)中的EMF0,65对应式(22)中R ,pow为指数函数。DigitalData为ADC0809转化得到的数字量。3.5语音播报 语音播报采用ISD1720语音芯片,可以播放20s的语音内容,芯片内部有内部存储单元,存储预
33、先输入的语音信息。存储单元可以寻址访问,因此用户可以自行设置语音存放的空间以及播放任意录制空间的语音内容。芯片存储地址从第一个提示音的地址0x0000开始计算,但0x000-0x00F地址平均保留给了4个提示音。从0x010地址开始,才是非保留的存储区域,即真正的录音区,最高地址为0x09F。 本系统中对语音芯片主要通过SPI模式进行控制,实现语音播报。ISD1720作为从机,几乎所有的操作都可以通过这个协议来完成。兼容独立按键模式,有PLAY,REC,ERASE,FWD,RESET和GLOBAL_ERASE的运行类似于形影的独立按键模式的操作。另外,SET_PLAY,SET_REC,SET_
34、ERASE命令允许用户指定录音、放音和擦除的开始和结束地址。 ISD1720SPI串行接口操作遵照以下协议:一个SPI 处理开始于/SS管脚的下降沿;在一个完整的SPI指令传输周期,/SS管脚必须保持低电平;数据在SCLK的上升沿锁存在芯片的MOSI管脚,在SCLK的下降沿从MISO 管脚输出,并且首先移出低位;SPI指令操作码包括命令字节,数据字节和地址字节,这决定于1720的指令类型;当命令字及地址数据输入到MOSI管脚时,同时状态寄存器和当前行地址信息从MISO管脚移出;一个SPI 处理再/SS变高后启动;再完成一个SPI命令的操作后,会启动一个中断信息,并且保持为低,直到芯片收到CLR
35、_INT命令或者芯片复位。 图3.4 语音芯片时序图 在SPI命令输入到ISD1720前,SPI端口的状态应该保持如下状态:/SS=HIGH;CLK=HIGH;OSI=LOW。ISD1700芯片内部寄存器可以返回1700芯片的内部状态,其中SR0为2个字节,SR1为一个字节。SR0第一个字节的0为与SR1的0位用来判断上条命令是否正确执行及执行完毕。具体的功能实现播报数据中要实现对数字的动态播报。例如:当数据为1234是,要播报的内容为“二氧化碳浓度为一千二百三十四PPM(PPM二氧化碳单位)” 。这就需要在软件上处理。数字播报流程图如图3.5。 录音空间为0x09F-0x010=0x08F,
36、即816+15=143,143+1=144段空间,每段空间20144=0.14秒,09,万,千,百,十各用0.5秒,各占0.50.14=4段空间。在0x0100x013存放读音“0” ,以此类推“9”存放在0x0340x034,“万”存放在0x0380x03B,“十”存放在0x0440x047。 通过以下判断顺序可以正确报数值:先判断数字位数,然后从最高位播起,每播一位追加单位播报;数字播报可以用每一位数字本身做偏移量,寻址播放;单位在最初判断数字位后,设定起始单位地址,然后逐一增加。开始播放bufferi数字压入buffer播放单位确定数字位数di+i=0dBufferi为终止符? 结束 图
37、3.5 数字播报流程图 4调试过程整个调试过程包括硬件调试、软件调试和系统测试三部分。每个模块在功能上相互联系又各自独立,所以在每个部分调试的过程中也要分模块进行。这样做的好处是,可以将出现的问题进行具有针对性的处理,避免出现问题时找不到真正原因。调试过程是对原理进一步理解和对原理中的不足改进的重要步骤。 4.1硬件调试硬件正常是整个系统正常运转的基础,所以硬件调试就格外重要。硬件调试主要是对制版的电气特性进行检测,逐个排查电路布线问题,使器件在能正常工作。前期的电路特性检查必须十分耐心,硬件电路的细小问题都可能对软件的工作是否正常产生影响。硬件的调试主要经行了以下测试:第一,对于电路布线中容
38、易短路和断路的地方进行检测。因为在印制板子的过程中难免出现细微问题,比如布线比较近的地方就可能出现短路,然后在焊接好以后,对容易焊接短路的地方进行检测。这部分检测较为容易用万用表测量短路档来检测即可。第二,在焊好板子后先不安装芯片上电。检测芯片底座供电电压是否正常。如果不正常,由于已经排除掉焊接短路、断路的问题,可以重点怀疑电路原理的问题。第三,安装芯片分模块检测电路是否正常,这时先检测单片机是否正常工作,然后通过单片机向各模块发送一些简单命令测试模块是否能正常工作。4.1.1单片机硬件电路检测 单片机最小系统检测主要是检测单片机是否能正常启动。方法为用示波器检测单片机30脚,即ALE管脚是否
39、有方波输出,且方波的频率因为晶振的1/6,即2M(晶振使用的是12M的)。检测到2M方波,说明单片机能正常启动。4.1.2液晶模块调试 液晶模块检测主要是检测能否正常显示字符。 利用前面提到的送字符串显示测试。当然首先要保证液晶初始化程序和子程序都是正确的,在此前提下查看液晶的硬件电路连接。注意要保证对比度适合。 开始测试 没有看到字符,就是因为对比度调节不合适。4.1.3 ADC0809和语音电路调试 检测ADC0809首先要检测ADC0809的时钟是否正确。本系统采用500Hz,可以用示波器加以检测。 语音芯片保留了按键部分用来测试芯片是否正常工作和芯片电源供电是否正常。工作正常后,可以通
40、过控制端口模拟SPI时序,用示波器观测各控制端是否有正常信号输出。 在检测语音芯片控制端的时候发现信号有异常,不能对芯片进行控制,最后发现P2口的上拉排阻装反了。4.1.4放大电路检测 放大电路主要是对传感器信号的放大。检测放大电路主要是检测放大电路能不能调零。将差分输入端同时接地,然后调整调零电阻,看是否能调零。放大电路放大倍数产生的误差也是主要要考虑的。为后面的数据处理可能导致较大误差。 4.2软件调试本系统软件部分采用C语言编写,系统硬件电路比较简单,主要通过软件来实现各个模块之间的协调运作。由于软件运行的基础是硬件,所以在调试软件的过程中如果发现问题,应该同时考虑软件和硬件的问题。调试
41、可以通过使用伟福仿真器来仿真调试。4.2.1液晶显示程序调试 液晶显示在开始测试电路是否正常时,通过送字符串可以正常显示。但实际系统要求要显示的浓度值是动态变化的。开始曾想过,整个显示内容分段显示,数字单独显示,发现程序比较繁琐。所以想到如果可以将这个显示的内容看做一个整体的字符串,而其中的数字可以动态改变就可以了。通过使用scanf函数就可以达到目的。4.2.2语音播报程序调试 语音播报主要是模拟SPI时序传输命令与数据。主要出现问题是开始播报数字,用每位数字作偏移量寻址播报,所播数字与实际不符。用编译器仿真查看程序中变量,发现问题为当数字量转化成字符放到字符串中时,值就转化成其对应的ASC
42、码。因此想用数字做便宜量,要对其处理,即减掉30H即可。 同时在分段播放时,没次播放前都要加入判断是否播放完毕,这样才能正常运行。调试初期,没有加入判断语句,导致分段播放混乱。 还有要注意的是,当使用SPI 模式不按照严格要求进行录音的时候,按键模式无效,此时不能通过按键来判断芯片是否正常。 4.2.3其他程序调试 模数转化程序比较简单,就是模拟其时序即可。数据处理部分,根据其线性关系可以得到求值公式,但是其斜率和输出的电压随温度变化,没能得到很好的解决,可以通过多次求值求平均值来减小误差,但室内空气检测,要求不是很精确,只要误差范围在允许范围内即可。4.3系统测试 在各个模块软件功能基本实现
43、的时候,其实也就是硬件与软件能配套实现的过程。在各个模块程序实现功能的时候,在整合整个系统的软件时要注意不要出现死循环。各功能单独测试时,可以实现并不意味着这个系统的功能可以正常实现。在软件上根据流程图,合理设置个功能的连接方式十分重要。 以上调试经过以后可以,进行系统整体测试。 由于传感器正常输出信号需要预热一个小时,系统在一个小时候才能正常测量。 传感器预热后可以看到,液晶屏能够显示二氧化碳浓度。 由于没有标准的二氧化碳浓度检测仪进行比较,没法进行自行标定。只能根据传感器芯片中所标定来处理传感器输出信号。所得浓度与实际值存在一些偏差,但是公共场合二氧化碳浓度测量本身精度要求并不高,只要偏差范围不是太大即可。 然后可以经行按键功能测试。按设置菜单建,可以进入设置菜单,按一次是进行报警值的设置,按两次是进入报警间隔时间的设置。其他两个按键可以对数值进行增减设置。 在显示浓度时,按下语音播放键,可以对浓度进行语音播报。在设置菜单时不能通过按键播放语音,这时播放按键用来经行设置相应数值。 系统整体设计功能基本能够实现,能够对二氧化碳浓度进行实时显示和语音播报。