资源描述
室内温度自动调节控制系统
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
室内温度自动调节控制系统
摘要
在人们日常生产及生活过程中,经常要用到温度的检测和控制。随着微型计算机和传感器技术的迅速发展,自动检测领域发生了巨大变化,室内温度自动检测控制方面的研究有了很大进展.同时现代电子产品性能进一步提高,产品更新换代的节奏越来越快。本次课程设计是基于STC89C52单片机基础板所做的温度检测调节系统,不仅对于学习单片机技术等专业知识有实际意义,而且还可以增强动手能力。
这次设计的系统,硬件电路主要包括单片机最小系统电路,温度采集电路,显示电路,语音播报电路,按键电路,继电器电路等。软件程序主要包括主程序,读出温度子程序,计算温度子程序,显示温度刷新子程序,语音播报程序等.我们利用DS18B20温度传感器采集温度通过STC89C5单片机系统在应用板上利用LCD1602液晶显示屏显示实时测得的温度 ,通过程序进行语音播报;当温度超过设定的上限时,继电器闭合,并驱动动机工作,以实现降温.
经过调试,结果显示LCD屏准确显示了室温,并能进行语音播报。当温度超过设定上限时,继电器闭合,风扇工作,开始降温;实现了系统设计要求的功能。
关键词:室内温度,自动控制,STC89C52单片机,语音播报。
目录
0 前言 1
1总体方案设计 2
1.1设计方案论证 3
1。2 主控制器 3
1.3 LCD液晶显示 3
1。4 温度传感器 3
2硬件电路设计 6
2。1.主控制器 6
2。1。1 电源部分 6
2.1。2 串口电路 7
2.1。3晶振电路 8
2.1.4复位电路 8
2。2 显示电路 9
2.3 数据采集电路 9
2。4语音电路 10
2.5按键电路 11
3 软件设计 12
3.1 主程序设计 12
3。2 温度转换程序 12
3.3 温度显示程序 12
4 调试分析 13
4.1 硬件调试 14
4.1.1硬件调试方法 14
4.1。2 电源调试 14
4.1.3 语音模块调试 14
4。2 软件调试 14
5 结论 14
参考文献 18
附录1 电路原理图 19
附录2 .PCB图 20
附录3主程序 21
1
0 前言
在信息高速发展的今天,科学技术日新月异,科技的进步带来了测量技术的发展,现代控制设备发生了翻天覆地的变化。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中室内温度检测就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
温度是一个永恒的话题和人们生活环境有着密切关系的物理量,是国际单位制的七个基本单位之一,作为各种信息的感知、采集、转换的功能器件温度传感器的作用日显突出,温度的检测与控制是日常生活中比较典型的应用。如在日常生活中测量并记录室内的温度,可以了解室内温度变化情况。而我们所要设计的系统正是进行温度的检测,并实现自动控制室温。
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。0~5.5V;
e.零待机功耗;
f.温度以9或12位数字;
g.用户可定义报警设置;
h.报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
i.负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;图3 DS18B20的外部封装图
DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑.
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1.第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性.
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
如图表1,DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应.因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
温度 LSB
温度 MSB
TH用户字节1
TL用户字节2
配置寄存器
保留
保留
保留
CRC
表1
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
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单电源供电,在电路中的C1~C4是必不可少的,缺一不可,具有调节电压值的作用。由图可知,当数据线接上串口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口为低电平。由于按键开关闭合和断开瞬间都会产生5~10ms的抖动,对于单片机来说完全可以感应到,因此采用软件消除抖动。
图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 STC—ISP界面图
2. 软件调试过程:
首先接上USB-—RS232C信号线,安装串口驱动程序;然后打开STC——ISP界面,进行软件调试。按下面顺序:
1)选择自己的CPU型号STC89C52RC
2)选择自己的端口:根据之前安装的串口驱动程序,右键——我的电脑——属性-—硬件—-COM查看自己的输出端口号
3)选择波特率、最高、最低
4)打开程序文件
5)自己编写的程序编译后生成的.Hex文件
6)点击、下载程序至单片机,调试
7)重复2和5
注意:在调试程序时,要把拨码开关拨到相对应的ON状态.
如下图17为系统调试完成后,正常运行的现场图
图17 系统工作现场图
23
5 结论
经过了四个星期的课程设计,让我对以前学的理论知识有了较深的体会,学习用理论指导实践,在实践中发现了自己有很多不足之处,并不断完善自己。因为前两周准备考研,没做多少东西,但这次的课程设计还是让我体会到很多东西,不仅仅是知识本身的,更多的是自己动手能力和逻辑思维能力的锻炼。同时,也知道自己还有许多要学的东西。
在以后的工作中,单片机是必须掌握的基础工具,所以我们认真学习单片机的知识,这对我们找工作是很有帮组的,遇到问题并不可怕关键是我们要找到方法去解决问题,一定要勤于动手,这样自己才会有提高。另外,对温度传感器的认识也不仅仅只停留在书本上了,亲身体会到了LCD显示屏和LED灯的应用.当然在这次宝贵的课程设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。在和同学的协作中去完成电路原理图的绘制,焊接电路板,最后进行调试,当然这些过程都离不开老师的悉心指导;这些工作必须按部就班,有计划保质量地完成,否则后面的工作就无法进行。
最后特别要感谢老师及同学在这四个星期对我的帮助。
参考文献
[1]唐文彦 传感器(第四版)[M],北京:机械工业出版社,2006
[2]夏路易:Protel 99SE[M],第一版,北京:北京希望电子出版社,2002
[3]王俊峰:电工技术基础[M],第二版,北京:电子工业出本社,2010
[4]谭浩强:C程序设计[M],第四版,北京:清华大学出版社,2010
[5]谢自美:电子线路设计测试与应用[M],第二版,武汉:华中理工大学出版社,2004
[6]蔡美琴: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=P2^0;
sbit wr=P2^1;
sbit lcden=P2^2;
sbit DC=P0^5; //电动机控制
bit flag0;
uchar display[2];
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;temp[i]!=’\0';i++)
{
write_data(temp[i]);
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);
display[2]=(bai<<4)|(shi);
display[1]=ge;
display[0]=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();
}
}
}
展开阅读全文