室内温度自动调节控制系统课程设计(17页).doc
-室内温度自动调节控制系统课程设计-第 12 页室内温度自动调节控制系统摘要 在人们日常生产及生活过程中,经常要用到温度的检测和控制。随着微型计算机和传感器技术的迅速发展,自动检测领域发生了巨大变化,室内温度自动检测控制方面的研究有了很大进展。同时现代电子产品性能进一步提高,产品更新换代的节奏越来越快。本次课程设计是基于STC89C52单片机基础板所做的温度检测调节系统,不仅对于学习单片机技术等专业知识有实际意义,而且还可以增强动手能力。这次设计的系统,硬件电路主要包括单片机最小系统电路,温度采集电路,显示电路,语音播报电路,按键电路,继电器电路等。软件程序主要包括主程序,读出温度子程序,计算温度子程序,显示温度刷新子程序,语音播报程序等。我们利用DS18B20温度传感器采集温度通过STC89C5单片机系统在应用板上利用LCD1602液晶显示屏显示实时测得的温度 ,通过程序进行语音播报;当温度超过设定的上限时,继电器闭合,并驱动动机工作,以实现降温。经过调试,结果显示LCD屏准确显示了室温,并能进行语音播报。当温度超过设定上限时,继电器闭合,风扇工作,开始降温;实现了系统设计要求的功能。 关键词:室内温度,自动控制,STC89C52单片机,语音播报。目录0 前言11总体方案设计21.1设计方案论证31.2 主控制器31.3 LCD液晶显示31.4 温度传感器32硬件电路设计62.1.主控制器62.1.1 电源部分62.1.2 串口电路72.1.3晶振电路82.1.4复位电路82.2 显示电路92.3 数据采集电路92.4语音电路102.5按键电路113 软件设计123.1 主程序设计123.2 温度转换程序123.3 温度显示程序124 调试分析134.1 硬件调试144.1.1硬件调试方法144.1.2 电源调试144.1.3 语音模块调试144.2 软件调试145 结论14参考文献18附录1 电路原理图19附录2 .PCB图20附录3主程序210 前言在信息高速发展的今天,科学技术日新月异,科技的进步带来了测量技术的发展,现代控制设备发生了翻天覆地的变化。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中室内温度检测就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。温度是一个永恒的话题和人们生活环境有着密切关系的物理量,是国际单位制的七个基本单位之一,作为各种信息的感知、采集、转换的功能器件温度传感器的作用日显突出,温度的检测与控制是日常生活中比较典型的应用。如在日常生活中测量并记录室内的温度,可以了解室内温度变化情况。而我们所要设计的系统正是进行温度的检测,并实现自动控制室温。1总体方案设计1.1设计方案论证针对本课题的设计任务,进行分析得到:本次设计用温度传感器进行温度的测量,转化了的温度信号由传感器直接得到了数字信号。该数字温度显示电路的设计,在总体上大致可分为以下几个部分组成:1.单片机控制电路;2.温度传感器;3. LCD显示电路。方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,DS18B20为常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。所以采用温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。本文设计的室温自动控制系统原理框图如图1所示。图1 系统原理框图1.2 主控制器控制器芯片种类很多,有凌阳公司的16位单片机,也有51系列的单片机。方案一:选用AT89C51,该芯片能使用C语言进行程序的编写,方便阅读。但是,其集成程度低,功能单一,需要使用到其它功能时,只能通过扩展外电路来实现,使得整个电路复杂,成本高,稳定性低。同时,I/O口输出功率小,一般器件都需要加驱动才能够正常使用。方案二: STC89C52RC是微处理器低功耗,超低价高速( 0 -90M),高可靠5V工作电压单片机,使产品更小,因为本系统要求的性能不是太高,而且处于模拟阶段,利用单片机芯片就可以控制。其中单片机的更轻,功耗更低,如果相关新增功能没有用到,则不需看相应部分。用STC 提供的STC-ISP.exe 工具可以将原有的代码下载进STC 相关的单片机即可,内部Flash 擦写次数为100,000 次以上。用户程序是用ISP/IAP 机制写入,一边校验一边写,无读出命令。综合考虑我们选择方案二STC89C52RC作为我们的主控芯片 。1.3 LCD液晶显示 因为LCD1602液晶显示屏具有微功耗、体积小、显示内容丰富、超薄轻巧等特性,常用在袖珍式仪表和低功耗应用系统中,且1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字),所以选择其进行实时温度显示。图2 LCD1602液晶显示屏1.4 温度传感器温度传感器DS18B20结构图如图3所示,引脚左负右正,一旦接反就会立刻发热,有可能烧毁。同时,接反也是导致该传感器总是显示85的原因。正确接法:面对着扁平的那一面,左负右正。DS18B20的性能特点如下1:a独特的单线接口仅需要一个端口引脚进行通信;b多个DS18B20可以并联在惟一的三线上,实现多点组网功能;c无须外部器件;d可通过数据线供电,电压范围为3.05.5;e零待机功耗;f温度以或位数字;g用户可定义报警设置;h报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;i负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;图3 DS18B20的外部封装图DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存的第、字节保留未用,表现为全逻辑。第字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第、字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。如图表1,DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC表1 DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。 减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。2硬件电路设计2.1.主控制器 单片机STC89C52RC具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。STC89C52RC是一种低功耗,高性能的8位微控制器,具有8K在系统可编程FLASH存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上FLASH允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程FLASH,使得STC89C52RC为众多嵌入式控制应用系统提供高灵活,超有效的解决方案。该单片机的最小系统包括电源部分,串口部分,单片机部分,晶振电路和复位电路。最小系统原理图如图4所示2。图4 最小系统原理图 2.1.1 电源部分如图5是单片机小系统的电源部分原理图3。图5 总电源电路通过5V变压器,上图电路是可以为整个设计的各个部分提供电源(+5V),由图可知,电源部分由一个电源插槽J7和电源开关S1、一个发光二极管、一个1K电阻和一个容值为1UF的稳压电容组成。当电源接通后,打开开关,发光二极管会发光。2.1.2 串口电路串口原理图如图6所示。主要作用是进行电平转换,提高信号传输的速度。 图6 串口原理图串口电路是由一个MAX232芯片、5个0.1UF的电容和一个串口组成。电路中的MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电,在电路中的C1C4是必不可少的,缺一不可,具有调节电压值的作用。由图可知,当数据线接上串口DB9时数据经过3号引脚送给MAX232的13号引脚,在经过12号引脚输出将电平转换送往单片机芯片中,在经过一系列单片机讲信号送给11号引脚经过芯片电平转换由14号引脚送给串口的2号引脚,已达到电平转换的作用。2.1.3晶振电路如图7所示,晶振电路用于产生单片机工作所需的时钟信号,电路选用11.0592MHZ的晶振和容值为22PF的电容,在单片机芯片的18(XTAL1)、19(XTAL2)号引脚之间跨界警惕震荡器和微调电容,就可以构成一个稳定的自激振荡器。 图7 晶振电路图 图8 复位电路 2.1.4复位电路如图8为复位电路,复位主要作用是使CPU和系统中其他功能部件都恢复到确定的初始状态,并从该状态开始工作。复位电路有上电复位和手动复位两种。上电复位:当上电时,电容相当于短路,此时电阻上的电压约等于VCC,经过一段时间后电阻电压逐渐变小直至为零。手动复位:按键后,电容器被短路放电、RST直接和VCC相连,就是高电平,此时进入复位状态。松手后,电源开始对电容器充电,此时,充电电源在电阻上,形成高电平送到RST,仍然是复位状态,稍后充电结束,电流降为零,RST降为低电平,开始正常工作。本系统的复位电路采用的是手动复位的方式5。 2.2 显示电路 动态显示电路使用STC89C52RC的P0.0至P0.7端口作为LED的字段输出口,P2.4至P2.7作为LED的位选控制口,采用PNP管9012驱动共阳LED显示器的第3引脚公共极COM,显示器从最左边的位开始点亮LED。其接口原理图如下图9所示: 图9 显示电路2.3 数据采集电路数据采集电路如图10所示。DS18B20的内部结构主要包括:寄生电源,温度传感器,64位激光ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值得TH和TL触发器,存储和逻辑控制,8位循环冗余码发生器等七部分。DS18B20测量温度时使用特有的温度测量技术,将被测温度转换成数值信号,测量结果将存入温度寄存器中。 图10 数据采集电路2.4语音电路WT588D模块内部包含了FLASH存储器和相关的外围电路,只需要在外部接上控制端、电源及扬声器,就能进行工作。 BUSY指示:BUSY端接上发光二极管就能显示语音的播放状态,可以从电脑软件上设置为语音播放时点亮或语音播放时熄灭。供电:模块在5V供电时,串两个二极管到VCC端,模块在3V供电时,可直接把电源接到VCC端。 PWM音频输出:直接驱动扬声器的方式,扬声器两端接PWM+和PWM-,此状态输出时,PWM+/PWM-两端不可短路、不可接电容电阻到地。如需采用此状态外接功放,可用差分方式输出到功放。 DAC音频输出:外接功放驱动扬声器方式,不可直接驱动扬声器。PWM+/DAC端做音频输出,PWM-端腾空。DAC端需接一个1.2K电阻和104电容到地,再把音频输出给功放。 本次设计的系统采用的是DAC音频输出语音电路如图11所示。图11 语音电路2.5按键电路本文设计的按键电路如图13所示。采用独立按键的结构形式,每个按键相互独立,分别与单片机的一根输入线相连,配置灵活,软件简单,适用于按键较少的场合。当按键开关未按下时,开关处于断开状态,单片机I/O口为高电平;当按键开关按下时,开关处于闭合状态,单片机I/O口为低电平。由于按键开关闭合和断开瞬间都会产生510ms的抖动,对于单片机来说完全可以感应到,因此采用软件消除抖动。图12按键电路3 软件设计3.1 主程序设计如图13为主系统原理图,系统的主程序主要用来初始化一些参数,对DS18B20的配置数据进行一系列的设定。另外对DS18B20的状态不断的查询,以读取当前的温度值,并对温度进行处理,温度值的BCD码处理后,将其段码送显示缓冲区,以备定时扫描服务程序处理。图13 主程序流程图3.2 温度转换程序 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图14所示。图14 温度转换流程图 图15温度显示流程3.3 温度显示程序此程序是将采集到得数据用LED数码管显示,然后将实际温度与设置的报警上下限进行比较,决定是否发出报警信号。由于T为实际温度的绝对值,TH,TL也是温度的绝对值,因此判断大小关系时,要通过正负号来确定。其程序流程图如图15所示。4 调试分析4.1 硬件调试单片机应用系统的硬件和软件调试是交叉进行的,但通常是先排除样机中明显的硬件故障,尤其是电源故障,才能安全地和仿真器相连,进行综合调试。4.1.1硬件调试方法 在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号、规格和安装是否符合要求。应特别注意电源的走线,防止电源之间的短路和极性错误,并重点检查扩展系统总线(地址总线、数据总线和控制总线)是否存在相互间的短路或与其它信号线的短路。第二步是加电后检查各个插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位,若有高压,联机时将会损坏仿真器。第三步是在不加电情况下,除单片机以外,插上所有的元器件,最后用仿真适配器将样机的单片机插座和仿真器的仿真接口相连,为联机调试做准备6。4.1.2 电源调试 用数字万用表电压档测量电池输出的电压值是否正常,如果显示不正常,将数字电压表打到蜂鸣器挡,用两个表笔检测电路是否短路或断路。4.1.3 语音模块调试将所需要的语音录入语音芯片中,通过按键看是否播放录音。4.2软件调试本次设计采用的是keil仿真器进行软件调试,此系统可以开发应用软件,以及对硬件电路进行诊断、调试等。它的具体功能是可以进行CPU仿真,可以单步、跟踪、断点和全速运行,而且,程序的编译过程中,可以对设计软件进行自诊断,并自动给出故障原因。同时用户调试程序时,可以通过窗口观察寄存器的工作状况,以便及时发现和排除编程中可能出现的错误。软件的调试是利用keil软件,模块化调试,通过观察存储单元数据的变化,查找并解决程序的语法和逻辑错误,具体的调试步骤如下:1. 把系统的各个模块在仿真软件中逐个调试,如数据采集模块、显示模块等。2. 对各个需要赋值模块调试时,赋入初值,单步调试,观察数据窗口,看输出结果是否为设计时想要的结果。 3. 把各个模块组合起来,全速运行,看程序是否能流畅的,是否能实现设计的系统 调试的图片如下图16所示:图16 STCISP界面图2.软件调试过程: 首先接上USBRS232C信号线,安装串口驱动程序;然后打开STCISP界面,进行软件调试。按下面顺序:1)选择自己的CPU型号STC89C52RC2)选择自己的端口:根据之前安装的串口驱动程序,右键我的电脑属性硬件COM查看自己的输出端口号3)选择波特率、最高、最低4)打开程序文件5)自己编写的程序编译后生成的.Hex文件6)点击、下载程序至单片机,调试7)重复2和5注意:在调试程序时,要把拨码开关拨到相对应的ON状态。 如下图17为系统调试完成后,正常运行的现场图图17 系统工作现场图5 结论 经过了四个星期的课程设计,让我对以前学的理论知识有了较深的体会,学习用理论指导实践,在实践中发现了自己有很多不足之处,并不断完善自己。因为前两周准备考研,没做多少东西,但这次的课程设计还是让我体会到很多东西,不仅仅是知识本身的,更多的是自己动手能力和逻辑思维能力的锻炼。同时,也知道自己还有许多要学的东西。在以后的工作中,单片机是必须掌握的基础工具,所以我们认真学习单片机的知识,这对我们找工作是很有帮组的,遇到问题并不可怕关键是我们要找到方法去解决问题,一定要勤于动手,这样自己才会有提高。另外,对温度传感器的认识也不仅仅只停留在书本上了,亲身体会到了LCD显示屏和灯的应用。当然在这次宝贵的课程设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。在和同学的协作中去完成电路原理图的绘制,焊接电路板,最后进行调试,当然这些过程都离不开老师的悉心指导;这些工作必须按部就班,有计划保质量地完成,否则后面的工作就无法进行。 最后特别要感谢老师及同学在这四个星期对我的帮助。参考文献1唐文彦 传感器(第四版)M,北京:机械工业出版社,20062夏路易:Protel 99SEM,第一版,北京:北京希望电子出版社,20023王俊峰:电工技术基础M,第二版,北京:电子工业出本社,20104谭浩强:C程序设计M,第四版,北京:清华大学出版社,20105谢自美:电子线路设计测试与应用M,第二版,武汉:华中理工大学出版社,20046蔡美琴:MCS-51系列单片机系统及其应用,第二版,北京:高等教育出版社,2008附录1 电路原理图附录2 .PCB图附录3主程序温度控制语音播报操作方法:将POWER SUPPLY SWITCH 中的1602开关打开,用杜邦 线将驱动板上的VCC和GND连在基础板的OUT POWER上, 用杜邦线将驱动板RST和DATA与P34和P35连接,用杜 邦线将驱动板DS与P20连接起来,DC与P05连接,把 温度传感器插在驱动板U1上 #include <reg52.h>#include <ds18b20.h>#include<588.c>sbit rs=P20;sbit wr=P21;sbit lcden=P22;sbit DC=P05; /电动机控制bit flag0;uchar display2;uchar bai,shi,ge;uchar num=0;void delayus(uint s)uint i;for(i=0; i<s; i+);for(i=0; i<s; i+);void delay(uint z) /延时函数 uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-);void write_com(uchar com) /液晶写指令 rs=0; P1=com; lcden=0; delay(5); lcden=1 ; delay(5); lcden=0; void write_data(uchar date) /液晶写数据 rs=1; P1=date; lcden=0; delay(5); lcden=1; delay(5);lcden=0; void init() /液晶初始化 wr=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); void distwo(uchar add,uchar temp)/液晶显示两位数字 uchar shi,ge; shi=temp/10; ge=temp%10; write_com(0x80+add); write_data(shi|0x30); write_data(ge|0x30); void diszifu(uchar add,uchar *temp) uchar i; write_com(0x80+add);for(i=0;tempi!='0'i+) write_data(tempi);delay(5);void distemp(uchar add,uint temp) bai=temp/100; shi=temp%100/10; ge=temp%100%10;write_com(0x80+0x40+add);write_data(bai|0x30);write_data(shi|0x30);write_data(0x2e); write_data(ge|0x30);write_data(0x43);display2=(bai<<4)|(shi);display1=ge; display0=0x22; void sound_temp() /温度播报函数send_oneline(bai);delay(500);send_oneline(10);delay(500);if(shi!=0)send_oneline(shi);delay(500);if(ge!=0)send_oneline(11);delay(500);send_oneline(ge);delay(500);send_oneline(12);delay(1200);void main() /主函数 init(); diszifu(0x40+4,"temp:"); while(1) tmpchange(); distemp(9,tmp(); if(temp>=300) /当温度大于30度时,电动机工作,语音播报 DC=0;send_oneline(13);delay(1500); sound_temp(); if(temp<300) /温度小于30度,电动机停转 DC=1; num+; if(num=100)/温度间隔播报 num=0; sound_temp();