基于单片机设计的简易热水器控制系统.docx
《基于单片机设计的简易热水器控制系统.docx》由会员分享,可在线阅读,更多相关《基于单片机设计的简易热水器控制系统.docx(34页珍藏版)》请在冰豆网上搜索。
基于单片机设计的简易热水器控制系统
届别
学号
毕业设计
基于单片机设计的简易热水器控制系统
姓名
系别、专业
导师姓名、职称
完成时间
摘要
随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。
电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、安全的实施方案。
C语言对单片机编程有诸多优点,例如:
便于移植、句法检查时错误少、坚固性好、头文件种类诸多,能够方便快捷使用各种函数等。
本文采用STC89C52单片机作为控制器,使用C语言编写程序,设计了一款智能家用电热水器。
使用按键键盘设定温度,温度可以精确到0.1摄氏度,并使用LED灯显示,能够精确提供用户所需温度的温水。
采用DS18B20采集温度,使用LED灯显示,精确的显示出采集的水温。
当所需温度高于当前采集的水温时,使用继电器控制外接加热源,当所需温度低于当前采集的水温时,继电器断开不加热。
当所需温度高于采集温度时,继电器吸合开始加热。
基本实现了智能控制功能。
关键字:
18B20、STC89C52、热水器
ABSTRACT
Withthedevelopmentofsociety,theprogressofhumanscienceandtechnology,inallwalksoflifetomaketheirproductsintelligent,digital,becausethewaterheaterusingold-fashionedgasornaturalgasisburnedtoheatwater,adjustthetemperaturemanually,notonlycantheuserneedstobeaccuratelydetermined,andthereissomerisk.
Electricwaterheaterisakindofhouseholdappliancesforbathroomandkitchen,restroomuse,alongwiththeimprovementofpeople'slivingquality,householdelectricwaterheatermodernhaverejectedthepreviouspractice,andbyusingamoreaccurate,safeimplementationplan.
TheClanguagehasmanyadvantages,suchas:
microcomputerprogrammingfortransplantation,syntaxcheckerrorless,robust,headfiletypemany,canbeconvenienttouseavarietyoffunctions.ThispaperadoptsSTC89C52MCUasthecontroller,theuseofCprogramminglanguage,designedaintelligenthomeelectricwaterheater.Usethekeyboardtosetthetemperature,thetemperaturecanbeaccurateto0.1degreesCelsius,andtheuseofLEDlightsdisplay,canaccuratelyprovidetherequiredtemperatureofwarmwater.TheDS18B20collectiontemperature,theuseofLEDlightsdisplay,displaythetemperaturepreciseacquisition.Whentherequiredtemperatureishigherthantheacquisitionoftemperature,usetherelaytocontroltheexternalheatingsource,whentherequiredtemperatureislowerthanthecurrentcollectingwater,relayoffwithoutheating.Whentherequiredtemperatureishigherthantheacquisitionoftemperature,relaystartsheating.Thebasicrealizationoftheintelligentcontrolfunction.
Keywords:
18B20、STC89C52、热水器
1引言
随着人们生活水平的提高,热水器在人们的生活中扮演着越来越重要的角色,越来越受到人们的青睐。
由于燃气热水器易受水压限制,而且安全性较差。
每年使用燃气热水器造成的爆炸、中毒等事故也屡有所闻。
消费者对燃气热水器怀有一定的惧怕感,所以燃气热水器渐渐淡出市场。
而智能电热水器越来越受到人们的认可。
电热水器在中国的历史已经有10多年了,期间也经历了数次起落的过程,在上个世纪的最后几年,随着国外品牌的进入和国内一些大家电厂的目光转向电热水器,智能储水式电热水器能适应任何天气变化,普通家庭可直接安装使用,长时间通电可以大流量供热水。
使用时不产生废气,既安全又卫生。
目前市场上销售的电热水器多数还带有防触电装置。
干净卫生,不必分室安装,调温方便。
在电热水器发展到如今的水平,已经可以基本满足生产生活中的需求。
但为求精益求精,当今学者将目光放在了更好的调节控制水温水位上,尽可能得使其更智能化,能够做到更加的安全稳定舒适。
我国在对电热水器水温水位系统的研究已取得很大的成就,并在不断地完善之中。
智能电热水器水温水位检测器是采用数字化测量技术,把连续的模拟量(电信号)转换成不连续、离散的数字形式并加以显示的仪表仪器。
传统的电热水器水温水位检测器功能单一、精度低,不能满足数字化时代的需求,然而采用单片机的电热水器水温水位检测器功能多样化、精度高、抗干扰能力强。
本文所研究的电热水器水温水位检测器是以STC89C52单片机作为主控制元件来能实现热水器里的水温显示在数码管。
更进一步的采用继电器实现自动控制加热装置,是单片机应用在工业、农业、国防、医药、卫生等各行各业中的一个典型而普通的例子,随着科学技术的进一步发展,人们生活水平的不断提高,智能电热水器越来越受人们的青睐,同时节安全、节能、易操作也是不可缺少的。
在本设计中,研究智能电热水器的水温检测器非常有意义。
2设计内容及性能指标
本设计采用51单片机+DS18B20温度传感器+数码管显示+继电器+功能按键组成。
DS18B20温度传感器检测水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。
上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加热装置,使水温达到设定水温值。
当水温值超过设定水温值时,继电器断开,停止加热。
温度检测精确到0.1度。
并具有掉电保存功能,数据保存在单片机内部EEPOM中,按键还具有连加、减功能。
3系统方案比较、设计与论证
该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此系统功能的方案。
3.1主控制器模块
方案1:
采用可编程逻辑器件CPLD作为控制器。
CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。
采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。
但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。
且从使用及经济的角度考虑我们放弃了此方案。
方案2:
采用STC89C52单片机作为整个系统的核心,用其控制水温测量控制系统,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现水温的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。
3.2温度测量
方案1:
采用数字温度芯片DS18B20测量实际温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器STC89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
既可以单独对多DS18B20控制工作,还可以与PC机通信上传数据,另外STC89C52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
方案2:
采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(如下图),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
数据采集部分则使用带有A/D通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。
热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。
图1热电偶电路图
从以上两种方案,容易看出方案二的测温装置可测温度范围宽、体积小,但是线性误差较大。
方案一的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案一。
3.3设置温度
方案1:
采用键盘输入设置温度,键盘则可以用4个按键,一个复位键,一个功能设定键,一个加减一个减键。
四个键比较常用,而且用到的接口得到了极好的利用,仅需要4个接口。
方案2:
可采用4*4矩阵键盘,该键盘需要8个接口,而我们不需这么多键。
综上所述,我们选择第一种方案。
3.4显示模块
方案1:
用数码管进行显示。
数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。
方案2:
用LCD液晶进行显示。
LCD由于其显示清晰,显示内容丰富、清晰,显示信息量大,使用方便,显示快速而得到了广泛的应用。
单对于此系统我们不需要显示丰富的内容,而且LCD液晶价格贵,因此我们放弃了此方案。
综上所述我们选择方案1
3.5电源选取
由于本系统采用电池供电,我们考虑了如下几种方案为系统供电。
方案1:
采用5V蓄电池为系统供电。
蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。
但是蓄电池的体积过于庞大,在小型电动车上使用极为不方便。
因此我们放弃了此方案。
方案2:
采用3节1.5V干电池共4.5V做电源,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。
综上所述采用方案2
4系统器件选择
1.温度传感器的选择
由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。
这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件。
图2外部封装形式图3传感器电路图
5硬件实现及单元电路设计
5.1主控制模块
主控制最系统电路如图4所示。
图4单片主控电路
5.2显示模块电路
显示采用四位数码管显示,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。
显示电路如图5
图5数码管显示
5.3数码管显示驱动电路
三极管8550来驱动4位数码管,不仅简单,而且价格便宜。
图6驱动电路
5.4温度传感器(DS18B20)电路
5.4.1DS18B20基本介绍
DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。
DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。
因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。
并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。
图7温度传感器电路引脚图
5.4.2DS18B20控制方法
DS18B20有六条控制命令:
温度转换44H启动DS18B20进行温度转换
读暂存器BEH读暂存器9个字节内容
写暂存器4EH将数据写入暂存器的TH、TL字节
复制暂存器48H把暂存器的TH、TL字节写到E2RAM中
重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节
读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU
5.4.3DS18B20供电方式
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。
本设计采用电源供电方式,P2.2口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10μs。
采用寄生电源供电方式是VDD和GND端均接地。
由于单线制只有一根线,因此发送接收口必须是三状态的。
主机控制DS18B20完成温度转换必须经过3个步骤:
●初始化。
●ROM操作指令。
●存储器操作指令。
5.5继电器加热控制电路
电路如图8主要是用来给外部加热源加热的。
图8 继电器加热电路
6系统软件设计
6.1程序结构分析
主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报警温度程序。
温度信号处理程序:
对温度芯片送过来的数据进行处理,进行判断和显示。
数码管显示程序:
向数码管的显示送数,控制系统的显示部分。
按键设定程序:
可以设定低温和高温报警可精确到0.1度。
6.2系统程序流图
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,与设定的报警温度比较,其程序流程见图9所示。
通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。
图9DS18B20温度流程图
6.2.1DS18B20初始化程序流程图
在DS18B20工作之前需要进行初始化,流程图如下:
图10初始化程序流程图
6.2.2读温度子程序流程图
读温度子程序的主要功能是从DS18B20中读出温度数据,移入温度暂存器保存。
其程序流程图如下:
图11温度子程序流程图
6.3程序编写与调试
6.6.1Keil编译器软件简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
图15C51工具包整体结构图
KeilC51单片机软件开发系统的整体结构C51工具包的整体结构,如图3.1所示,其中uVision与Ishell分别是C51forWindows和forDOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及A51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
6.3.2使用Keil软件建立一个工程
Keil是目前进行51单片机开发最常用的编译软件。
关于Keil的使用,有很多的资料介绍,这里只介绍其整个编译过程,在最短时间内开始使用Easy51DP-2开发板。
对于Keil更详细的介绍,可以参考一些专门书籍资料。
在Keil里,每一个完整的程序,都是以一个工程的形式建立的。
一个工程里可以有一个或多个*.c文件和*.h文件,但只可以有一个main()函数。
一般的做法是将包含main()函数的C文件加入到工程中,其他文件以#include头文件的形式加到这个C文件里。
这样,在编译的时候,其他的文件会被自动的导入到工程里来。
打开Keil软件后,出现(图16)所示界面。
当然,如果Keil在上次关闭时有打开的工程,再一次打开时它会自动加载上一次的工程文件。
图16Keil软件主界面
首先点击Project->NewProject…(Project->OpenProject…为打开一个已经存在的工程),如图17所示。
图17Keil软件打开新工程界面
点开后,在出现的对话框中选择工程存在路径,单击“保存”后,出现(如图18所示)界面。
在此界面上选择电路板上所用的单片机型号:
AtmelSTC89C52(或者是AT89S52,视开发板上具体型号而定),单击“确定”。
图18选择电路板上所用的单片机型号
设置完成后,软件会提示“是否将8051上电初始化程序添加入工程?
”如图19所示,这个一般选择“否”。
(关于STARTUP.A51的相关内容可查阅相应资料)
图19是否将8051上电初始化程序添加入工程
这样,就建立了一个空的51工程。
接下来的事,就是在这个工程里面加入自己的程序代码。
点击
,或者File->New,便建立了一个空的文本框。
现在,就可以开始在里面输入你的代码了。
保存时注意:
如果是用C语言写的程序,则将文本保存成*.c,如果是用汇编写的程序,则将文本存成*.asm。
到目前为步,我们已经建立了一个工程,也写了一个程序代码。
但现在还不能开始编译。
因为还没有将程序代码添加到工程里面去。
下一步就是将写完的程序添加到工程里面,如图20所示,在左边ProjectWorkspace里的SourceGroup1上右击,选择AddFilestoGroup’SourceGroup1’。
在打开的对话框中,选择刚存的文件路径和对应的扩展名。
这样,程序就添加进了这个工程。
图20添加文件到工程中
下一步,就开始编译刚输入进去的代码。
点击工具栏中的
按钮。
接着,Keil会打出下面的提示:
Buildtarget'Target1'
assemblingled.asm...
linking...
ProgramSize:
data=8.0xdata=0code=100
"first"-0Error(s),0Warning(s).
其中“"first"-0Error(s),0Warning(s).”说明现在的工程编译通过,0个错误和0个警告。
建立工程的时候,默认是不生成HEX文件的,得在编译做如下设置:
单击
,或者在ProjectWorkspace里Target1上右击,选择“OptionsforTarget‘Target1’”。
出现如图21所示对话框,选择“Output”按图示,将箭头所指的多选框勾上,点“确定”。
现在再点击
重新编译,系统提示:
“creatinghexfilefrom"first"...”。
便会在工程所在文件夹里生成HEX文件。
图21生成HEX文件
6.3.3使用Debug进行调试
Keil有很强大的调试功能,可以显示C程序的反汇编代码、可以计算代码运行的时间、可以显示程序中某一变量的值……能用好这个调试工具对编写单片机程序会有很大的帮助。
同样的,在这里,只对Debug进行简单应用介绍,更详细的使用方法可以参看相关书籍资料。
图22调试前设置窗口
首先,单击
,弹出如图22所示对话框,在Target页面上设置对应的晶振频率。
其他不用作修改。
设置完成后,单击
,进入调试界面(如图23所示)。
图23Keil调试界面
点击
中对应的工具按钮则可以开始调试。
另外,“View”下的三个工具在调试中会经常用到如.图24所示,“DisassemblyWindow”显示C文件的反汇编程序;“Watch&CallStackWindow”可以显示程序中某一变量的值;“MemoryWindow”可以显示内存中某一地址的值。
图24三个常用的调试工具
7系统的安装与调试
7.1安装步骤
1.检查元件的好坏
按电路图买