电热水壶温控系统设计.docx
《电热水壶温控系统设计.docx》由会员分享,可在线阅读,更多相关《电热水壶温控系统设计.docx(35页珍藏版)》请在冰豆网上搜索。
电热水壶温控系统设计
学生课程设计报告册
学年学期:
2017-2018学年☐春☑秋学期
课程名称:
学生学院:
专业班级:
学生学号:
学生:
学生成绩:
指导教师:
耿道渠
邮电大学教务处制
一、课程设计任务及要求
设计题目
多功能电热开水炉温控系统设计
设计任务:
设计一个多功能电热开水炉温控系统,能够实现热水炉各功能区的温度控制及显示。
开水炉分温水区和开水区两部分,其中温水区控温温度可调整。
要求基于51单片机设计硬件电路,具有键盘输入、实时时钟、液晶显示、温度采集等功能单元。
通过键盘可以实现控温温度设定、时间设定等功能;实时时钟单元用于当前时间信息的获取;液晶显示单元用于时间、当前水温等信息;开水炉加热及进水阀门控制均通过点亮LED灯来模拟。
设计要求:
1.确定总体设计方案:
能够结合相关行业规或标准优化方案设计,并对方案的可行性进行分析;对所设计系统的经济性进行评价;
2.详细设计:
给出行车管理系统的整体设计框图;进行硬件电路设计、焊接与调试;进行软件设计与调试;
3.软硬件系统联调,并进行功能性测试验证;
4.完成设计报告。
课程对培养目标的支撑:
1.能够利用数理、机电及检测原理和方法,构建检测模块间的关系或函数模型。
2.具备测控专业所需的设计/开发能力,能够对传感器、仪器仪表、信息采集、显示等设计方案进行分析与评价。
3.能够通过单元集成和优化,针对传感器、仪器仪表、信息采集、显示等部件进行有效设计,并完成系统的集成和搭建。
4.培养良好的团队协作沟通能力,正确理解个人在项目设计中的作用,通过查询搜索科技文献、整理设计资料、分析设计结果等方式有效述个人设计任务和成果。
5.能够理解测量工程项目中涉及的规、经济、管理、安全等因素,理解并运用工程管理、决策及评价方法。
指导教师(签字)
二、人员及分工
学号
班级
设计分工
联系
部分硬件电路设计与实物调试
硬件电路设计
软件程序设计
软件程序设计
8
部分硬件电路设计与资料收集
三、课程设计说明书
摘要.........................................................................................................6
1设计说明.............................................................................................7
1.1设计概述.....................................................................................7
1.2原理分析.....................................................................................7
1.3方案论证及可行性分析(含经济成本分析等).....................7
1.4总体设计.....................................................................................8
1.5软硬件设计.................................................................................8
1.5.1硬件设计............................................................................8
1.5.2软件设计...........................................................................13
1.6测试结果与分析........................................................................17
2设计总结.............................................................................................17
致.........................................................................................................18
参考文献.................................................................................................19
附件A设计图纸...................................................................................20
附件B设计程序...................................................................................23
摘要
该设计是一个简单的模拟多功能电热开水炉温控系统,该设计主要使用的原件有DS18B20温度传感器,AT89C52单片机,四位共阴极数码管两个,液晶显示器一个,电容电感电阻发光二极管若干,该多功能电热开水炉温控系统的设计共分为五部分,主控制器,LED和液晶显示部分,传感器部分,复位部分,按键设置部分,时钟电路。
主控制器即单片机部分,用于存储程序和控制电路;LED显示部分是指四位共阴极数码管,用来显示设定时间及实时时钟,液晶显示单元显示当前水温;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路,按键部分用来设置上下限温度。
测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示,开水炉加热及进水阀门控制均通过点亮LED灯来模拟。
关键词:
多功能电热开水炉温控系统,控制,测量
1设计说明
该设计采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求,单片机接收到传感器信号后将当前温度显示在液晶显示器上输出,数码管显示当前时间,通过键盘输入设置温度的上限和下限,加热温度传感器一定时间后,当温度低于下限时,LED1闪烁用以模拟开水炉加热,升高当前水温,当温度高于上限时,LED2闪烁,模拟进水阀门打开,水温降低,以此来实现温度控制。
1.1设计概述
该设计采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求,单片机接收到传感器信号后将当前温度显示在液晶显示器上输出,数码管显示当前时间,通过键盘输入设置温度的上限和下限,加热温度传感器一定时间后,当温度低于下限时,LED1闪烁用以模拟开水炉加热,升高当前水温,当温度高于上限时,LED2闪烁,模拟进水阀门打开,水温降低,以此来实现温度控制。
1.2原理分析
温度传感器DS18B20周围温度变化会影响其电学特性改变,引起电位变化,产生电信号,单片机接收到电信号并通过简单的编程将该信号转换成温度并显示在液晶显示器上面,温度达到通过按钮设置的温度上限或下限时,相应LED等闪烁,蜂鸣器报警,单片机相应引脚输出高电平,启动开水炉加热或者进水阀门系统。
1.3方案论证及可行性分析(含经济成本分析等)
经过实物测试,该设计能够对温度起到稳定测量和控制作用,但实物测量的精度有待提高,该设计使用的温度传感器DS18B20体积小,硬件开销低,经济实惠,且温度在10度至80度围的测量精度较高,可满足设计要求,该设计使用51单片机开发板一块,经济开销较低。
1.4总体设计
按照系统设计功能的要求,确定多功能电热开水炉温控系统由4个模块组成:
主控制器、测温电路、按钮电路和显示电路,其中测温电路由温度传感器和电阻等元件构成,用以温度的测量,按钮电路用以控制温度的上下限,显示器电路显示温度以及温度上限和下限,主控制器负责信号的处理以及反馈。
1.5软硬件设计
1.5.1硬件设计
按照系统设计功能的要求,确定系统由3个模块组成:
主控制器、测温电路和显示电路。
总体电路设计:
复位与晶振电路模块
目前单片机广泛应用在机电、医疗、仪器仪表、工业自动化等多个方面。
目前市场上比较流行的单片机是Intel公司的MCS51系列和MCS96系列单片机、Motorola公司的M6800系列单片机。
无论使用何种单片机,复位电路的都是非常重要的,单片机复位电路的可靠性直接决定了整个单片机系统的可靠性[3]。
本设计中单片机系统的复位电路在这里使用的是上电+按钮的复位电路模式,其中电阻R采用的是4.7KΩ的阻值,电容采用电容值为10uF的电解电容,按下复位按钮电路重启,电路回复初始设置。
电路图如下:
温度传感器模块
温度传感器是最早开发,应用最广泛的一类传感器。
温度传感器是利用物质各种物理性质随温度变化的规律把温度转换为电量的传感器。
这些呈现规律性变化的物理性质主要有半导体。
温度传感器是温度测量仪表的核心部分,品种繁多[2]。
本设计中使用的DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
电路图如下:
按钮模块
按键是用来设置温度的上下限。
P30、P31是用来调节温度下限的按钮,当按一P30,温度下限执行加一操作,按下P31下限减一,P32、P33用以调节温度上限按钮,按下P32按钮,温度上限加一,按下P33按钮,温度下限减一,温度上限与下限均显示在数码管上面,进行温度控制。
电路图如下:
液晶显示器模块
液晶显示器,特别是TFT-LCD,是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上全面赶上和超过CRT的显示器件,它的性能优良、大规模生产特性好,自动化程度高,原材料成本低廉,发展空间广阔,将迅速成为新世纪的主流产品,是21世纪全球经济增长的一个亮点[1]。
本设计中用于显示温度值与实时时钟功能
电路图如下:
数码管模块
用于显示温度上下限
数码管与锁存器电路图如下:
LED模块
LED显示色彩丰富,3基色的发光管的可以显示全彩色,显示显示方式变化多样(文字、图形、动画、视频、电视画面等)、亮度高,是集光电子技术、微电子技术、计算机技术、信息处理技术于一体的高技术产品,可用来显示文字、计算机屏幕同步的图形。
其次,LED显示的象素采用LED发光二极管,将多个发光二极管以序列的形式构成LED显示阵列,这种显示具有耗电省、成本低、亮度清晰度高、寿命长等优点,而且LED显示以其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,是信息传播设施划时代的产品。
再次,LED显示应用广泛,金融证券、银行利率、商业广告、文化娱乐等方面,显示效果清晰稳定,越来越多的地方开始使用LED电子显示,有巨大的社会效益和经济效益。
它以其超大画面、超宽视觉、灵活多变的显示方式等独居一格的优势,是目前国际上使用广泛的显示系统[4]。
在本设计中用于温度超限报警:
1.5.2软件设计
系统总体软件流程图
系统总体软件流程图如图所示。
系统初始化之后进入while循环,然后依次进入按键
扫描函数、LCD界面显示函数、加热控制函数。
温度显示部分
温度部分程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1S进行一次。
其程序流程图见图
时钟子程序设计
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。
日历时钟DS1302的读写需要初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送是低位在先。
读写都是16位数据高8位是地址低8位是数据,在读写时要严格遵从其读写时序,否则读写将会失效。
当RST为低电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态[5]。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平,这一点我们要一定注意。
当RST置为高电平时,在串行时钟的SCLK的上升沿,DS1302从I/O端口读入一位数据,8个串行时钟脉冲就可以读入一字节的数据。
在串行时钟的下降沿,DS1302向I/O端口输出一位数据,8个串行时钟脉冲就可以输出一字节的数据。
显示子程序设计电子产品是否实用其中显示占了很重要的地位,很多数人都渴求用视觉效果好,围广,直观明了,LED符合以上的要求,但相应的硬件设计相对复杂。
1.6测试结果与分析
经过多组数据的测试,在对测得数据进行误差分析,我们发现DS18B20温度传感器的精度不稳定,在相同外界温度下液晶显示器显示的温度有1度左右的差异,其误差在20度至80度时比较稳定,且绝对误差较小,查阅资料后得知该传感器测量温度为-55度至125度,而在10度至80度的围其精度可达到正负0.5度,在其他温度下运行的精度为正负2度,故该设计最佳工作温度为10度至80度。
2设计总结
本次的课程设计我主要设计的是仿真电路的设计,在设计过程中当然也遇到了一些困难,首先我会尝试着靠自己去解决,但当我意识到靠我一个人解决不了的时候,我会和小组其他成员一起探讨解决,更如果限于知识和眼界的问题还是解决不了的问题,我们就会向学长询问。
具体的比如关于温度传感器的一部分知识,由于我并没有很牢靠的掌握,所以在设计的时候不知道具体怎样与我的89C51相结合。
但在上网查找其相关的知识后和结合前人的经验后,正确的连接。
在这样的过程中,我意识到每一次的课程设计或是其它的实验,永远都是一个提出问题,然后解决问题的过程.我想这也会对我再以后再碰到相似的经历有很大的帮助的。
致
感耿道渠老师给我们小组的指导,还有高嘉同学和我们的交流沟通,在电路设计和C语言程序给了我们小组极大的帮助与启迪,感我们小组成员这近一个月以来的同心协力,旰衣宵食,相互的交流与合作,才能成功的设计完成我们的课程设计,感为课程设计贡献了自己时间与心血的每一位组员,同时也感文献作者给我们留下了宝贵的知识财富供我们学校参考。
参考文献
[1]现乐.LED显示模块论文.2015.
[2]永盛.液晶显示器奥秘.2012.
[3]昕.单片机测温系统.2007.
[4]泽宇.单片机复位电路设计与研究.2016.
[5]施昆松.多个数字温度传感器DS1820地址的自动搜寻[J]国外电子元器件.1997.(01)
[6]海宴.51单片机原理及应用[M].:
航空航天大学.2010.
[7]王东峰等.单片机C语言应用100例[M].:
电子工业.2009.
[8]佳文,志成,佳红.一种单片机多机通信系统的设计[J].微计算机信.2013.24
(2)
[9]于还业.温室环境自动监测系统[J].农业工程学报.2014.13
附件A设计图纸
附件B程序
#include"ds1302.h"
ucharcodeREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
ucharcodeWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
charTIME[7]={0x50,0x59,0x11,0x07,0x01,0x07,0x18};
voidDs1302Write(ucharaddr,uchardat)
{
ucharn;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
_nop_();
for(n=0;n<8;n++)
{
DSIO=addr&0x01;
addr>>=1;
SCLK=1;
_nop_();
SCLK=0;
_nop_();
}
for(n=0;n<8;n++)
{
DSIO=dat&0x01;
dat>>=1;
SCLK=1;
_nop_();
SCLK=0;
_nop_();
}
RST=0;
_nop_();
}
ucharDs1302Read(ucharaddr)
{
ucharn,dat,dat1;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
_nop_();
for(n=0;n<8;n++)
{
DSIO=addr&0x01;
addr>>=1;
SCLK=1;
_nop_();
SCLK=0;
_nop_();
}
_nop_();
for(n=0;n<8;n++)
{
dat1=DSIO;
dat=(dat>>1)|(dat1<<7);
SCLK=1;
_nop_();
SCLK=0;
_nop_();
}
RST=0;
_nop_();
SCLK=1;
_nop_();
DSIO=0;
_nop_();
DSIO=1;
_nop_();
returndat;
}
voidDs1302Init()
{
ucharn;
Ds1302Write(0x8E,0X00);
for(n=0;n<7;n++
{
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80);
}
voidDs1302ReadTime()
{
ucharn;
for(n=0;n<7;n++)
{
TIME[n]=Ds1302Read(READ_RTC_ADDR[n]);
}
}
#include"lcd.h"
voidLcd1602_Delay1ms(uintc)
{
uchara,b;
for(;c>0;c--)
{
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
#ifndefLCD1602_4PINS
voidLcdWriteCom(uchar)
{
LCD1602_E=0;
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DATAPINS=;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#else
voidLcdWriteCom(uchar)
{
LCD1602_E=0;
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DATAPINS=;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
Lcd1602_Delay1ms
(1);
LCD1602_DATAPINS=<<4;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#endif
#ifndefLCD1602_4PINS
voidLcdWriteData(uchardat)
{
LCD1602_E=0;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DATAPINS=dat;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#else
voidLcdWriteData(uchardat)
{
LCD1602_E=0;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DATAPINS=dat;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
LCD1602_DATAPINS=dat<<4;
Lcd1602_Delay1ms
(1);
LCD1602_E=1;
Lcd1602_Delay1ms(5);
LCD1602_E=0;
}
#endif
#ifndefLCD1602_4PINS
voidLcdInit()
{
LcdWriteCom(0x38);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
#else
voidLcdInit()
{
LcdWriteCom(0x32);
LcdWriteCom(0x28);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
#endif
#include"temp.h"
voidDelay1ms(unsignedinty)
{
unsignedintx;
for(y;y>0;y--)
for(x=110;x>0;x--);
}
unsignedcharDs18b20Init()
{
unsignedinti;
DSPORT=0;
i=70;
while(i--);
DSPORT=1;
i=0;
while(DSPORT)
{
i++;
if(i>5000)
return0