基于51单片机的智能热水器控制系统同名9021Word下载.docx
《基于51单片机的智能热水器控制系统同名9021Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的智能热水器控制系统同名9021Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
在热水器的使用效果上,功能也越来越丰富,使用更加人性化,甚至结合最新的智能家居和物联网理念,智能化程度大大提高,给人们的生活带来了极大的方便。
现在的热水器向着安全、节能、稳定、高效、人性化的方向快速发展着。
单片机是一种微控制器,体积小、功耗低、通过编程和外围电路设计,可以完成多种智能控制任务。
随着单片机技术的迅速发展,越来越多的家用电器采用各种型号的单片机为控制核心,来完成和人类的交互,并通过相应的程序和内部运算,实现一些智能化的控制,使家用电器的操作更加人性化,控制更加智能化。
在热水器中,也广泛采用了单片机作为控制核心,通过相应的温度传感器,在热水器的温度控制上达到了更高的精度,完成了从最初的旋钮调节逐渐向数字化调节方向转变。
同时,通过不同的传感器,由单片机控制并指示热水器的各种工作状态,在发生缺水、水温过热等情况时及时向用户给出声光报警,从而防止发生意外,保障了用户的安全。
本文所提出的智能热水器控制系统,以51系列单片机为控制核心,通过温度传感器、水位传感器感知热水器状态,并通过按键、显示屏和用户进行人机交互,实现了定时加热、自动恒温的功能,同时也有过热、缺水的报警设计,给用户带来方便。
本设计具有成本低、实用性强、温度控制精度高的特点。
1智能热水器控制系统的总体设计方案
本设计所提到的智能热水器控制系统主要是实现对温度的自动控制、定时加热控制和智能报警的功能,因此,智能热水器控制系统主要分为控制模块、显示模块、信息输入模块、加热模块、声光报警模块等几部分构成。
1.1方案的分析与选择
对于主控芯片,本方案选择最简单的8位51系列的单片机,性能可靠,成本低,完全可以满足本系统的要求。
而且由于51系列的单片机在电子相关专业中的基础性地位,对其使用和编程都比较熟练,可以极大缩短开发周期,更好地完成设计任务。
对于显示模块,LED液晶显示屏、LCD1602字符型液晶、LCD12864点阵型液晶三者都是简单的、小型的显示器件,均可完成显示任务。
LED液晶显示的内容过于简单,LCD1284更适合显示图像类信息,而LCD1602非常适合显示少量的、丰富的字符信息。
因此,选择LCD1602字符型液晶。
对于输入模块,分为用户信息输入和传感器信息输入。
用户信息输入方面,使用按键进行输入要比旋钮更容易控制,用户也更易于接受,通过设置相应的调节按键,可以十分精确地定位到用户所希望达到的温度。
当然,按键也有机械按键、电容按键等许多不同的种类,因为本系统处于实验调试阶段,故选取最简单的机械按键。
传感器信息输入分为两个部分,第一部分是温度信息输入,使用温度传感器,用于告诉单片机当前的水温,实现温度的自动控制;
第二部分是水位信息输入,使用水位传感器,用来告诉单片机水量信息,达到缺水报警的目的。
温度传感器一般有热敏电阻和数字式温度传感器DS18B20可供选择。
热敏电阻的可靠性差,且输出的是模拟量,需要进行相应的A/D转换后才能输入,比较麻烦,而相比之下,数字式温度传感器测温范围宽、以单线串行方式与单片机进行通信,节约了单片机的I/O口资源,且直接输出数字量,外围电路简单,因此最符合要求。
水位信息输入只需考虑是否是缺水状态,因此只要对是否缺水给出一个电平信息即可,直接封装一个断触电点,一端接地,当有水时,单片机对应端口被拉低,无水时端口电平被拉高,来完成是否缺水的判断即可。
同时,为了实现精确的定时加热功能,引入专门的时钟芯片DS1302进行计时,为单片机提供日期和时间基准。
为了保证使用者的安全,加入声光报警提示模块,在加热、缺水时给出提示。
1.2系统总体设计概述
本系统采用51系列单片机为控制核心,以DS18B20单线数字式温度传感器获取温度信息,采用DS1302时钟芯片为单片机提供日期基准,显示方面采用LCD1602液晶显示屏,以机械按键的形式供用户输入,设置当前的系统时间、定时加热的开始时间、水温设定等,来完成整个控制器的控制工作。
系统整体的结构框图如下图1.1所示。
5V电源模块
1602显示
单片机及其最小系统及电源接口
温度传感器模块
水位传感器模块
声光报警模块
按键输入
时钟电路
图1.1系统整体框图
1.3各功能模块介绍
要顺利完成整个系统的设计工作,就要对所采用的各个模块的元器件进行具体的选型,并通过元器件的数据手册、操作说明的资料,详细地了解各个元器件的性能、操作方法、硬件连接要求的内容。
1.3.1控制模块
本设计采用的主控芯是51系列的单片机处理器STC89C52RC,这是一款采用了CMOS工艺进行生产的8位处理器,该处理器具有相当可靠的工作性能,正常工作的功耗极低,而且有着相当丰富的系统资源,片内的程序存储空间达到了4K、具有512字节的RAM空间,可以满足大多数的程序要求。
指令系统完全兼容传统的8051单片机内核,有2K+的EEPROM存储空间。
要建立完整的控制模块,还要为单片机配置其最小系统的外围电路,主要包括晶振和复位电路,单片机才能正常的工作。
1.3.2显示模块
本设计所采用的LCD1602液晶显示屏,是一种小型的、集成度很高的液晶显示屏,可以显示字母、数字、符号等,其特点是功耗低、体积小、轻薄、模块化,而且由于其自带字符库,在显示方面的实现上只需要按照要求对其进行初始化、设定相关的显示位置和显示内容即可,操作简单。
作为一个集成化的显示模块,其相应的管脚的具体定义可以查阅操作手册获取,而与单片机的具体连接方式将在硬件设计部分详细介绍。
如下图1.2所示为LCD1602的控制器接口的时序说明,在液晶的初始化、读写操作的相关的编程中,要参考该时序图,结合单片机晶振的选取情况作出必要调整,只有正确的时序才能保证单片机给出正确的控制指令。
图1.2字符型液晶LCD1602的读写操作时序图
LCD1602自带字符库,这就在很大程度上方便了用户的开发,同时也节省了单片机的程序存储空间,不需要在程序中对字符的显示进行定义。
如下图1.3所示。
图1.3字符型液晶LCD1602的字符库
1.3.3输入模块
对于单片机而言,要对其进行一定是设置,就必须要有用户进行相关的指令输入,单片机要对热水器的热水温度状态和是否缺水进行感知,要有相关的传感器进行信号输入。
输入模块分别为用户指令输入、温度数据输入和是否缺水的信号输入。
指令输入由4个独立按键完成,温度输入由DS18B20来完成,是否缺水的信号由电子式水位开关提供。
指令输入模块采用4个独立按键完成。
独立按键的触发方式为低电平有效,在平时的系统开启状态下,单片机相应端口保持高电平状态,当按键被按下,独立按键两端连通,然后接地,单片机的相应的连接端口的电平被地线拉低,从而能够被单片机捕捉到按键动作。
4个独立按键分别是设定键、键值增加、键值减小、确认这个4个功能定义,通过这4个按键,结合软件和算法编程,进行按键状态扫描,然后对相应的键值动作设定正确的响应逻辑,就能够为用户提供完整的参数设置功能。
温度输入模块主要采用的是一种数字式集成单线温度传感器,型号为DS18B20。
图1.4数字式单线温度传感器DS18B20封装及引脚图
在DS18B20的芯片手册中,阅读单线传输协议的时序要求,如下图1.5所示。
图1.5DS18B20的读写操作时序
水位信号输入选择电子式水位开关BZ2401,供电电压范围在5V-24V,有三根线,电源线、地线和信号线。
该产品通过内置芯片检测水位信号,由内部芯片处理,当判断到有水时,芯片输出与电源电压相同的高电平,当判断到无水时,芯片输出0V,产品正常供电后,与单片机通过数据线和地线连接。
1.3.4其它模块
为了实现准确的定时功能,本系统采用了专门的时钟芯片DS1302,来提供详细的日期和时间基准。
同时,设置3个LED灯和蜂鸣器,组成其声光提示和报警模块。
DS1302是一款涓流充电时钟保持芯片,由DALLAS公司出品,可以通过简单的串口同单片机进行通信,芯片内部有自己的独立时钟电路和一个31字节的静态RAM,能够向单片机提供详细的时钟信息,如日期年月日,时间时分秒等,对于每月的天数和闰年能够自动进行处理,保证日期记录的准确性。
在硬件连接上,其使用三个数据线同单片机的相应端口进行连接,分别为复位、数据和串行时钟。
其芯片正常工作的功率极低,在日期时间数据的保持和记录时消耗的功率不足1mW。
其封装形式和管脚定义如下图1.6所示。
图1.6DS1302的封装和管脚定义
在使用时,该芯片要外接32.768KHz的晶振,需要简单的外围电路。
如下图1.7所示为其一种典型的应用电路。
图1.7一种典型的DS1302应用电路图
声光报警模块所采用的LED灯和小型的蜂鸣器就比较常见,电路特性也很容易掌握,在LED灯的使用时,要注意选择合适的颜色,同时要根据最大电流限制,加上合适的限流电阻,从而保护LED灯工作在正常的电压电流条件下。
蜂鸣器的驱动无法靠单片机的端口直接完成,要使用相应型号的三极管进行放大,如9012、8550等型号,通过三极管驱动蜂鸣器,才能正常发声。
1.4本章小结
本章对系统的总体方案进行了设计,同时详细确定了系统所应该具有的功能模块,对控制模块、显示模块、输入模块等模块的主要实现方案和元器件的选择方案进行了分析与比较,从而确定了系统所需要使用的各个元器件。
同时,根据元器件的资料和数据手册,对主要元器件的硬件连接、使用和操作方法进行了重点研究,为硬件电路的搭建和软件编程提供了基础。
2硬件电路的设计与实现
2.1单片机最小系统硬件电路设计
单片机最小系统包括晶振、复位电路等。
单片机内部已经具有时钟震荡电路,因此,我们搭建单片机最小系统,只需要在其XTAL1和XTAL2两个引脚之间加入反馈电路,就可以让单片机得到时钟信号。
一般的反馈电路就是石英晶体振荡器和两个30uf的旁路电容,电容值的大小是根据其晶振频率高低进行调整的。
在单片机的最小系统的电路中,石英晶体振荡器的频率越高,单片机内部时钟信号的周期就越短,单片机的指令执行速度就越快。
本设计中在单片机时钟频率的设置方面采用12MHz,同时对单片机的复位引脚设置相应的复位按键,以供用户在必要的时候对单片机进行重启操作。
对于本系统的各个传感器接口,也要进行引出,以供各个传感器、电源、数据线接口使用。
最小系统可以在万用板上手工搭建,也可以直接使用PCB板上焊接好的成品模块,其硬件原理图如下图2.1所示。
图2.1单片机最小系统及其接口电路设计
2.2显示模块硬件电路设计
本设计选用字符型液晶LCD1602为显示器件,将LCD1602的数据引脚都接入单片机的P0端口,即P0.0~P0.7分别对应地和1602显示屏的8根数据线DB0~DB7相连接。
如图2.2所示,特殊功能端RS、RW、E通过网络标号,分别接P1.0,P1.1和P1.2。
模块的VEE端可以调节显示模块显示字符的亮度和对比度,在实际电路中采用10K欧姆蓝白卧式可调电阻102,通过拧动,可以改变显示字符的效果。
图2.2显示模块及其接口电路设计
2.3温度传感器DS18B20电路设计
DS18B20温度传感器与单片机的连接比较简单,直接将其数据线连接到单片机的P2.1端口上,即网络标号DQ,电源和地线也连接到单片机主板上,同时数据线用电源电压通过4.7K的电阻上拉。
图2.3温度传感器及其接口电路设计
2.4电子式水位开关硬件电路设计
缺水判断由电子式水位开关完成,有水时输出高电平,无水时输出低电平。
高电平等于电源电压,因此其供电选择为5V,数据线和地线接入单片机主板,如下图2.4所示,网络标号WATER对应单片机的P2.2端口。
图2.4电子式水位开关接口电路设计
2.5时钟芯片电路设计
时钟芯片DS1302的RST、SCLK和I/O三个端口与单片机相连,进行数据交换,如下图2.5所示,网络标号分别为RST、SCK和IO,分别与单片机的P3.7、P3.5和P3.6相连,实现与单片机的通信。
通过参考DS1302时钟芯片的经典电路设计方案,设计本系统所需要电路结构。
DS1302具有涓流充电功能,可以设置双电源,其中VCC1为备用电源,在电路中另外引出,接一块型号为CR2302的纽扣电池。
VCC2在主板上直接取电。
在X1和X2两个引脚之间接入32.768KHz的晶振,为芯片提供基本时钟信号。
图2.5时钟芯片电路设计
2.6声光报警电路设计
报警电路分为灯光报警和声音报警,用于对系统的各种需要报警的状态进行响应,并通过声音和灯光对用户进行提示。
如下图2.6所示为声音报警模块电路设计,蜂鸣器使用与单片机相同的+5V电源,使用三极管9013进行控制,集电极接单片机端口,网络标号为BEEP对应单片机的P2.0端口。
图2.6蜂鸣器电路设计
灯光报警和提示选用高亮度高寿命的LED灯,共阳极接法,单片机给出低电平点亮。
设置3个LED灯,串接510欧姆电阻,D1用于指示加热状态;
D2用来指示水位状态;
D3用来指示温度过热状态。
这三个灯分别接单片机的端口P2.5、P2.4和P2.3来完成相关的功能。
图2.7指示灯电路设计
2.7按键设置模块电路设计
本系统的时钟设置、温度设置都需要通过按键来完成,采用4个独立按键的设计,一端接地,按下后将单片机的端口电平拉低,由单片机完成按键动作的捕捉。
功能定义为设置键、确定键、值增加键和值减小键,网络标号分别为SELT、ENTER、UP和DOWN,对应接单片机的P1.3、P1.4、P1.5和P1.6四个端口。
图2.8按键模块电路设计
2.8电源和开关模块设计
本系统的外接+5V电源工作,为了控制方便,加入电源总开关,同时使用一个LED灯指示电源状态。
在电源与地线之间并联两个滤波电容,滤除电源纹波。
图2.9电源模块电路设计
2.9本章小结
本章主要在PROTEL99SE的软件环境下完成了电路硬件原理图的设计,通过对主要元器件电气特性的研究,合理、规范、安全地构建了系统功能实现的硬件平台。
3热水器控制系统的软件设计与算法实现
软件设计是整个系统的灵魂,优秀、可靠的软件设计能够充分发挥硬件的资源,并能够出色完成系统的预期功能。
软件系统主要的设计思路如下:
1、在系统打开后,显示当前的系统时间信息和水温信息,如果水温低于设定值则开始加热;
如果水温高于设定值或状态为缺水就进行声光报警。
2、响应按键操作。
当用户按下设置键时,进入功能选择菜单,功能选择菜单有三个,第一个是设置时间,第二个是设置定时加热开始的时间和结束的时间,第三个是设置温度范围的上限和下限。
在软件程序的设计中,充分体现了模块化的设计思想,整个软件系统主要包括了整体初始化函数、LCD1602基础函数、DS18B20基础函数、DS1302基础函数、按键扫描设置策略基础函数几个大的部分,然后在主程序中进行相关模块的函数调用,如传感器状态读取、温度智能判断、报警处理策略、键盘扫描等,完成系统所预期的操作功能。
3.1软件总体流程图
开始
LCD显示屏、1302时钟芯片、定时器、独立按键、温度传感器、各种端口初始化
正常模式?
调用时间显示函数
0.5s时间到?
调用温度读取函数
温度显示函数
调用报警模块函数
调用按键扫描函数
N
Y
图3.1软件系统总体流程图
3.2显示模块程序设计
显示模块程序主要包括初始化、写命令子函数、写数据子函数都是其重要的基础功能函数,因此都要在软件系统程序设计的底层库中进行包含。
LCD设置参数及端口定义
sbitrs=P1^0;
//LCD1602
sbitrw=P1^1;
//LCD1602
sbite=P1^2;
3.2.1写命令子函数
1602的操作需要对其进行命令输入,它有自己的指令库。
而对于这些命令的写入,需要编写特定的写命令子函数。
voidwrite_com(ucharcom)//写指令函数
{
rw=0;
delay1(5);
rs=0;
e=1;
P0=com;
e=0;
}
其中delay1为编写的延时函数,如下所示:
voiddelay1(uintz)//延时函数
uintx,y;
for(x=z;
x>
0;
x--)
for(y=10;
y>
y--);
3.2.2写数据子函数
对命令进行写入之后,紧接着就要进行所要显示的字符数据的输入,通过写数据子函数来完成。
voidwrite_dat(uchardat)
rs=1;
//选择写数据
P0=dat;
delay(5);
//无延时不能正常工作
根据以上两个基本函数,来编写1602的初始化函数、显示字符串函数、显示两位十进制数字函数,完成在时间设定、温度设定的过程中进行的各种显示,如以下为时间显示部分的程序代码。
voidTime_Display(void)
read_rtc();
Date_dispaly(0x80+0x40+12,time_data[6]);
//显示秒
Date_dispaly(0x80+0x40+9,time_data[5]);
//显示分
Date_dispaly(0x80+0x40+6,time_data[4]);
//显示时
Date_dispaly(0x80+14,time_data[3]);
//显示日
Date_dispaly(0x80+11,time_data[2]);
//显示月
Week_dispaly(0x80+0x40+15,time_data[1]);
//显示周
Date_dispaly(0x80+8,time_data[0]);
//显示年//Year/10*16+Year%10
Hour=time_data[4]/16*10+time_data[4]%16;
;
Minute=time_data[5]/16*10+time_data[5]%16;
Second=time_data[6]/16*10+time_data[6]%16;
除此之外,还要编写在进行时间设定过程中和在温度设定过程中要显示的内容,结合用户的输入,设置合适的光标显示处理。
3.3温度传感器模块程序设计
温度传感器的端口定义在P2.1端口。
sbitDQ=P2^1;
在温度传感器的基础函数设计里边,主要是进行温度获取和处理,读取温度的函数包括读整数部分和读小数部分,通过对DS18B20的数据格式进行解析,编写合适的读取温度子函数。
主要基础函数设计包括模块初始化函数、单线串行传输协议延时函数、总线协议配置、字节数据发送、字节数据接收