电热水器控制系统.docx
《电热水器控制系统.docx》由会员分享,可在线阅读,更多相关《电热水器控制系统.docx(19页珍藏版)》请在冰豆网上搜索。
电热水器控制系统
电子信息工程专业课程设计任务书
题目:
电热水器控制系统设计
设计内容
设计一个由8051MCU组成的电热水器控制系统。
能够测量当前水温并显示;可以设置烧水温度,当无水时要有报警功能。
通过这个过程熟悉温度传感器、键盘控制和七段数码管的使用,掌握51系列单片机控制和测试方法。
;用LED显示测量得到的水温值。
完成基本要求,可以适当发挥进行扩展设计。
1)数码管显示:
年月日时分秒;
2)键盘输入修改时间、日期设置;
设计步骤
一、总体方案设计
以51系列MCU构成核心模块,合理分配存储器资源和I/O资源。
温度采集模块建议采用DS18B20,或采用Pt100再经模数转换;显示模块用2位LED可满足需要;报警模块可采用声光等形式;输入模块可选用矩阵式键盘或键盘驱动芯片;可选用8255进行I/O扩展。
二、硬件选型工作
对于每一个芯片要有具体型号,对每个分立元件要给出其参数
三、硬件的设计和实现
1.选择计算机机型(采用51内核的单片机);
2.设计支持计算机工作的外围电路(EPROM、RAM、I/O端口、键盘、显示接口电路等);
3.接口电路;
4.其它相关电路的设计或方案(电源、通信等)
四、软件设计
1.分配系统资源,编写系统初始化和主程序模块;
2.编写相关子程序;
3.其它程序模块(显示与键盘等处理程序)。
五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)。
一、设计要求……………………………………………1
二、设计目的……………………………………………1
三、设计的具体实现…………………………………1
1.硬件设计………………………………………2
1.1.单片机的选择…………………………2
1.2.水位检测电路…………………………6
1.3.温度检测电路…………………………7
1.4.A/D转换器……………………………9
1.5.报警电路………………………………10
2.软件设计……………………………………11
2.1.温度测量子程序……………………12
2.2.判断子程序…………………………13
2.3重要代码………………………………
四、结论与展望………………………………………14
五、心得体会及建议………………………………14
六、附录………………………………………………14
七、参考文献…………………………………………14
电热水器控制系统设计报告
一、设计要求
设计一个由8051MCU组成的电热水器控制系统。
能够测量当前水温并显示;可以设置烧水温度,当无水时要有报警功能。
通过这个过程熟悉温度传感器、键盘控制和七段数码管的使用,掌握51系列单片机控制和测试方法。
设计以AT89C51单片机为核心,用LED显示测量得到的水温值。
完成基本要求,可以适当发挥进行扩展设计。
1)数码管显示:
年月日时分秒;
2)键盘输入修改时间、日期设置;
以51系列MCU构成核心模块,合理分配存储器资源和I/O资源。
温度采集模块建议采用DS18B20,或采用Pt100再经模数转换;显示模块用2位LED可满足需要;报警模块可采用声光等形式;输入模块可选用矩阵式键盘或键盘驱动芯片;可选用8255进行I/O扩展。
二、设计目的
运用我们所学的专业知识,采用单片机为主控芯片设计电热水器控制系统并辅以外围电路设计,既能加深我们对专业知识的理解,又能培养专业知识与实践相结合的实践技能,提高我们分析、解决问题的能力。
三、设计具体实现
电热水器控制系统的整体设计方案包括硬件设计方案和软件设计方案。
硬件是指以微控制器作为核心,由外接温度测量电路、键盘、复位、热水器加热开关、LED显示电路、报警电路组成。
根据功能需求说明,本着节约开发成本、增加系统可靠性、减小体积等原则进行电热水器控制系统的硬件设计。
本系统采用51系列单片机AT89C52作为整个系统的核心,利用AT89C52现有的接口组织外围硬件模块。
由于环境的特殊性,温度测量主要是由Pt00铂电阻温度传感器、温度传感器的信号调理电路和基于ADC0801的A/D转换电路组成;键盘由三个按键组成:
分别为开关和“+”、“-”;水位检测电路检测是否有水,避免干烧;LED显示电路主要用于显示温度;报警装置为单片机I/O口驱动蜂鸣器,达到报警的效果。
图1系统硬件图
1硬件设计
1.1单片机的选择
图2AT89C52芯片引脚图
AT89C52主要性能:
1、与MCS-51单片机产品兼容
2、8K字节在系统可编程Flash存储器
3、1000次擦写周期
4、全静态操作:
0Hz~33Hz
5、三级加密程序存储器
6、32个可编程I/O口线
7、三个16位定时器/计数器
8、八个中断源
9、全双工UART串行通道
10、低功耗空闲和掉电模式
l1、掉电后中断可唤醒
l2、看门狗定时器
13、双数据指针
l4、掉电标识符
功能特性描述:
AT89C52提供以下表中功能:
8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位。
VCC:
电源电压
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口,也即地址/数据总线复用口。
作为输出口,每位能吸收电流的方式驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.1分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
表1P1.0和P1.1口的第二功能
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89C52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
表2P3口的第二功能
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:
访问外部程序存储器控制信号。
为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:
振荡器反相放大器和内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
Flash编程―并行模式:
AT89C52带有用作编程的片上Flash存储器阵列。
编程接口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方Flash或EPROM编程器。
编程方法:
对AT89C52编程之前,需设置好地址、数据及控制信号,可采用下列步骤对AT89C52编程:
1.在地址线上输入编程单元地址信号
2.在数据线上输入正确的数据
3.激活相应的控制信号
4.把EA/Vpp升至12V
5.每给Flash写入一个字节或程序加密位时,都要给ALE/PROG一次脉冲。
每个字节写入周期是自身定时的,通常均为1.5ms。
重复1—5步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。
1.2.水位检测电路
在这里我采用排阻式水位传感器的方法,排阻式水位传感器的工作原理大致是分别用两个根铜针分别置于水箱内的底部位置。
若是无水,铜针不接触水面,其输出为高电平;若铜针与其对应水面接触时则输出为低电平,输出接至电子开关,接到AT89S52的P3.3引脚。
单片机对引脚进行判断后,判断是否有水,避免干烧。
水位传感器采用电压跟随器与电压比较电路相结合实现。
图3水位检测电路
1.3.温度检测电路
在温度检测电路采用WZP型Pt100温度传感器进行设计,温度的测量范围为0~+400℃之间,分辨率为2℃,温度显示设置为小数点后1位数据。
Pt100是模拟量输出的温度传感器,随温度变化的是电阻,所以需要通过模拟电路将电阻转变为电压,然后经放大电路处理后再送入A/D转换器。
Pt100热电阻是利用金属导体再温度变化时自身的电阻值也随着发生变化的特性来测量温度的。
热电阻的受热部分是用细金属丝均匀地双绕在绝缘材料制成的骨架上。
当被检测介质中有温度梯度存在时,所测得的温度是感温元件所在范围内介质层中的平均温度。
Pt100温度传感器为正温度系数热敏电阻传感器,主要技术参数如下:
1.测温范围:
-200℃~+850℃;
2.允许偏差值:
A级±(0.15+0.02|t|),B级±(0.30+0.05|t|);
3.最小置入深度:
热电阻的最小置入深度≥200mm;
4.允许通过的通电流≤5mA;
5.另外,Pt100温度传感器还具有抗震动、稳定性好、准确度高、耐高压等优点。
Pt100的线性好,在0~100℃之间变化时,最大非线性偏差小于0.5℃。
虽然Pt100的线性度比较好,但是可以从数据之间发现Pt100的电阻与测量的温度之间并不是完全的线性关系。
因此在实际使用Pt100时,往往需要通过查表法或线性插值算法来计算出测量的温度。
查表法是指在单片机的ROM存储区间中建立一个电阻和温度之间的分度表。
当测量温度时,通过软件先计算出Pt100的阻值,然后再去查询分度表获得该阻值所对应的温度值。
显而易见,在检测值的范围内对标定的点数设置的越多表格越大,占用的的ROM存储容量也就越大,但是对Pt100的描述也就越精确。
另一种计算温度的方法就是采用线性插值算法。
这种方法就是通过已知的Pt100分度表中的数据,将温度的变化曲线分为相应的几段。
然后,找一个最佳的函数关系式来表示各段曲线上Pt100的阻值与被测温度之间的函数关系式。
由于每个区间段都是用了一个函数解析式来进行描述,因此这种方法在程序设计时十分方便。
所以在此我们采用线性插值算法。
根据系统的温度测量范围先将曲线分为四段,每100℃分为一段。
每一段的温度与阻值之间的关系如下:
当0℃≤t≤100℃时,t=2.558*Rpt100-256.02
当100℃当200℃当300℃图4温度测量电路图
放大电路采用LM358集成运算放大器,为了防止单级放大倍数过高带来的非线性误差,放大电路采用两级放大,如图3.4所示,前一级约为10倍,后一级约为3倍。
温度在0~100度变化,当温度上升时,Pt100阻值变大,输入放大电路的差分信号变大,放大电路的输出电压Av对应升高。
1.4.A/D转换器
ADC0801是一个8位、单通道、低价格A/D转换器,主要特点是:
摸数转换时间大约100us;方便的TTL或CMOS标准接口;可以满足差分电压输入;具有参考电压输入端;内含时钟发生器;单电源工作时(0V~5V)输入信号电压范围是0V~5V;不需要调零等等。
CS:
片选信号。
低电平有效,高电平时芯片不工作。
RD:
外部读数据控制信号。
此信号低电平时ADC0804把转换完成的数据加载到DB口。
WR:
外部写数据控制信号。
此信号的上升沿可以启动ADC0804的A/D转换过程。
CLK IN:
时钟输入引脚。
ADC0804使用RC振荡器作为A/D时钟,CLK IN是振动 的输入端。
INTR:
转换结束输出信号。
ADC0804完成一次A/D转换后,此引脚输出一个低脉冲。
对单片机可以称为中断触发信号。
Vin(+):
输入信号电压的正极。
Vin(-):
输入信号电压的负极。
可以连接到电源地。
AGND:
模拟电源的地线。
Vref/2:
参考电源输入端。
参考电源取输入信号电压(最大值)的二分之一。
例如输入信号电压是0V~5V时,参考电源取2.;输入信号电压是0V~4V时,参考电源取2. 0V。
DGND:
数字电源的地线。
DB8~DB0:
数字信号输出口,连接单片机的数据总线。
CLK R:
时钟输入端。
VCC:
5V电源引脚。
补充说明:
CLKI和CLKR:
ADC0801~0805 片内有时钟电路,只要在外
部“CLKI”和“CLKR”两端外接一对电阻电容即可产生A/D 转换所要求的时钟,其振荡频率为fCLK≈1/1.1RC。
其典型应用参数为:
R=10KΩ,C=150PF,fCLK≈640KHz,转换速度为100μs。
若采用外部时钟,则外部fCLK 可从CLKI 端送入,此时不接R、C。
允许的时钟频率范围为100KHz~1460KHz。
图5A/D转换器电路图
1.5.报警电路
蜂鸣器是采用直流电压供电的一种一体化结构的电子讯响器,目前广泛应用于我们的生活中,比如说在电脑、各种报警器、汽车电子设备、电话机、定时器等常见的电子产品中作为发声器。
本设计采用的蜂鸣器为电磁式蜂鸣器。
电磁式蜂鸣器由振荡器、磁铁、电磁线圈、振动膜片以及外壳组成,电磁式蜂鸣器基本原理是在电源接通后,在电磁线圈和磁铁的相互作用下,振荡膜片周期性地振动发声。
因为蜂鸣器通常工作电流比较大,但是单片机I/O口输出的电流很小驱动不了蜂鸣器,所以还得选用的NPN型三极管9013来驱动蜂鸣器。
报警电路设计原理:
当水箱的水位降到一定值时,输出的低电平信号,或者烧水温度达到预置温度时,单片机通过指令将P1.5置成高电平,三极管Q5导通,扬声器工作,发出吱吱的声音。
同理当水箱的水过高时,P1.5为高电平,报警电路开始工作。
蜂鸣器报警电路如图3.6所示。
图6电磁式蜂鸣器报警电路图
2软件设计
软件设计由主程序,键扫描子程序及若干功能模块子程序组成。
其中主控制器子程序包括A/D转换子程序(水位、水温),键盘处理及显示子程序,加热控制子程序(使用输出比较功能)等组成。
主程序要先初始化系统的工作参数,主要是单片机的定时器,COP模块、A/D转换、端口、键中断等的工作模式参数设定,之后系统主程序循环调用各个功能模块子程序,对相关事件的处理依靠标志位和判断标志位实现。
在本次设计中运用到了PROTEUS的ISIS电路分析实物仿真系统和KEIL单片机编程软件,通过对它们联调可以仿真出本次设计的要求。
主程序设计思路:
软件设计采用各个模块功能分开独立设施的设计方式,将各个功能分成独立模块,有系统和监控程序一起管理执行。
本设计的软件包括主程序,键盘扫描子程序,显示子程序,水位测量子程序以及有关的Pt100的程序。
我主要说明了两个最主要的子程序:
温度测量、水位测量的流程和液晶显示流程。
主程序完成功能:
系统对传感器PT100、显示器进行初始化,并且读取用户通过键盘设置的最高烧水温度信息,随之系统自动读取当前水位,系统执行相应功能,完成后等待下一次的启动命令。
当检测到无水时,系统会启动报警电路工作,当检测到超过设定的烧水温度时,启动报警电路并关闭加热电路。
本设计的系统整体流程图如图8所示。
否
是
是
否
图7系统总体程序流程图
2.1温度测量子程序
温度测量由Pt100温度传感器来完成,温度测量子程序流程如图3.8所示。
根据系统的温度测量范围温度与阻值之间的关系编写程序,使阻值变换为温度,进行温度的测量,送入AT89C51单片机内,之后送入显示电路进行显示温度。
图8Pt100测温程序流程图
2.2判断子程序
判断整个程序的运行,当水温超过预定设置温度值时,关闭加热电路,如果低于预定设置温度值时,开通加热电路,进行加热。
当无水的时候,自己断电避免干烧,并蜂鸣报警。
图9判断程序流程图
2.3重要代码
主函数:
voidmain()
{
TMOD=0x01;
TH0=(65536-46000)/256;
TL0=(65536-46000)%256;
EA=1;
ET0=1;
TR0=1;
zd=0;
num=21;aaa=0;bbb=0;
num1=21;num2=21;num3=21;
while
(1)
{uinta;
ucharb;
changetemp();
a=gettemp();
b=scanff();
numy=gettemp();
display(a,b);
}
}
显示函数的分析:
voiddisplay(uinta,ucharb)
{
uchari,temp,srtemp,dis[4];
uintdda;
dda=abs(a);
numx=dda/1000;
num4=dda%1000/100;
num5=dda%100/10;
num6=dda%10;
dis[0]=numx;
dis[1]=num4;
dis[2]=num5;
dis[3]=num6;
dis[2]+=10;
if((dis[0]==0)&&(dis[1]==0))
dis[1]=20;
if(a<0)
dis[3]+=10;
else
{if(dis[0]!
=0)
dis[1]=dis[1]+10;
}
temp=0xfb;
for(i=1;i<4;i++)
{
P0=0xff;
wei=1;
temp=_crol_(temp,1);
P0=temp;
wei=0;
P0=0;
duan=1;
P0=table[dis[i]];
duan=0;
delay(3);
}
duan=1;
P0=0x00;
duan=0;
if(aaa==1&&ccc!
=21)
bbb++;
switch(bbb)
{
case0:
dis[1]=b;
num1=b;
dis[2]=num2;
dis[3]=num3;
if(dis[2]==21)
dis[2]++;
else
dis[2]+=10;
srtemp=0xfe;
for(i=1;i<4;i++)
{
P0=0xff;
wei=1;
P0=srtemp;
wei=0;
srtemp=_crol_(srtemp,1);
P0=0x00;
duan=1;
P0=table[dis[i]];
duan=0;
delay
(1);
duan=1;
P0=0x00;
duan=0;
}
break;
case1:
dis[1]=num1;
dis[2]=b;
num2=b;
dis[3]=num3;
if(dis[2]==21)
dis[2]++;
else
dis[2]+=10;
srtemp=0xfe;
for(i=1;i<4;i++)
{
P0=0xff;
wei=1;
P0=srtemp;
wei=0;
srtemp=_crol_(srtemp,1);
P0=0x00;
duan=1;
P0=table[dis[i]];
duan=0;
delay
(1);
duan=1;
P0=0x00;
duan=0;
}
中断加热子函数的分析:
voidtimer0()interrupt1
{inta;
TH0=(65536-46000)/256;
TL0=(65536-46000)%256;
zd++;
if(zd==6)
{
zd=0;
a=num1*100+num2*10+num3;
if(a>=numy&&num1!
=21&&num2!
=21&&num3!
=21)
{jiar=1;
P1=0xfd;
jiar=0;
}
else
{
jiar=1;
P1=0xff;
jiar=0;
}
}
}
四、结论与展望
本课题通过以AT89C52单片机为核心并辅以外围电路的设计方法实现了低成本的控制要求。
该系统具备简单、经济的特点,灵活的键盘控制方式来设定功能等参数增加了系统的灵活性,对水温的采集和显示、实时时钟的显示增加了系统的实用性。
电热水器内部器件较多,控制也较为复杂,应该说本课题是实时电热水器控制系统的小的缩影,整个系统的框架具有