目录
摘要 3
ABSTRACT 4
第一章 概述 5
1.1 设计背景 5
1.2 设计任务 7
第二章 太阳能热水器及控制系统简介 8
2.1 热水器及系统工作原理 8
2.2 控制系统设计原则 9
2.3 主控方案 9
2.4 温度检测方案 9
2.5 水位检测方案 10
2.6 显示方案 10
2.7 时钟方案 11
第三章 控制系统硬件设计 12
3.1 总体设计 12
3.2 主控模块 14
3.2.1 单片机接口配置 14
3.2.2 复位电路 14
3.2.3 时钟电路 15
3.3 温度测量模块 15
3.3.1 DS18B20简介 15
3.3.2 温度测量电路接线图 16
3.4 水位检测模块 18
3.5 显示模块 19
3.5.1 LCD1602电气接线图 19
3.5.2 LCD1602技术参数及接口说明 19
3.6 实时时钟 20
3.6.1 DS1302简介 20
3.6.2 时钟电路电气原理图 20
3.7 驱动模块 21
3.6.1 上水电磁阀驱动电路 21
3.6.2 自动加热驱动电路 21
3.8 按键模块 23
3.8.1 按键模块简介 23
3.8.2 按键抖动处理 23
第四章 控制系统软件设计 25
4.1 实时时钟软件设计 25
4.1.1 DS1302时钟地址及数据格式 25
4.1.3 DS1302软件流程 26
4.1.4 时间读取子程序 26
4.1.5 时间设置子程序 27
4.1.6 日期BCD转字符程序 27
4.1.7 时间BCD转字符程序 27
4.2 水温检测软件设计 29
4.2.1 传感器操作指令 29
·4.2.2 DS18B20软件流程 30
4.2.3 获取温度子程序 30
4.3 显示模块软件设计 32
4.3.1 LCD1602指令及说明 32
4.3.2 LCD1602RAM地址映射 32
4.3.3 初始化过程 32
4.3.4 显示子程序 33
4.4 水位检测软件设计 34
4.5 按键模块软件设计 35
4.5.1 读取键值子程序 35
4.5.2 键值处理子程序 35
第五章 控制系统调试与仿真 38
5.1 总体仿真结果展示 38
5.2 自动加热仿真 39
5.3 水位检测及上水仿真 41
第六章 总结与展望 43
参考文献 44
1.2 设计任务
本课题旨在设计一个小成本、低功耗、多用途的太阳能热水器控制系统。热水系统采用单片机芯片作为微型控制器,该系统是设计目标有:
1)通过传感器,将水位水温采样信号传送给单片机进行处理,并进行水位及温度的显示;
2)当水位到达低限,系统自动上水,高限停止上水;
3)可调预置水温设计,用户可以自主设置温度保持范围,以应对不同地区不同季节;
4)可以设定时段监控温度,如果在时段内,温度过低系统将循环加热;
5)允许自动/手动进行上水、加热设置。
在设计系统的过程中,同时学习了单片机的开发与程序编制以及电路的设计与仿真等操作。本科阶段的知识得到了进一步提高,另外有自学了Proteus和Keil等软件的使用。在下文,提供了不同满足设计要求的方案,最终选择最优设计。
第二章 太阳能热水器及控制系统简介
2.1 热水器及系统工作原理
目前市场上太阳能热水器的主要分类有:玻璃真空管热水器、平板型热水器、陶瓷中空平板型热水器以及热管式热水器等。而在国内,太阳能热水器市场份额的90%是全玻璃真空管太阳能[2],因此本设计采用真空管太阳能热水器作为控制对象。太阳能热水器基本构造如图所示,包括有:水箱、集热管、进出水接口、排气孔、安装架等组件。阳光照射在真空式的集热管上,集热管吸收热量,管内冷水被加热成热水。由于热水比重低于冷水,热水上浮冷水下沉进行冷热交替加热,最终热水被收集到储水箱内,以上是太阳能热水器的基本原理。
图2.1 太阳能原理图
在光照良好的情况下,上述过程比较顺利。如果遇到连续阴雨天气,则不能收集热水,因此需要加热电辅加热功能。当单片机采集到温度低于设定值,并且在预设时间段内,将开启加热,保持水温在程序设置的范围内。水位监测模块安装在水箱中,监测水位的变化并发出水位报警信息。当水位低于设定位置,单片机发出指令停止加热同时开始上水;水位被监测到达高水位时,停止上水。实时时钟为系统提供时间信息,既可以显示日期时间等信息,又能让用户自主设置水温保持时间段。在该时间段内开启辅助加热功能,其他时间只显示温度而不加热以节约能源。系统还提供有手动按钮,允许用户自主控制上水电磁阀、加热器等器件。在手动模式下系统依然监控水位水温信息,防止发生上水溢出、干烧等事故。
2.2 控制系统设计原则
本控制系统将单片机及外围电路与太阳能热水器结合起来。运用温度、水位监测技术,将水温、水位信息进行处理、控制。该系统设计遵循的原则如下:
1)可靠性。本太阳能热水器控制系统是基于单片机的系统,在设计单片机的硬件与软件方案时,要考虑到各种因素了来保证系统的高可靠性。例如在测量温度时,如何保持温度数据地准确传输;如何保证单片机工作不被电磁干扰等等。因此系统需要综合考虑,保证采集、传输以及处理过程中的可靠性,才能使得系统能够应对各种复杂的环境与使用习惯。
2)准确性。本系统使用的测量电路较为先进,能够精确地反映被测量的变化。
3)经济性。本设计针对的是广大民用客户,所以在选用电路器件时要考察其性价比如何,尽可能控制成本以提高竞争力。
4)人性化。由于本系统要面向广大客户,所以在进行软硬件设计时,要充分考虑诸多因素。
#include <reg51.h>
#include <intrins.h>#include <lcd1602.h>
#include <ds1302.h>
#include <ds18b20.h>
#include <depth.h>sbit heater = P2^3;unsigned char x;
/************更新***************/
void updatatime()
{ systemtime datetime;lcdwrite(command,clear_screen);dsgettime(&datetime); //获取时间lcdoutput(0,0,"DATE:"); //日期datezstr(&datetime,datestring);lcdoutput(5,0,"20");lcdoutput(7,0,datestring);lcdoutput(0,1,"TIME:");for(x=8;x>0;x--) //循环显示时间{ converttemp();dsgettime(&datetime);timezstr(&datetime,timestring);lcdoutput(5,1,timestring);delay_ms(300);}}
void updatatemp()
{lcdwrite(command,clear_screen);
lcdoutput(0,0,"SWEN:"); //水温
lcdoutput(0,1,"SWEI:"); //水位for(x=8;x>0;x--) //循环显示时间{ converttemp();lcdoutput(5,0,tempstr);
depthprocess();delay_ms(300);}
}/************主函数***************/
void main()
{ unsigned char integer,symbol,decimal;ds1302init();lcdini();while(1){dsgettemp(&integer,&decimal,&symbol); //获取温度if(integer<40) //自动加热{heater=0;}else if(integer>55){heater=1;}//关键显示部分updatatime();updatatemp();} }