基于STC89c52的水温控制器的设计Word下载.docx
《基于STC89c52的水温控制器的设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于STC89c52的水温控制器的设计Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
the
design
of
water
heater
temperature
control
and
various
electrical
appliances
such
as
rice
cookers
circuit.
The
core
it
is
a
microcomputer
AT89S52.
It
realize
interactive
between
people
device
by
three
digital
display
four
keys.
conversion
1-WIRE
BUS
chip
DS18B20
real-time
sampling
through
provide
indicator
to
indicate
different
states
now,eg.
settings
temperature,heating,stop
etc.
whole
use
keys
set
up
heating
mode.
英文关键词Microcomputer;
Digital
Display;
BUS;
1绪论
本系统的设计可以用于水温控制系统和电饭煲等各种电器电路中。
它以单片机AT89S52为核心,通过数码管显示温度和语音提示实现人机对话,使用温度转换芯片DS18B20实时采集温度并通过数码管显示,并提供各种运行指示灯用来指示系统现在所处状态,如:
传统的温度采集电路相当复杂,需要经过温度采集、信号放大、滤波、AD转换等一系列工作才能得到温度的数字量,并且这种方式不仅电路复杂,元器件个数多,而且线性度和准确度都不理想,抗干扰能力弱。
现在常用的温度传感器芯片不但功率消耗低、准确率高,而且比传统的温度传感器有更好的线性表现,最重要的一点是使用起来方便。
自动控制仪器仪表总的发展趋势是高性能、数字化、集成化、智能化和网络化。
智能温度控制系统的设计是为了满足市场对成本低、性能稳定、可远程监测、控制现场温度的需求而做的课题,具有较为广阔的市场前景。
本系统的核心控制芯片选用的是51系列单片机AT89S52,单片机在各个技术领域中的迅猛发展,与单片机所构成的计算机应用系统的特点有关:
·
单片机构成的应用系统有较大的可靠性。
系统构建简洁、易行,能方便的实现系统功能。
由于构成的系统是一个计算机系统,相当多的功能由软件实现,故具有柔性特点。
有优异的性能价格比。
2系统总体设计
2.1硬件总体设计
设计并制作一个基于单片机的热水器温度控制系统的电路,其结构框图如图2-1:
图2-1系统结构框图
2.1.1硬件系统子模块
(1)单片机最小系统电路部分
(2)键盘扫描电路部分
(3)数码管温度显示和运行指示灯电路部分
(4)温度采集电路部分
(5)继电器控制部分
(6)报警部分
2.2软件总体设计
良好的设计方案可以减少软件设计的工作量,提高软件的通用性,扩展性和可读性。
本系统的设计方案和步骤如下:
(1)根据需求按照系统的功能要求,逐级划分模块。
(2)明确各模块之间的数据流传递关系,力求数据传递少,以增强各模块的独立性,便于软件编制和调试。
(3)确定软件开发环境,选择设计语言,完成模块功能设计,并分别调试通过。
(4)按照开发式软件设计结构,将各模块有机的结合起来,即成一个较完善的系统。
首先接通电源系统开始工作,系统开始工作后,通过按键设定温度值的上限值和下限值,确定按键将设定的温度值存储到指定的地址空间,温度传感器开始实时检测,调用显示子程序显示检测结果,调用比较当前显示温度值与开始设定的温度值比较,如果当前显示值低于设定值就通过继电器起动加热装置,直到达到设定值停止加热,之后进行保温,如果温度高于上限进行报警。
3硬件系统设计
3.1硬件电路分析和设计报告
本次设计主要思路是通过对单片机编程将由温度传感器DS18B20采集的温度外加驱动电路显示出来,包括对继电器的控制,进行升温,当温度达到上下限蜂鸣器进行报警。
P1.7开关按钮是用于确认设定温度的,初始按下表示开始进入温度设定状态,然后通过P1.5和P1.6设置温度的升降,再次按下P1.7时,表示确认所设定的温度,然后转入升温或降温。
P2.3所接的发光二极管用于表示加热状态,P2.5所接的发光二极管用于表示保温状态。
P2.3接继电器。
P3.1是温度信号线。
整个电路都是通过软件控制实现设计要求。
3.1.1单片机最小系统电路
因为89S52单片机内部自带8K的ROM和256字节的RAM,因此不必构建单片机系统的扩展电路。
如图3-1,单片机最小系统有复位电路和振荡器电路。
值得注意的一点是单片机的31脚
必须接高电平,否则系统将不能运行。
因为该脚不接时为低电平,单片机将直接读取外部程序存储器,而系统没有外部程序存储器,所以
必须接VCC。
在按键两端并联一个电解电容,滤除交流干扰,增加系统抗干扰能力。
图3-1单片机最小系统图
3.1.2键盘电路
键盘是单片机应用系统中的主要输入设备,单片机使用的键盘分为编码键盘和非编码键盘。
编码键盘采用硬件线路来实现键盘的编码,每按下一个键,键盘能够自动生成按键代码,并有去抖功能。
因此使用方便,但硬件较复杂。
非编码键盘仅仅提供键开关状态,由程序来识别闭合键,消除抖动,产生相应的代码,转入执行该键的功能程序。
非编码键盘中键的数量较少,硬件简单,在单片机中应用非常广泛。
图为按键和AT89S52的接线图,检测仪共设有4个按键,每个按键由软件来决定其功能,4个按键功能分别为:
(1)SW1:
设定按键(设定按键)
(2)SW2:
加法按键(当前位加5)
(3)SW3:
减法按键(当前位减5)
(4)SW4:
退出设置键(系统初始化)
图3-2单片机最小系统
3.1.3数码管及指示灯显示电路
(1)数码管显示说明
各个数码管的段码都是单片机的数据口输出,即各个数码管输入的段码都是一样的,为了使其分别显示不同的数字,可采用动态显示的方式,即先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。
由视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚,过程如表3-1。
表3-1数码管编码表
段码
位码
显示器状态
08H
01H
□□□□□□□0
abH
02H
□□□□□□1□
12H
04H
□□□□□2□□
22H
□□□□3□□□
a1H
10H
□□□4□□□□
24H
20H
□□5□□□□□
40H
□6□□□□□□
aaH
80H
7□□□□□□□
本论文中使用了3个数码管,其中前两位使用动态扫描显示实测温度,在设置加热温度的时候,两个数码管是闪烁,以提示目前处在温度设置状态。
第三位数码管静态显示符号“℃”。
(2)运行指示灯说明
本热水器温度控制系统中共使用到3个LED指示灯和3个数码管。
右上角的红色LED是电源指示灯;
数码管右边的红色LED是加热指示灯,当刚开机或温度降到设定温度5℃以下时,该灯会亮,表示目前处于加热状态;
当温度上升到设定温度时,该LED灭,同时数码管右边的绿色LED亮,表示目前处于保温状态,用户可以使用热水器;
当温度再次下降到设定温度5℃以下时,绿色LED灭,红色加热的LED灯亮,不断循环。
图3-3LED数码管显示电路图
3.1.4温度采集电路
(1)DS18B20介绍
Dallas最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济。
Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822“一线总线”数字化温度传感器同DS18B20一样,DS18B20也支持“一线总线”接口,测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为±
0.5℃。
DS1822的精度较差为±
2℃。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
其DS18B20的管脚配置和封装结构如图3-4所示。
图3-4DS18B20封装
引脚定义:
①DQ为数字信号输入/输出端;
②GND为电源地;
③VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
(2)DS18B20设计中应注意的几个问题
DS18B20具有测温系统简单、测温精度高、连接方便、占用接口线少等优点,但在实际应用中也应注意以下几方面的问题:
较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送。
因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在DS18B20有关资料中均未提及1Wire上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。
当1Wire上所挂DS18B20超过8个时,就需要考虑微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
连接DS18B20的总线电缆是有长度限制的。
实际应用中,测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
本文以广泛应用的数字温度传感器DS18B20为例,说明了1Wire总线的操作过程和基本原理。
事实上,基于1Wire总线的产品还有很多种,如1Wire总线的E2PROM、实时时钟、电子标签等。
他们都具有节省I/O资源、结构简单、开发快捷、成本低廉、便于总线扩展等优点,因此有广阔的应用空间,具有较大的推广价值。
本设计将温度传感器DS18B20与单片机TXD引脚相连,读取温度传感器的数值。
DS18B20与单片机连接图如图所示3-10所示。
图3-10DS18B20与单片机连接图
3.1.5电源电路
采用L7805稳压块,输出为5V。
电子组件要正常运作都需要电源电压供电,一般常用的电源电压为+5V或+12V,因为数字IC(IngegratedCircuit:
集成电路)所供给的电压为+5V,而CMOSIC所供给的电压为+12V,7805是一个稳压块。
7805稳压管把高电压转换到低电压,7805稳压管具有保护单片机的作用。
L7805输出端要并联上一个电解电容,滤除交流电干扰,防止损坏单片机系统。
本设计采用两种供电方式,一种为DC7~18V直流稳压电源变换成5V的直流电;
另一种为四节干电池共6V经二极管加压后得到将近5V的直流电源,电源配以开关和指示灯,以方便使用。
黄色发光二极管表示保温,红色的表示加热状态。
图3-11系统电源设计图
3.1.6报警电路设计
同时可以在系统里设定温度上限值,由于加热停止后,加热管还有余热当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。
报警电路原理图如图所示。
图3-12报警电路图
图中的三极管8550的作用是增加驱动能力,比9012的驱动电流还大些,因此选用8550。
当程序进入报警子程序时,把P2.7置0,就会触发蜂鸣器,为了使报警声音效果更好,对P2.7取反,发出报警嘟噜声音。
3.1.7加热管控制电路设计
继电器是常用的输出控制接口,可以做交直流信号的输出切换。
它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
继电器控制接点操作说明如下:
●COM:
Common,共同点。
输出控制接点的共同接点。
●NC:
NormalClose常闭点。
以Com为共同点,NC与COM在平时是呈导通状态的。
●NO:
NormalOpen常开点。
NO与COM在平时是呈开路状态的,当继电器动作时,NO与COM导通,NC与COM则呈开路状态。
当89S52的P2.5输出高电平时,继电器不导通,反之当输出低电平时,继电器导通,这样就激活了连接回路。
图3-13单片机控制继电器电路图
4系统软件设计
本系统采用的是循环查询方式,来显示和控制温度的。
主要包括四段程序的设计:
DS18B20读温度程序,数码管的驱动程序,键盘扫描程序,以及抱经处理程序。
4.1主程序流程图
(这两个图简单说明一下)
图4-1主程序流程图
5系统调试
5.1硬件电路调试
仔细检查所接电路,按照硬件原理图接线,理论上是能实现的,如果数码管不显示,则应该检查线路是否正确,或是因为单片机没有工作,还有集电极和发射极是否接对。
如果只显示两个八,则可能是DS18B20没有接正确,检查上拉电路是否接好。
另外要注意的是,由单片机输出的控制信号比较小,需要进行放大才能驱动继电器工作,否则就不能实现升温过程,通常选用8550三极管来进行放大。
还有220V交流电绿色接头和加热管黄色接头必须接正确,否则导致电路烧坏。
蜂鸣器是低电平有效。
如果能注意这些问题,电路基本不会出错。
5.2软件调试
如果硬件电路检查后,没有问题却实现不了设计要求,则可能是软件编程的问题,首先应检查初始化程序,然后是读温度程序,显示程序,以及继电器控制程序,对这些分段程序,要注意逻辑顺序,调用关系,以及涉及到了标号,有时会因为一个标号而影响程序的执行,除此之外,还要熟悉各指令的用法,以免出错。
还有一个容易忽略的问题就是,源程序生成的代码是否烧入到单片机中,如果这一过程出错,那不能实现设计要求也是情理之中的事。
本人在设计的时候在伟福仿真软件进行调试,通过此软件进行调试可以很方便的观察单片机内部各个寄存器及内部存储器变化情况,以方便进行调试。
图为单片机功能调试图。
图5-1单片机功能调试图
硬件与软件调试相结合,仔细检查各个模块的设计,旧能顺利完成任务,实现设计要求,在调试过程中必须认真耐心,不能有一点马虎,否则遗漏一个小的问题就会导致整个设计的失败。
5.3系统操作说明
本系统上电后数码管显示当前测量温度,此时加热指示灯和保温指示灯均不点亮;
若此时按“自动加热”键,则单片机自动将预加热温度设置为80℃并开始加热,送出一个加热信号,并点亮加热指示灯;
若按“温度设置”键,则进入预加热温度设置界面,此时数码管闪烁显示预设置温度,此时通过按键“+”和“-”进行设置温度,预设置温度按“5”递增或递减,设置好温度后再按一次“温度设置”键确定,单片机保存预设置温度,并开始加热。
此时单片机通过数码管显示实时检测的温度并和预设置温度进行对比,如果实测温度大于或等于预设置温度,则单片机发出停止加热信号并熄灭加热指示灯,点亮保温指示灯,且当超过预设温度时发出报警;
当温度下降到预设置温度以下5度时,单片机再次发出加热信号,同时熄灭保温指示灯,点亮加热指示灯,依次循环控制。
总结
通过本次的设计,使我们不仅对单片机这门课程有了更深刻的认识,懂得了如何运用课本知识结合实际来完成定时器的显示和编程方法以及数码显示电路的驱动方法,使我们能够很快的适应现代控制技术发展的需求,同时也提高了我们的思维能力和实际操作能力,为以后更好的走上工作岗位奠定了坚实的基础。
另外,这次的设计还让我更进一步的认识了关于AT89S52等芯片的引脚功能以及使用方法,使我学会了应用不同的芯片来配合完成整个设计的操作。
在做硬件电路的这段时间里,从思考设计到对电路的调试经过了许多困难。
同样在对软件进行设计时,也可为一路坎坷。
但是通过对软硬件不断撞墙,不断思考解决问题的过程中,我学会了很多东西,同时对单片机也有了更深的认识。
在做设计的时候,很需要耐心和对事物的细心,很多时候一个简单问题的一个简单的疏忽就会导致整个电路的不工作,只有不断的检查不断的调试,才能真正完成一个设计的制作。
只有不断的发现问题解决问题,才能从问题中改变自己,提升自己对单片机的能力。
此设计虽然能够完成温度的显示和控制,但功能和精度有待于进一步提高。
以后可以通过加入PID算法优化控制功能,并通过液晶显示屏实时显示温度。
附录一:
系统源程序
EMPER_LEQU29H;
用于保存读出温度的低8位
TEMPER_HEQU28H;
用于保存读出温度的高8位
FLAG1EQU38H;
是否检测到DS18B20标志位
A_BITEQU20H;
数码管个位数存放内存位置
B_BITEQU21H;
数码管十位数存放内存位置
B1EQU70H;
温度小数点位
A1EQU71H;
设定温度值
DQEQUP3.1;
DQ为DS18B20数据位
BELLEQUP2.7;
//蜂鸣报警
ORG0000H;
单片机内存分配申明!
AJMPMAIN0
;
///////////////////////////////////前面的都是定义
MAIN:
MOVR0,#10
M1:
CPLP2.3
ACALLDELAY125
DJNZR0,M1;
//此段为灯闪5次,无实际意义
///////////////////////////////////////////////
MAIN0:
MOVA1,#80;
默认加热为80度
MAIN1:
LCALLD1820;
调用读温度子程序
LCALLDISPLAY;
调用数码管显示子程序
MOVA,29H
CLRC
CJNEA,A1,MAIN1_1
SETBBELL;
//温度相等,关闭蜂鸣器
AJMPMAIN1_1_A;
//下等不用叫蜂鸣器
MAIN1_1:
JCMAIN1_2;
为1转移,表示小于设定温度
CPLBELL;
蜂鸣器断续鸣叫
MAIN1_1_A:
CLRP2.3;
//下面是表示没达到温度
SETBP2.5
AJMPMAIN2
/////////////////////////////////////主要是检测温度是否小于设定的温度,小于,则开发热管CLRP2.3
MAIN1_2:
//关闭蜂鸣器
CLRP2.5;
//开发热管
SETBP2.3
///////////////////////////////上面的是大于,关发热管
MAIN2:
JBP1.0,MAIN1;
//看P1.0有否按下
ACALLDELAY125;
//延时防抖动,常用的手法,网上很多介绍的
//再次查看
CLRP2.3
JNBP1.0,$;
//等按键完全松手才进入!
///检测到P1.0按键后后进入设定温度
MAIN2_1:
ACALLDISPLAY1
JBP1.2,MAIN2_2
JNBP1.2,$
MOVA,#5
ADDA,A1
CJNEA,#100,MAIN2_1_1
MOVA,#99
AJMPMAIN2_1_3
////////////////上面这一段是+5度按键,按下+5度
MAIN2_1_1:
JCMAIN2_1_3
MAIN2_1_2:
MOVA,#99
MAIN2_1_3:
MOVA1,A
MAIN2_2:
JBP1.4,MAIN2_3
ACALLDELAY125
JBP1.4,MAIN2_3
JNBP1.4,$
MOVA,A1
CJNEA,#99,ZY1
MOVB,#4
AJMPZY2
ZY1:
MOVB,#5
ZY2:
MOVA,A1
SUBBA,B
MAIN2_2_1:
JNCMAIN2_2_2
MOVA1,#0
AJMPMAIN2_3
////////////////上面这一段是-5度按键,按下-5度
MAIN2_2_2:
MAIN2_3:
JBP1.6,MAIN2_1
JBP1.6,MAIN2_1
CLRP2.3
JNBP1.6,$
SETBP2.3
AJMPMAIN1
/////////////上面这一段是退出的意思的!
D1820:
LCALLGET_TEMPER;
MOVB1,29H
MOVA,29H
MOVC,40H;
将28H中的最低位移入C
RRCA
MOVC,41H
MOVC,42H
MOVC,43H
MOV29H,A
MOVA,B1
MOVB,#10H
MULAB
DIVAB
MOVB,#10
MOVB1,A
RET
//////////上面这一段是读取温度后进行转换的意思!
/////////////////////////////////
////////////////////////////////
///////////////////////////////
INIT_1820: