水温控制系统毕业设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学科基础课硬件课程设计
设计说明书
水温控制系统设计
学生姓名
学号
班级
成绩
指导教师
计算机科学与技术系
2010年9月10日
学科基础课硬件课程设计评阅书
题目水温控制系统设计
学生姓名学号
指导教师评语及成绩
成绩:教师签名:年月日答辩教师评语及成绩
成绩:教师签名:年月日教研室意见
总成绩:室主任签名:年月日
课程设计任务书
2010 —2011 学年第一学期
专业:计算机科学与技术学号0718014092 姓名:操瑞峰
课程设计名称:学科基础课硬件课程设计
设计题目:水温控制系统设计
完成期限:自2010 年8 月30 日至2010 年10 月10 日共 2 周
设计依据、要求及主要内容(可另加附页):
一、目的任务:
掌握使用单片机设计水温控制系统的原理。

设置相应的按键,按相应的按键时应能对预定温度进行设置,并将其显示出来,要求误差不大于1度,并且要求弱电与强电分离,以保安全。

二、设计内容:
1. 复习相关课程内容:单片机原理及应用、计算机控制等课程相关内容;汇编语言程序设计的相关内容;熟悉模拟电路、数字电路的相关知识;
2. 熟悉实验相关器材的主要功能。

3. 在上述基础上,根据课程设计的基本要求,完成以下各项任务(反映在设计说明书中):
(1)题目要求涉及的硬件电路图及摘要说明。

(2)题目的工作原理及相应描述。

(3)程序流程框图。

(4)程序文本输入及实验完成。

三、时间安排:
1周一~1周三完成相关知识点的复习与软硬件设计;
1周四~2周三完成实验调试和编写设计说明书;
2周四~2周五进行课程设计验收、答辩。

四、设计要求:
1.软件程序文档;
2.硬件电路图(用专用软件);
3.完成实验;
4.完成设计说明书。

指导教师(签字):教研室主任(签字):
批准日期:年月日
摘要
温度控制是无论是在工业生产过程中,还是在日常生活中都起着非常重要的作用,过低的温度或过高的温度都会使水资源失去应有的作用,从而造成水资源的巨大浪费。

特别是在当前全球水资源极度缺乏的情况下,我们更应该掌握好对水温的控制,把身边的水资源好好地利用起来。

水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,其中以PID控制法最为常见。

单片机控制部分采用AT89C51单片机为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。

然而,单纯的PID算法无法适应不同的温度环境,在某个特定场合运行性能非常良好的温度控制器,到了新环境往往无法很好胜任,甚至使系统变得不稳定,需要重新改变 PID 调节参数值以取得佳性能。

关键词:单片机、水温控制、AT89C51 、BS18B20
目录
1 课题描述 (1)
2 问题分析和任务定义 (2)
2.1 问题分析 (2)
2.2 水温控制系统总体框图 (2)
3 硬件电路设计 (3)
4 程序设计 (4)
4.1 程序流程图 (4)
4.2 程序代码 (6)
5 电路仿真 (14)
5.1 仿真软件 (14)
5.2仿真过程 (14)
6 调试、测试与结果分析 (16)
6.1 仿真 (16)
6.2 测试 (16)
6.3 结果分析 (16)
7 总结 (17)
8 心得体会 (18)
参考文献 (19)
1 课题描述
水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,其中以PID控制法最为常见。

单片机控制部分采用AT89C51单片机为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。

然而,单纯的PID算法无法适应不同的温度环境,在某个特定场合运行性能非常良好的温度控制器,到了新环境往往无法很好胜任,甚至使系统变得不稳定,需要重新改变 PID 调节参数值以取得佳性能。

本文首先用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。

然后在模型参考自适应算法 MRAC基础上,用单片机实现了自适应控制,弥补了传统 PID控制结构在特定场合下性能下降的不足,设计了一套实用的温度测控系统,使它在不同时间常数下均可以达到技术指标。

此外还有效减少了输出继电器的开关次数,适用于环境参数经常变化的小型水温控制系统。

开发环境:微机windowsXP操作系统、DICE反汇编环境、Protues仿真系统、Keil环境
2 问题分析和任务定义
2.1 问题分析
实际上题目的任务就是要设计一个温控系统,系统的功能是温度测量和控温
在测量部分,要求测量40~90ºC 的温度范围,还规定了测量的精度需高于1ºC ,测温的结果要求显示。

在控制部分,要求系统能够将水温调节到给定的温度,并进行保温。

题目并未规定温度调节的时间长短,但显然调节时间越短越好。

题目没有具体给出具体加热的器具和方式,因此选手必须自行选择和制作加热装置,然后才能真正进行电路制作。

在发挥部分,还要求提高温度系统的控制性能,缩短调节时间,提高控制精度,增加打印功能。

2.2 水温控制系统总体框图
图2.1 总体设计
DS18B20温度传感器 电炉(尚未实现)
信号放大 继电器
A/D
键盘输入

片机水温控制系统
LED 显示
3 硬件电路设计
水温控制硬件电路图,如图3.1所示:
p04xtl1p34p21p20p17
GND
p06int1p33
p23p14p15p01xtl2p00rxdttl p30
p05p02p11p13p25
xtl1p03p12res et
p16p24p36nWR
xtl2
p26p10p07txdttl p31GND
p22p35
int0p32A LE
res et
p37
nRD
nP SE N p27GND
V CC
V CC
p27
p26
p25
p24
VC C
a p00
b p 01
c p02
d p03
e p04
f p05
g p06do t
p07
VC C
GN D VC C
VO p20p21p22
p00p01p02p03p04p05p06
p07C6
27P
C727P
RST 9XTAL218XTAL119PSEN 29ALE/PROG
30
EA/VPP
31
P1.0/T21P1.1/T2-EX
2P1.23P1.34P1.45P1.56P1.67P1.78P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A1528P3.0/RXD 10P3.1/TXD 11P3.2/INTO 12P3.3/INT113P3.4/TO 14P3.5/T115P3.6/WR 16P3.7/RD 17P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732U1
AT89C52
Y1
11.09MHZ
1
4
2
3
SW5
R110K
+
C510U
R210K
1
4
23SW4
R310K
142
3SW2
R410K
1
42
3SW3
DI SP1602
he llo w an swe r i s 123456V S S 1V D D
2V 03R S 4R W
5E 6d 07d 18d 29d 310
d 411d 512d 613d 7
14A 15K
16
D12
1602
R138.2K
C
1
2
3456789
R5
4K7*8
142
3SW1
GND
GND
VCC
图3.1 水温控制硬件电路图
4 程序设计
4.1 程序流程图
(1)主程序流程图
图4.1 水温控制主程序流程图
开始
初始化A T889C51单片机端口地址
读入预设温度值
启动A/D 转换
A/D 转换结果送入NX 单元
NX-FF>0
F0-NX>0 降温
加热
工程量变换
温度非线性温度转换
发送数据到串口
命令识别程序
从串口接受数据
Y
Y
Y
N
N N
(2)软件结构程序流程图
图4.2 软件结构程序流程图
检测与变送
A/D 转换
工程量变换 温度非线性转发送数据到串口
比较判断算法 温度预设值
温度
调节 电路 执行器
从串口接受数据
命令识别控制程序
4.2 程序代码
;用于获取设置的温度值
TEMP_GETSH EQU 10H
TEMP_GETSL EQU 11H
;用于在数码管上显示
TEMP_SETHH EQU 12H
TEMP_SETLL EQU 13H
;用于存放实时温度值
A_BIT EQU 14H ;个位
B_BIT EQU 15H ;十位
;按键输入引脚定义
K1 EQU P2.0
K2 EQU P2.1
;控制状态引脚定义
DS1820 EQU P3.7
FLAG EQU 20H.1 ;DS18B20是否存在标记
DQ EQU P3.7
;===========主程序===========
ORG 0000H
JMP START
ORG 03H
JMP EXT0
ORG 0013H
JMP EXT1
START:
MOV A,#02H ;设置温度值为:25
MOV DPTR,#TABLE3
MOVC A,@A+DPTR
MOV TEMP_SETHH,A
MOV A,#05H
MOV DPTR,#TABLE3
MOVC A,@A+DPTR
MOV TEMP_SETLL,A
MOV IE,#10000101B
MOV IP,#00000001B
MOV TCON,#00000101B
MOV SP,#70H ;设置堆栈指针
MOV R7,#00H ;R7为按键K1次数记录
MOV R6,#00H ;R6为按键K2次数记录
;============数码管显示子程序============
DISPLAY:
MOV P0,#0FFH
MOV A,TEMP_SETHH
MOV P0,A
MOV A,#00000001B
MOV P1,A
ACALL DELAY
ACALL TEMP_GETSHH1 ;调用该子程序,以便保存设置温度值的十位数的值
MOV P0,#0FFH
MOV A,TEMP_SETLL
MOV P0,A
MOV A,#00000010B
MOV P1,A
ACALL DELAY
ACALL TEMP_GETSLL1 ;调用该子程序,以便保存设置温度值的个位数的值
MOV P0,#0FFH
MOV A,#0BFH
MOV P0,A
MOV A,#00000100B
MOV P1,A
ACALL DELAY
MOV P0,#0FFH
MOV A,#0BFH
MOV P0,A
MOV A,#00001000B
MOV P1,A
ACALL DELAY
ACALL TEMP_DISPLAY ;调用实时温度显示子程序
JMP DISPLAY
;============按键扫描子程序============
EXT0:
PUSH ACC
PUSH PSW
INC R6
MOV A,R6
CJNE A,#10,DD1
MOV R6,#00H
MOV A,R6
DD1:
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV TEMP_SETHH,A
;ACALL DELAY
POP PSW
POP ACC
RETI
EXT1:
PUSH ACC
PUSH PSW
INC R7
MOV A,R7
CJNE A,#10,DD2
MOV R7,#00H
MOV A,R7
DD2:
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
MOV TEMP_SETLL,A
;ACALL DELAY
POP PSW
POP ACC
RETI
;=========================
;=========获取设置温度值的子程序=========
TEMP_GETSHH1:
;PUSH ACC
MOV A,TEMP_SETHH ;获取设置温度值的十位数
;MOV P0,#0FFH
MOV TEMP_GETSH,A
MOV R0,#0FFH
TEMP1:
INC R0
MOV A,R0
MOV DPTR,#TABLE3
MOVC A,@A+DPTR
MOV R1,TEMP_GETSH
CLR C
SUBB A,R1
JNZ TEMP1
MOV TEMP_GETSH,R0
;POP ACC
RET
TEMP_GETSLL1:
;PUSH ACC
MOV A,TEMP_SETLL ;获取设置温度值的个位数
MOV TEMP_GETSL,A
MOV R0,#0FFH
TEMP2:
INC R0
MOV A,R0
MOV DPTR,#TABLE3
MOVC A,@A+DPTR
MOV R1,TEMP_GETSL
CLR C
SUBB A,R1
JNZ TEMP2
MOV TEMP_GETSL,R0
;POP ACC
RET
;========================================
;==========初始化及读取温度值子程序======
RE_TEMP:
SETB DQ
ACALL RESET_1820
JB FLAG,ST
RET
ST:
MOV A,#0CCH
ACALL WRITE_1820
MOV A,#44H
ACALL WRITE_1820
ACALL RESET_1820
MOV A,#0CCH
ACALL WRITE_1820
MOV A,#0BEH
ACALL WRITE_1820
ACALL READ_1820
RET
;======================================== ;==========DS18B20复位初始化子程序======= RESET_1820:
SETB DQ
NOP
CLR DQ
;主机发出延时537us的复位低脉冲
MOV R1,#3
DL Y:
MOV R0,#107
DJNZ R0,$
DJNZ R1,DL Y
;然后拉高数据线
SETB DQ
NOP
NOP
NOP
;等待DS18B20回应
MOV R0,#25H
T2: JNB DQ,T3
DJNZ R0,T2
JMP T4
;置标志位FLAG=1,表示DS18B20存在
T3: SETB FLAG
JMP T5
;清标志位FLAG=0,表示DS18B20不存在
T4: CLR FLAG
JMP T7
;时序要求延时一段时间
T5: MOV R0,#117
T6: DJNZ R0,T6
T7: SETB DQ
RET
;======================================== ;===========写入DS1820子程序============= ;写入DS1820
WRITE_1820:
MOV R2,#8 ;一共8位数据
CLR C ;C=0
WR1:
CLR DQ ;总线低位,开始写入
MOV R3,#7
DJNZ R3,$ ;保持16us以上
RRC A ;把字节DA TA分成8位,环移给C
MOV DQ,C ;写入一个位
MOV R3,#23
DJNZ R3,$ ;等待
SETB DQ ;重新释放总线
NOP
DJNZ R2,WR1 ;写入下一个位
SETB DQ ;释放总线
RET
;========================================
;===========读出DS1820子程序=============
;将温度值从DS18B20中读出
READ_1820:
MOV R4,#2 ;读取两个字节的数据
MOV R1,#29H ;低位存入TEMP_GETCL,高位存入TEMP_GETCH RE0:
MOV R2,#8 ;数据一共8位
RE1:
CLR C
SETB DQ
NOP
NOP
CLR DQ ;读前总线保持为低
NOP
NOP
NOP
SETB DQ ;开始读总线释放
MOV R3,#9 ;延时18us
DJNZ R3,$
MOV C,DQ ;从总线读到一个位
MOV R3,#23
DJNZ R3,$ ;等待50us
RRC A ;把读到的位值环移给A
DJNZ R2,RE1 ;读下一个位
MOV @R1,A
DEC R1
DJNZ R4,RE0
RET
;========================================
;=============温度显示子程序=============
TEMP_DISPLAY:
ACALL RE_TEMP ;调用读取温度子程序
ACALL TURN
ACALL DATAES1
MOV A,29H
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV P0,#0FFH
MOV DPTR,#TABLE3
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
MOV P1,#00010000B
ACALL DELAY
MOV A,A_BIT
MOV P0,#0FFH
MOVC A,@A+DPTR
MOV P0,A
MOV P1,#00100000B
ACALL DELAY
RET
;======================================== ;=============数据转化子程序============= TURN:
MOV A,29H
MOV C,40H ;28的位地址
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
RET
;======================================== ;=============处理温度数据子程序========= DA TAES1:
MOV A,TEMP_GETSH
MOV B,#00001010B
MUL AB
MOV R0,A
MOV A,TEMP_GETSL
ADD A,R0
MOV R0,A
MOV A,B_BIT
MOV B,#00001010B
MUL AB
MOV R1,A
MOV A,A_BIT
ADD A,R1
MOV R1,A
MOV A,R0
CLR C
SUBB A,R1
JZ DDAS3
RLC A
JC DDAS4
MOV P2,#11011111B
JMP DDAS5
DDAS3:
MOV P2,#10111111B
JMP DDAS5
DDAS4:
MOV P2,#01111111B
DDAS5:
ACALL DELAY
RET
;======================================== ;===============延时子程序=============== DELAY: ;延时3ms
MOV R0,#25
DD3:
MOV R1,#100
DJNZ R1,$
DJNZ R0,DD3
RET
TABLE1: ;设置温度值十位数代码表DB 0B0H ;3
DB 99H ;4
DB 92H ;5
DB 82H ;6
DB 0F8H ;7
DB 80H ;8
DB 90H ;9
DB 0C0H ;0
DB 0F9H ;1
DB 0A4H ;2
TABLE2: ;设置温度值个位数代码表
DB 92H ;5
DB 82H ;6
DB 0F8H ;7
DB 80H ;8
DB 90H ;9
DB 0C0H ;0
DB 0F9H ;1
DB 0A4H ;2
DB 0B0H ;3
DB 99H ;4
TABLE3: ;数码管显示代码表
DB 0C0H ;0
DB 0F9H ;1
DB 0A4H ;2
DB 0B0H ;3
DB 99H ;4
DB 92H ;5
DB 82H ;6
DB 0F8H ;7
DB 80H ;8
DB 90H ;9
END
5 电路仿真
5.1 仿真软件
电路仿真中采用Proteus仿真软件。

该软件简单易用,容易上手,元器件较为齐全,仿真稳定,功能强大,故采用了此仿真软件。

5.2仿真过程
建立仿真电路图,如下图所示:
图5.1 水温控制设计仿真电路图
6 调试、测试与结果分析
6.1 仿真
根据水温控制设计原理,可以按照以下步骤来完成仿真:
(1)根据要求在Proteus中选取元器件,设计电路图。

(2)编写代码,实现软件设计。

(3)使用Kiel编译程序,产生相应的Hex文件。

(4)将Hex文件装入Proteus仿真软件中,实现仿真。

6.2 测试
(1)根据要求选取元器件。

(2)根据所设计电路图连接电路:
(3)编写代码,实现软件设计。

(4)使用Kiel编译程序,产生相应的Hex文件。

(5)将Hex文件装入DICE中,下载到AT89C51中,运行系统。

6.3 结果分析
通过按照设计的电路图连接电路,装载、编译并运行程序,可以实现通过温度的变化,系统给出相应的警示。

7 总结
微型计算机的出现和大量使用将人类社会带入一个新的时代,单片微型计算机(简称单片机)在其中扮演着十分重要的角色。

虽然它没有常见的PC那样大的体积和重量,不会在办公桌或控制台上占据一个显要的位置,但它就像小小的螺丝钉一样,镶嵌在人们工作、生活中需要计算、控制、测量等智能活动的各个角落。

单片机以其体积小、可靠性高、控制功能强、使用方便、性能价格比高、容易产品化等特点,在智能仪表、机电一体化、实时控制、分布式多机系统、家用电器等各个领域得到了广泛应用,对各个行业的技术改造和产品的更新换代起着重要的推动作用,对人们生活质量的提高产生了深刻的影响。

本次《基于单片机的水温控制系统设计》是以AT89C51为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。

在系统的软硬件调试过程中,不断地有问题出现,如OP-07、ADC0804会发烫,串行通信…,但是在老师和同学的指导和帮助下,通过电路检查、原理分析、程序修改等工作,这些问题都一一得到了解决,所以在这次调试过程中,我们学到了很多知识,同时也大大地提高了我们的实际动手能力,这对我们以后的系统设计会有很大的帮助。

同时,该系统还存在着一些问题,如温度显示精度不高,没有采用小数部分;PID算法的参数不够精确,这影响水温达到稳定的时间。

8 心得体会
1、硬件装焊方面要有足够的耐心和细心,就算电路设计的再好,在焊接时出一点小差错,也是不允许的,往往电路的错误都是由于一些小问题引起的,如短路等,将造成不可预测的后果
2、软件方面注意的细节也很多,下面简单介绍一下这阵子写程序得到的一些经验:(1)写较大的程序时一定要事先做好资源分配。

(2)堆栈指针SP应设初值。

(3)R1、R0也应规定好用哪一区的,即设PSW.3和PSW.4。

(4)进入中断时一定要记得保护ACC和PSW(视情况而定)。

(5)不止进中断时要保护,有时候在正常程序下也要对某些值进得保护。

可用堆栈式的保护也可先赋值给其他地址,过后再赋回来
(6)妥善使用位地址,位地址可做为一些标志位,可以给编程带来很大的方便。

在本程序中,我就用了三个位地址,使程序大大的简化了
参考文献
[1] 李群芳.单片微型计算机与接口技术.电子工业出版社,2005.1
[2] 何立民.MCS-51单片机应用系统设计. 北京航空航天大学出版社,2000.3
[3] 戴梅鄂.微型计算机技术及应用.清华大学出版社,2008.2
[4]李建忠.单片机原理及应用.西安电子科技出版社,2008.2
[5] 沈美明.汇编语言程序设计.清华大学出版社,2008.10
[6] 路而红.电子设计自动化应用技术. 北京希望电子出版社,2000.1。

相关文档
最新文档