第1章 引言
随着科学技术的发展,城镇居民家庭多数以更加安全方便的电热水器代替了燃气热水器;从前风光无限的燃气热水器因污染原因和安全问题逐渐退出了我们的视线;新兴的太阳能热水器虽然受到安装条件和天气原因的限制,但其安全、节约、环保的特性广受消费者青睐,发展态势迅猛。电热水器相较于燃气热水器和太阳能热水器的优点:便于安装,不受外部天气的影响,不受楼层和供水管道的限制,加热速度快也更加有安全保障,正是因为这些优点大部分家庭选择电热水器。由于技术在不断的发展,对各种嵌入式设备的要求也越来越高了,与此同时热水器的智能化发展也非常迅速。人们已经不能满足传统热水器非智能的操作方式,再这样的背景下,本次设计将要设计一款智能化的热水器设备。通过热水器智能的调控可以完成自动断电的安全功能,同时设置的有红外遥控的功能,可以满足用户的遥感的要求。快捷方便,使人们洗浴时能放心享受,安全便捷,其性能满足人们对现代生活快节奏的需求。
STC89C51的内部资源非常丰富,而且功能强大。STC89C51集成以下功能STC89C52最后一个字符“1”代表了该存储芯片的Flash容量大小为4k字节。同时它内部集成256字节片内RAM,RAM主要用于程序变量的存储,256字节可以适用于小型的程序运行。32个数据I/O 接口,这些接口在用于普通功能时用来完成数据通信。这些I/O口有的还有复用功能,这在后面会介绍到。1个看门狗定时器,起到监测程序运行状况的作用。2 个数据指针,一个堆栈指针,一个程序PC指针。三个16位定时器,大部分要配合中断来实现定时功能,主要作用是计时的。三个16位计数器,用于监测脉冲跳变次数或者其他计数。6个中断源,中断在单片机的内部资源中占有很重要的部分,有了中断程序可以高效率的执行。全双工串行口,通过串口来和其他主机通信,起到通讯作用。[1]借助于STC89C51单片机的强大功能,来控制真个系统的协调运行,STC89C51单片机作为此次系统的控制芯片,通过围连接显示模块以、数据输入模块,红外线传输模块以及报警电路完成此次的系统设计。
本设计第一章主要描述了加热电热水器控制系统的应用背景、目的和意义;第二章是控制系统的需求分析和设计方案的选择,主要包括控制器方面的选择;第三章介绍了控制系统硬件电路的设计;第四章主介绍了控制系统软件方面的设计;第五章进行了控制系统的仿真和测试;第六章主要是对该系统存在的问题以及解决的方案进行总结。
第2章 系统功能需求分析与控制方案选择
根据预想所要达到的控制要求有:(1)用LCD1602液晶显示水温、设置上下限和定时时间。(2)水温检测显示范围为00~99℃,精度为±1℃。(3)温度设置区间为0度到99度,系统不断检测当前水温,如果水温高于用户设定的数值,则系统自动断电,不在加热。如果水温低于用户设定的数值,则系统不会断电,继续加热。(4)设置4个程序按键。分别为设置按键、加键、减键、确定键。(5)可以红外遥控,通过红外一体接收探头接收遥控器信号,执行与主板按键同等功能。由此可以确定两种方案进行比较选择。
2.1 系统功能需求分析在此次的系统设计中主要是通过温度传感器测得的数据,通过和单片机的连接引脚完成数据的传输。单片机通过采集到数据进行温度值的判断,来控制加热器的运行状态。系统中的数据显示使用的是LCD1602液晶显示屏,来显示实时温度的数值。报警指示灯(黄):当热水器出现异常情况时,该指示灯被点亮。
系统在通电之后,单片机内部的PC指针指向程序运行的区域,首先开始的是温度传感器的初始化,在完成温度初始化任务之后,系统就处于检测判断状态。检测按键的发生以及温度是否超出设定区域。首先进行温度数值的判断,接着继续检测温度按键,若无按键,则接着上一步的执行(以新的设定值开始工作)。若有按键,则重新设定温度范围,如此循环。
2.2 方案选择方案一:以STC89C51单片机为控制中心的智能电热水器。
主控模块在整个系统中是最中心的部分,承担着统筹的作用,需要检测键盘等各种参数,以及驱动数码管的显示。[2]在本次设计中我选用了51系列单片机中的STC89C51单片机作为系统的主控芯片。因为单片机功能强大,应用广,从小的电子产品到大的工业控制都有很广泛的应用。
STC89C系列单片机兼容性很好。除了单片机内部扩展资源不同之外,其余资源都相同。比如说52类型的单片机比51类型的单片机E2PROM扩大了2倍,以及内部随机数存储器RAM增大些之外,其余功能全部一样。也就是说STC89S系列单片机基础功能都具备,并且引脚位置,中断地址,以及定时器方式都是一样的,唯一不同的是扩展的功能。由于单片机在不同场合控制的复杂度不一样,所以对单片机内部资源配置也不同。以便于适应于多种场合使用,而且选择合适的单片机型号,可以节约成本。当然,资源丰富的单片机价格也要稍贵一些。
此类单片机以EEPROM电可檫除和Flash技术为主导的存储器单片机以FLASH作为存储器的好处很明显,Flash可擦出次数多,一般很少因为擦除程序超出擦除Flash次数而损害单片机的。单片机的存储器除了可以存储程序,还可以运行程序,但是不能存储程序中的某些变量。这样可以加快程序的执行速度,提高单片机的效率。STC89系列的单片机具有以下特性:
(1)单片机引出的多个I/O口,使数据交换更加方便。
(2)采用静态时钟模式。单片机外部连接晶振电路,通过晶振里面的震荡电路给单片机提供时钟脉冲。时钟脉冲为单片机的程序执行提供了时钟节拍,在一个时钟节拍下,单片机的PC指针取一个指令执行,从而完成程序的顺序执行。
(3)可以应用于较小系统设计,或者定制用于专用的系统控制器,对需要控制的系统提供一种便捷的处理方法。
(4)通过定时器和计数器,可以设置时间间隔和记录电压变化次数。
(5)可以使用汇编语言设计的程序,其执行的效率更加高效。以达到节约单片机内部宝贵的资源为目的。
(6)单片机的品种多,可以选用不同内部资源部处理器,达到节约成本的目的。
下面具体介绍STC89C51芯片的参数:
STC89C51是一个8位微控制器,芯片内部已经集成4K字节存储区域的Flash,可以直接运行程序。STC89S51采用的是51系列的内核它与工业80C51产品指令和引脚完全兼容。单片机的P0口。如果要改变P0口的输出电平值时,要在在单片机的相应寄存器里写入数据1时,单片机就会把相对应的端口输出高电平。如果在相应的寄存器里面写入0,单片机就会在相对应的端口输出定电平。比如在P0的寄存器地址上写入P0=0x01,则P0.1口位置就会输出高电平;如果P0=0x00,则P0口位置就会输出低电平。同理,外部线路提供低电压则可以通过该引脚读出低电压,单片机内部对该位的寄存器就会被写入0。由于P0口输出电流较小,所以需要上拉电阻来提供驱动电流。
单片机的P1口。P1口外部不用设置上拉电阻,P1口的能够提供20MA的驱动电流,所以可以直接对P1口的寄存器写值。P1口一般没有复用接口,在STC其他的单片机中有P1口的复用引脚,用来设置定时器PWM波的输出,或者单片机内部AD电压值的采集端口。在本次心率计的设计中,并没有用到PWM的功能,所以选择的芯片为传统的51内核单片机。在没有复用功能的单片机引脚,只有引脚的高电平和低电平输入输出功能,以及对单片机引脚的电压值读取功能。功能类似于P0口,如果要控制P1口的电平输出值,就要对P1口的地址寄存器写入数据。
P2口可以作为普通I/O功能也可以用作第二功能。当P2口作为普通I/O口输入输出时,同P0、P1口一样,只是对该位的引脚输出高电平和低电平的操作。当P2口作为第二功能使用时,P2口作为外部存储区域的高八位地址线。当单片机的内部存储区的容量不够时,就要采取外部连接存储芯片的办法来扩充单片机的存储容量。[3]由于单片机的程序存储区域可以直接运行程序,单片机的内部可以直接寻址找到程序所在的地址,在连接单片机外部外部存储芯片时,要和芯片的读取地址相对应,所以外部存储的连接位置是不可改变的,从而确定P2作为复用引脚的地址位置。通过对P2口地址的访问,可以读取外部存储芯片中的数据,也可以对相应的地址为写入数据。外部连接的存储芯片的大小可以选择,通常选用的标准是根据程序的大小来决定的。
P3口是一个可复用的端口。P3口的第一功能是作为数据的输入输出,通过对P3口的地址写入数据,从而控制高低电平的变化。当单片机设置了第二功能是,单片机的第一功能就不再工作,两种模式只能选用其中的一种。
另外P3口还可以设置第二功能。STC89C51单片机内部集成了6个中断。中断的作用是使程序更高效的执行,其中两个外部中断通过外部引脚进行触发,提供感知外部的电压变化进入中断。定时器一共有3个中断,这些中断是单片机的内部中断,根据设置相关的寄存器来触发定时器中断。[4]中断的相应与设置的相应中断标志位有关,一旦中断响应,就立即进入用户写的中断程序中。另外一个是串口中断,来检测串口接收或者发送数据的。串口对于单片机来说是一个与外界通讯的接口。有了串口,可以完成单片机对PC的通讯,或者单片机对单片机的通讯。通过串口传输数据,完成对单片机的控制任务。
通过上面所述,可以知道STC89C51单片机具有结构简单、控制能力强、可靠性高、体积小、价格低等优点。下图为以STC89C51单片机为控制芯片的系统连接图:
方案二:PIC16C72单片机为控制器件的智能电热水器。
PIC16C72是一款8位芯片。它的片内资源要比51单片机丰富,它的片机集成A/D转换器,片内有大容量的程序存储器以及数据存储区。但是它的成本比较贵。通过上面的综合考虑,这次设计硬件电路时,并不需要处理器片内丰富的资源,这次写入的程序较小,普通的51单片机就足以应付这次的系统设计,但考虑到成本控制和软硬件实现难度,采用方案一的控制系统设计比较方便快捷,可以进一步提高电热水器的智能作用,能够保证持续的热水供应,并可以满足人们日常生活的需要,提高了人们生活的质量。
2.3 本章小结本章主要对此次设计的家用电热水器控制系统的控制器方案选择上做了决定,最终决定使用结构简单、控制能力强、可靠性高、体积小、价格低的STC89C51单片机作为控制器。
第3章 硬件系统设计
本章节的硬件设计主要是系统电源的设计以及为控制芯片的外围电路设计。下面首先介绍系统电源电路的设计:
3.1 电源电路下图为系统电源的设计流程图:
系统供电电压各部分简介:
(1)对电压降压
由于市电的电压值较高,单片机不能直接使用,所以在进行电压处理之前应先进行电压的降压操作。
(2)整流滤波电路
电压进过变压器的电压转化之后电压值虽然稳定在5V左右,但是输出的是交流电。需要把交流电转变为直流电,这一步就需要设计整流滤波电路。
(3)稳压电路
当电流经过整流滤波之后电压并不稳定,单片机需要一个稳定的电源这是的电源对单片机的系统稳定性不利。所以需要通过一个稳压芯片把电压稳定下拉。[5]本次设计采用的芯片是7805。通过这个芯片可以控制电压的稳定输出。下图为稳压芯片的电路连接图:
图3.2 可调稳压电路原理图
图3.3 7805三端稳压电源电路
需要特别注意的是,单片机需要输入较为稳定的电压波形,虽然稳压器7805输出电压波形比较稳定,但是为了保证系统的稳定性,防止突发事件的产生,需要在其输入端与输出端加滤波电容,滤除不需要波形,防止烧坏系统器件,保证系统稳定运行。
3.2 单片机最小系统说明下面主要介绍单片机最小系统的两个外围电路:
时钟电路:晶振电路是单片机程序运行的基础,晶振振动频率决定单片机的程序执行速率。晶振作为单片机的时钟节拍。有两种时钟产生方式,一种成为内部时钟,另一种称为外部时钟。为了使单片机的功耗消耗较小,本系统使用的是外部时钟电路。片机内部集成了一个震荡电路,在X1和X2引脚连接晶振,并且在晶振的两端加上电容,给单片机上电,就可以完成单片机晶振起振,本系统选择的晶振是12MHZ。
复位电路:复位电路,负责单片机的程序复位。当程序运行到某个内存区域时,使用者不愿意程序继续执行下去,选择复位引脚,使程序恢复到0地址存储区域执行。当复位电路中的按键按下时,会给两个电容充电,使RST引脚的电压升高时间长达单片机的一个时钟周期,就可以完成单片机程序的复位。
图3.4 单片机最小系统
3.3 温度检测电路温度传感器DS18B20体积特别小,硬件开销相对较低,测量精度比较高,而且抗干扰能力特别强。DS18B20是全数字温度转换及输出,单总线数据通信,最高能达到12位分辨率,检测的温度范围大,是开发有关温度产品的极佳选择。[6]其主要功能特性如下:
(1)独特的1-Wire总线接口仅需要一个管脚来通信。
(2)具有多路采集的能力使得对于分布式温度的采集和应用更加简便。
(3)无需其他外部器件。
(4)能够通过数据线进行供电,供电范围为3.0V至5.5V。
(5)待机时无损耗。
(6)可测量温度的范围为:-55℃至+125℃(-67℉至+257℉)。
(7)温度以9 位数字量读出
(8)如果测量温度的范围超过-10℃至85℃之外时,具有+-0.5℃的精度。
(9)使用者用于对温度报警功能的设置。
(10)使用者设置警报温度的温度值,用于报警功能。
DS18B20芯片内部有一个测量温度的传感器,它是温度传输的基础;一个存储芯片的固有信息的ROM区;用于存储芯片的ID等信息;一个RAM存储区,用于芯片的温度数据以及一些寄存器数值的存放;还有一个警报电路。其工作原理为:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
温度传感器接单片机时只需要用到一个I/O口,连接单片机的I/O口时没有特殊的要求,当芯片连接单片机时,单片机通过单总线协议,从这一个I/O口里读取或者写入数据。但是不管是哪种方法,I/O口都要接上4.7kΩ左右的上拉电阻。下图为温度传感器的电路连接图:
图3.5 测温模块
3.4 人机交互电路3.4.1 键盘接口电路按键的设计常用的有两种,一个按键连接一个I/O,这是独立按键,另一种是矩阵排布。各有优点,首先,独立按键可以直接连接到中断引脚。这样设置好单片机的相应中断位,就可以用按键来触发中断。这样做的好处是:程序可以很快的去执行所需要的功能,对按键的相应速度很快。可以达到按下按键就可以触发相应的事件。另外独立按键可以减少程序负担,不用扫描相应的位置,这样可以加快程序的执行,相对来说,对程序的编写难度也会有所下降。如果使用矩阵连接键盘的方法,它的好处是节约微控制器的I/O资源。比如说25个按键可以连接5个接口就可以。用程序的扫描办法,是可以实现的。比如说用到的按键数量较少,当然选用独立按键的办法,这样可以减少程序复杂度,也不会浪费单片机的I/O资源。[7]当然如果按键较多,那就必须使用矩阵按键要不然,单片机只能连接几个按键,而其他外设就连接不上。
按键的使用也需要注意。因为现在用的大多数按键用的是轻触按键。当按下之后按键两端的电路接通。当松开之后,按键的两端电路断开。这样就会产生一个抖动现象。因为单片机采集速度较快,当按下按键到按键弹起这段时间内可能会产生多次跳动。对数据采集产生不可预估的变动。这要通过程序做相应的延时来消除机械抖动。在本次设计中所使用的是四个独立的按键,接口电路如下图所示:
图3.6 键盘电路
3.4.2 显示电路本次设计的显示模块使用的是LCD1602,下面介绍这款液晶显示器以及接口电路。
(1)显示原理介绍
1602显示屏可以显示16×2个单元,每个单元有8×8=64的点组成。其中8为Y坐标的点数,8为X坐标的点数,根据点数的亮灭组成相应的图形。把需要点亮的点数写入显示屏内部寄存器中,显示器自动在屏幕上打印出预想的图像。
(2)字符的显示
用LCD显示一个字符时,字符显示对应一个显示单元,因为一个字符由8×8点阵组成的图形,所以可以显示相应简单的字符。如果想要在显示屏上显示一个字符就要在相应的点上写1,这样对应的点就点亮,根据点的排列,就显示出了字符。比较方便的是控制器里面自带有字符存储器,写字符时,可以直接读取这些字符的存储位置,就可以得到相应的字符显示。字符存储器里面存储了160个字符,字符种类丰富,可以显示一些简单的界面。
(3)汉字的显示
汉字的显示要用到电脑上面的取模软件,先对汉字取模(就是对各个点的显示,形成一些编码,复制到程序的存储数据区),之后把用取模软件得到的数据写到LCD的CGRAM中,读取相应的位置,就可以在屏幕上打印出所需要的汉字。LCD1602显示屏内部集成了地址命令,这些地址命令控制显示字符图像的位置。通过写命令写入地址,就可以在显示屏的地址的位置写入数据,[8]把数据写入CGRAM,就可以在液晶显示字符图像。
在对液晶显示屏写数据和写命令之前,要先对液晶显示屏进行初始化,初始化是通过命令表查得想要初始化的功能来设置的。初始化操作包括液晶的显示位置、光标是否打、屏幕是否左右移动、是否指针每读一位自动加一、是否清屏等等命令。
图3.7 单片机与LCD1602的应用电路
LCD1602液晶显示器厂家已经在CGRAM存储器里面固化好160个字符的图形。如图2-13所示,看以看出存储的字符有0~9的数字、26个大小写英文字母、以及一些特殊字符。观察下图不难发现,字符的位置都有一个相对的编码,这个编码就是写入液晶显示屏的数据数值。比如大写的英文字母“O”的代码是01001111(二进制),液晶显示屏就会把对应地址中的字符打印到屏幕上,就可以看到字母“O”。下表为LCD1602的引脚功能图以及和单片机的接口电路图:
表3-1 引脚接口说明表
编号 | 符号 | 引脚说明 | 编号 | 符号 | 引脚说明 |
1 | VSS | 电源地 | 9 | D2 | 数据 |
2 | VDD | 电源正极 | 10 | D3 | 数据 |
3 | VL | 液晶显示偏压 | 11 | D4 | 数据 |
4 | RS | 数据/命令选择 | 12 | D5 | 数据 |
5 | R/W | 读/写选择 | 13 | D6 | 数据 |
6 | E | 使能信号 | 14 | D7 | 数据 |
7 | D0 | 数据 | 15 | BLA | 背光源正极 |
8 | D1 | 数据 | 16 | BLK | 背光源负极 |
1602液晶模块内部的控制器共有11条控制指令,如表所示:
表3-2 指令说明
序号 | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
1 | 清显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2 | 光标返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * |
3 | 置输入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
4 | 显示开/关控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
5 | 光标或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * |
6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * |
7 | 置字符发生存贮器地址 | 0 | 0 | 0 | 1 | 字符发生存贮器地址 |
8 | 置数据存贮器地址 | 0 | 0 | 1 | 显示数据存贮器地址 |
9 | 读忙标志或地址 | 0 | 1 | BF | 计数器地址 |
10 | 写数到CGRAM或DDRAM) | 1 | 0 | 要写的数据内容 |
11 | 从显示模块寄存器读值 | 1 | 1 | 得到读出的数值 |
3.5 红外一体接收模块发送的远程控制功能指令代码通常使用多一些二进制串行代码及其编码规则:脉冲头,代码系统,数据代码、数据补充和结束。第一个脉冲作为一帧命令的起始位置,系统代码是用来区分不同类型的电气设备,数据代码是用来完成命令的功能。一个是数据根据数据代码逆向代码。[9]
红外线的一束光的长度是固定的。而一束红外光里面有包含着丰富的信息,通过对这些信息的判断,可以分析出发送方要发送的信号。红外通讯的0和1通过不同的编码来表示。红外采集电路如图:
图3.8 遥控接收模块
3.6 报警电路当单片机检测到温度传感器输入的温度值大于当前系统设置的温度值时,在蜂鸣器的连接引脚输出一个高电平,这是蜂鸣器发声,反之,蜂鸣器不发声。
图3.9 蜂鸣器驱动电路
3.7本章小结本章主要对系统的应用电路进行介绍,主要说明了系统电源电路,处理器的外围电路,加热电路,以及声音提示电路和温度采集电路等部分,电源电路为系统提供+12V和+5V的电源,人机交互电路负责单片机和外界的信息交流;温度控制电路实现控制水温;声音提示电路负责热水器在非安全状态下工作时发出声响提示用户。硬件设计部分主要是完成以上电路的设计,包括各个电路的理论分析以及各个电路与单片机的连接等等。
第4章 软件系统设计
单片机资源分配如表所示,列出了本系统使用STC89C51单片机的所有I/O口资源,包括了人机交互模块,温度检测模块以及声音提示模块等。
表4-1 I/O口资源分配表
4.1 主程序流程图本系统采用STC89C51单片机为核心控制器对整个系统进行控制,其控制过程如下:首先通过人机交互模块设定系统的控制策略,然后通过温度检测模块检测水箱中的温度,同时通过温度控制模控制系统的加热模块工作。并将热水器中的温度值实时的显示到显示屏上。[10]系统的主程序主要完成的是对各全局变量进行定义,对时钟与时间的初始化,调用子函数的功能,流程图如图4.1所示。
4.2 液晶显示程序设计通过阅读LCD1602的芯片手册可以得知,液晶屏:LCD1602的显示模式一般设置为16×2显示,8位数据接口显示状态;光标显示可按实际需求和个人偏好设定。
4.2.1写操作时序图图4.2是LCD1602写操作时序图,分析可知LCD1602液晶的流程如下:LCD1602显示屏内部集成了地址命令,这些地址命令控制显示字符图像的位置。通过写命令写入地址,就可以在显示屏的地址的位置写入数据,把数据写入CGRAM,就可以在液晶显示字符图像。
图4.1 xxx主程序流程图
图4.2 写操作时序图
4.2.2 初始化程序LCD1602初始化包括初始化以下寄存器:显示模式寄存器、光标设置寄存器和移屏寄存器。显示模式寄存器通常设置16×2显示;光标设置可以设置是光标显示或者是光标不显示方式;整屏移动可以设置整屏移动或者不移动。LCD1602初始化程序流程图如图所示:
图4.3 LCD1602初始化程序流程图
4.2.3 向LCD1602发送数据程序设计通过上面的子程序调用,可以向LCD1602内部输入一个8位的地址,之后在调用一个写入数据的子函数,就可以完成在对应地址上写入一个字符。
4.3按键扫描程序设计考虑到用户在进行按键操作时,按下及松开的瞬间都容易产生抖动现象,造成单次按键操作时按键端口电平多次跳变。采取按下按键延时判断或者中断法都可以克服按键的抖动与窄脉冲的干扰影响,采取硬件措施加以克服需要增加额外的元件,本设计采用软件措施完成去抖动和防干扰处理。[11]本设计采用定时中断扫描的方式进行按键检测,通过单片机的定时中断,每隔10ms扫描一次按键端口状态,按键检测过程中无需一直监视按键端口或执行额外的延时程序,节省了单片机的CPU资源和中断资源。按键扫描程序流程图如图所示。
图4.4 按键扫描程序流程图
4.4温度控制程序设计温度传感器的信号传输,使用的是单总线的产生方法,通过芯片手册介绍的时序以及延时间隔,可以完成温度数据的采集。
4.4.1初始化DS18B20首先要进行DS18B20芯片的初始化,通过芯片的初始化,可以设置本次需要传输温度的精度,以及温度值的转换的速度。下图为芯片的初始化时序图:
图4.5 DS18B20初始化时序图
图4.6 DS18B20初始化流程图
4.4.2读取DS18B20当前温度硬件电路连接好以后,只需要按照下面过程操作即可读出温度数据。本设计中只对一个DS18B20进行控制。[12]本次选取的温度精度为11位,由于该芯片内部的存储器是八位的,所以需要分两次读取温度的数据。通过温度的一位运算,最终输出准确的温度值。温度转换流程图如图4.7所示。
4.5控制程序策略设计整个热水气的控制系统主要分为三步来执行单片机内部的程序,首先利用温度传感器来采集外界的温度数值,接着通过单片机的程序判断是否达到温度的临界值,通过判断的结果来执行对热水器的加热装置的控制。这个三个步骤不断重复,使整个系统实现所需的控制目标。
图4.7 读取DS18B20温度流程图
下面介绍各个按键的功能:
“功能键”用于切换数值项的可调状态。第一次按下定时器变为可调,再次按下温度上限变为可调,再次按下温度下限变为可调。此为一个循环,直至“确认键”按下,保存当前设置,跳出菜单。
“加键”和“减键”用来调整设定的时间和温度。当前状态为可调状态时每按一次“加键”和“减键”,被设置的数据值递增或递减。调整温度值时以1℃为调整单位,调整时间时以1分钟为调整单位。
“确定键”用于推出当前的可调状态,保存当前设定数值并运行程序。
4.6本章小结本章根据电路原理图进行软件设计,对各个子程序进行了相关的原理分析。其中,详细的介绍了控制策略程序、液晶显示屏LCD1602操作程序和读取DS18B20温度值程序。这样整个系统的设计部分就完成了。
第5章 仿真与调试
Proteus产品系列包含了革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。ISIS提供给用户图形外观包括线宽、填充类型、字符等的全部控制,使用户能够生成如杂志上看到一样精美的原理图,远胜过CAD软件绘制出的稀薄的线条。画完图可以以图形文件输出,或者拷贝到剪切板以便其他文件使用。[13]这就使得ISIS成为制作技术文件,学术论文,项目报告的理想工具,也是PCB设计的一个出色的前端,其画图的外形由风格模板定义。根据硬件设计和软件编程,可以在Proteus软件上进行仿真,模拟实际运行结果,下图为仿真电路图:
图5.1 仿真电路
调试流程如下:按键→上电复位→水温检测→数码管显示→下载程序运行。程序调试分为三个部分:按键调试,指示灯显示调试,及数码管显示调试。在具体仿真的过程中,按键调试时,应注意按键的次序,首先是温度+键,然后测试温度-键,否则有时会出现数码管显示延时现象,这种情况主要跟程序设计有关。基于编程方面有些薄弱的情况,应该严格按照按键次序进行调试。指示灯调试时,有时会出现指示灯无显示或者不明显、亮度不够的情况,这是由于指示灯电压过低造成的,应尽量避免。数码管显示时,只要前两个步骤进行顺利,数码管就可以正常显示。由于本设计采用独立式按键,主程序调试结束后,各部分运行正常,能够显示水温结果。另外,本次设计采用的温度检测模块,检测精度不高,有时会出现温度跳跃式显示,比如:有时此时刻温度显示为39摄氏度,下一时刻会显示46摄氏度。此种情况出现的原因是由于温度检测模块的内阻过热,导致检测结果不够准时和准确。这是硬件方面的问题,暂时还没有找到可替换的模块,所以无法解决,但不影响整体的效果。按此流程对系统在不同的温度条件下工作情况进行测试。
本设计的控制要求使热水器内部水温保持在用户所需要的温度范围内,仿真设置温度范围为29摄氏度到35摄氏度,当前温度低于29摄氏度时,加热电路工作,水温升高直至35摄氏度,此时加热电路停止工作;当环境温度再次低于29摄氏度时再次加热直至35摄氏度,循环往复使温度保持在29摄氏度到35摄氏度之间。设置当前温度设置为20摄氏度,低于温度下限29摄氏度,此时报警电路工作,发出报警声音,继电器闭合,工作指示灯亮起,加热电路工作。
图5.2 低于下限温度运行状况
设置当前温度为32摄氏度,在29摄氏度到35摄氏度范围之间,此时报警电路不工作,加热电路不工作。
图5.3 上下限温度间运行状况
设置当前温度为40摄氏度,高于温度上限35摄氏度,此时报警电路工作,发出报警声音,加热电路不工作。
图5.4 高于上限温度运行状况
仿真结果显示,热水器在温度低于温度下限时报警加热;温度高于温度上限时报警不加热;温度在温度上下限之间时不报警不加热;热水器在各种温度条件下工作正常,达到设计要求。
第6章 总结
踉踉跄跄地忙碌了两个月,毕业设计课题也终将告一段落。电热水器也基本达到预期的功能。但由于能力和时间的关系,总是觉得有很多不尽如人意的地方,譬如功能不全、外观粗糙、做工简陋、安全性能较低等问题。但做一件事情,不必过于在乎最终的结果,可贵的是过程中的收获。在进行此次毕业设计中,通过多次去图书馆进行查阅对各方面的知识有了一定的了解,比如单片机之间红外通信传输、温度采集和处理;在制作过程中,通过对元件放置位置选择、连线选择和万用板焊接,动手制作的能力大大提升。通过对单片机的学习和使用,知道了以后发展的方向和道路,只有真正的去动手操作才能把课堂学习到的理论知识去熟练的运用和提高,为以后的工作和学习打下坚实的基础,才能更进一步。也希望以后的学习工作中可以做的更好,能够弥补这次毕业设计中所发现的,不能熟练运用学习到的理论知识,思考问题过于片面,动手制作能力有待提高等问题,这也是毕业设计的初衷,发现自己的不足并提高自己的能力,成为一个各方面全面发展,对社会有贡献的人。
致谢
感谢老师从选题到最终完成对我进行的帮助,老师细致严谨、一丝不苟的作风一直是我学习的榜样;循循善诱的教导和不拘一格的思路给予我无尽的启迪。这篇论文的每个细节和每个数据,都离不开老师细心指导。同时也要感谢室友们对我的帮助,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文顺利的完成
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的老师、同学、朋友给了我帮助和支持,在这里接受我诚挚的谢意。