水温控制系统设计03.docx

上传人:b****2 文档编号:20313277 上传时间:2023-04-25 格式:DOCX 页数:23 大小:164.64KB
下载 相关 举报
水温控制系统设计03.docx_第1页
第1页 / 共23页
水温控制系统设计03.docx_第2页
第2页 / 共23页
水温控制系统设计03.docx_第3页
第3页 / 共23页
水温控制系统设计03.docx_第4页
第4页 / 共23页
水温控制系统设计03.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

水温控制系统设计03.docx

《水温控制系统设计03.docx》由会员分享,可在线阅读,更多相关《水温控制系统设计03.docx(23页珍藏版)》请在冰豆网上搜索。

水温控制系统设计03.docx

水温控制系统设计03

摘要

温度是日常生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。

很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。

因此,智能化温度控制技术正被广泛地采用。

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

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

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

关键词:

单片机、水温控制、AT89C51

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总体设计

3硬件电路设计

水温控制硬件电路图,如图3.1所示:

 

图3.1水温控制硬件电路图

4程序设计

4.1程序流程图

(1)主程序流程图

 

图4.1水温控制主程序流程图

(2)软件结构程序流程图

 

图4.2软件结构程序流程图

4.2程序代码

;用于获取设置的温度值

TEMP_GETSHEQU10H

TEMP_GETSLEQU11H

;用于在数码管上显示

TEMP_SETHHEQU12H

TEMP_SETLLEQU13H

;用于存放实时温度值

A_BITEQU14H;个位

B_BITEQU15H;十位

;按键输入引脚定义

K1EQUP2.0

K2EQUP2.1

;控制状态引脚定义

DS1820EQUP3.7

FLAGEQU20H.1;DS18B20是否存在标记

DQEQUP3.7

;===========主程序===========

ORG0000H

JMPSTART

ORG03H

JMPEXT0

ORG0013H

JMPEXT1

START:

MOVA,#02H;设置温度值为:

25

MOVDPTR,#TABLE3

MOVCA,@A+DPTR

MOVTEMP_SETHH,A

MOVA,#05H

MOVDPTR,#TABLE3

MOVCA,@A+DPTR

MOVTEMP_SETLL,A

 

MOVIE,#10000101B

MOVIP,#00000001B

MOVTCON,#00000101B

MOVSP,#70H;设置堆栈指针

MOVR7,#00H;R7为按键K1次数记录

MOVR6,#00H;R6为按键K2次数记录

;============数码管显示子程序============

DISPLAY:

MOVP0,#0FFH

MOVA,TEMP_SETHH

MOVP0,A

MOVA,#00000001B

MOVP1,A

ACALLDELAY

ACALLTEMP_GETSHH1;调用该子程序,以便保存设置温度值的十位数的值

MOVP0,#0FFH

MOVA,TEMP_SETLL

MOVP0,A

MOVA,#00000010B

MOVP1,A

ACALLDELAY

ACALLTEMP_GETSLL1;调用该子程序,以便保存设置温度值的个位数的值

MOVP0,#0FFH

MOVA,#0BFH

MOVP0,A

MOVA,#00000100B

MOVP1,A

ACALLDELAY

MOVP0,#0FFH

MOVA,#0BFH

MOVP0,A

MOVA,#00001000B

MOVP1,A

ACALLDELAY

ACALLTEMP_DISPLAY;调用实时温度显示子程序

JMPDISPLAY

;============按键扫描子程序============

EXT0:

PUSHACC

PUSHPSW

INCR6

MOVA,R6

CJNEA,#10,DD1

MOVR6,#00H

MOVA,R6

DD1:

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVTEMP_SETHH,A

;ACALLDELAY

POPPSW

POPACC

RETI

EXT1:

PUSHACC

PUSHPSW

INCR7

MOVA,R7

CJNEA,#10,DD2

MOVR7,#00H

MOVA,R7

DD2:

MOVDPTR,#TABLE2

MOVCA,@A+DPTR

MOVTEMP_SETLL,A

;ACALLDELAY

POPPSW

POPACC

RETI

;=========================

;=========获取设置温度值的子程序=========

TEMP_GETSHH1:

;PUSHACC

MOVA,TEMP_SETHH;获取设置温度值的十位数

;MOVP0,#0FFH

MOVTEMP_GETSH,A

MOVR0,#0FFH

TEMP1:

INCR0

MOVA,R0

MOVDPTR,#TABLE3

MOVCA,@A+DPTR

MOVR1,TEMP_GETSH

CLRC

SUBBA,R1

JNZTEMP1

MOVTEMP_GETSH,R0

;POPACC

RET

TEMP_GETSLL1:

;PUSHACC

MOVA,TEMP_SETLL;获取设置温度值的个位数

MOVTEMP_GETSL,A

MOVR0,#0FFH

TEMP2:

INCR0

MOVA,R0

MOVDPTR,#TABLE3

MOVCA,@A+DPTR

MOVR1,TEMP_GETSL

CLRC

SUBBA,R1

JNZTEMP2

MOVTEMP_GETSL,R0

;POPACC

RET

;========================================

;==========初始化及读取温度值子程序======

RE_TEMP:

SETBDQ

ACALLRESET_1820

JBFLAG,ST

RET

ST:

MOVA,#0CCH

ACALLWRITE_1820

MOVA,#44H

ACALLWRITE_1820

ACALLRESET_1820

MOVA,#0CCH

ACALLWRITE_1820

MOVA,#0BEH

ACALLWRITE_1820

ACALLREAD_1820

RET

;========================================

;==========DS18B20复位初始化子程序=======

RESET_1820:

SETBDQ

NOP

CLRDQ

;主机发出延时537us的复位低脉冲

MOVR1,#3

DLY:

MOVR0,#107

DJNZR0,$

DJNZR1,DLY

;然后拉高数据线

SETBDQ

NOP

NOP

NOP

;等待DS18B20回应

MOVR0,#25H

T2:

JNBDQ,T3

DJNZR0,T2

JMPT4

;置标志位FLAG=1,表示DS18B20存在

T3:

SETBFLAG

JMPT5

;清标志位FLAG=0,表示DS18B20不存在

T4:

CLRFLAG

JMPT7

;时序要求延时一段时间

T5:

MOVR0,#117

T6:

DJNZR0,T6

T7:

SETBDQ

RET

;========================================

;===========写入DS1820子程序=============

;写入DS1820

WRITE_1820:

MOVR2,#8;一共8位数据

CLRC;C=0

WR1:

CLRDQ;总线低位,开始写入

MOVR3,#7

DJNZR3,$;保持16us以上

RRCA;把字节DATA分成8位,环移给C

MOVDQ,C;写入一个位

MOVR3,#23

DJNZR3,$;等待

SETBDQ;重新释放总线

NOP

DJNZR2,WR1;写入下一个位

SETBDQ;释放总线

RET

;========================================

;===========读出DS1820子程序=============

;将温度值从DS18B20中读出

READ_1820:

MOVR4,#2;读取两个字节的数据

MOVR1,#29H;低位存入TEMP_GETCL,高位存入TEMP_GETCH

RE0:

MOVR2,#8;数据一共8位

RE1:

CLRC

SETBDQ

NOP

NOP

CLRDQ;读前总线保持为低

NOP

NOP

NOP

SETBDQ;开始读总线释放

MOVR3,#9;延时18us

DJNZR3,$

MOVC,DQ;从总线读到一个位

MOVR3,#23

DJNZR3,$;等待50us

RRCA;把读到的位值环移给A

DJNZR2,RE1;读下一个位

MOV@R1,A

DECR1

DJNZR4,RE0

RET

;========================================

;=============温度显示子程序=============

TEMP_DISPLAY:

ACALLRE_TEMP;调用读取温度子程序

ACALLTURN

ACALLDATAES1

MOVA,29H

MOVB,#10

DIVAB

MOVB_BIT,A

MOVA_BIT,B

MOVP0,#0FFH

MOVDPTR,#TABLE3

MOVA,B_BIT

MOVCA,@A+DPTR

MOVP0,A

MOVP1,#00010000B

ACALLDELAY

MOVA,A_BIT

MOVP0,#0FFH

MOVCA,@A+DPTR

MOVP0,A

MOVP1,#00100000B

ACALLDELAY

RET

;========================================

;=============数据转化子程序=============

TURN:

MOVA,29H

MOVC,40H;28的位地址

RRCA

MOVC,41H

RRCA

MOVC,42H

RRCA

MOVC,43H

RRCA

MOV29H,A

RET

;========================================

;=============处理温度数据子程序=========

DATAES1:

MOVA,TEMP_GETSH

MOVB,#00001010B

MULAB

MOVR0,A

MOVA,TEMP_GETSL

ADDA,R0

MOVR0,A

MOVA,B_BIT

MOVB,#00001010B

MULAB

MOVR1,A

MOVA,A_BIT

ADDA,R1

MOVR1,A

MOVA,R0

CLRC

SUBBA,R1

JZDDAS3

RLCA

JCDDAS4

MOVP2,#11011111B

JMPDDAS5

DDAS3:

MOVP2,#10111111B

JMPDDAS5

DDAS4:

MOVP2,#01111111B

DDAS5:

ACALLDELAY

RET

;========================================

;===============延时子程序===============

DELAY:

;延时3ms

MOVR0,#25

DD3:

MOVR1,#100

DJNZR1,$

DJNZR0,DD3

RET

TABLE1:

;设置温度值十位数代码表

DB0B0H;3

DB99H;4

DB92H;5

DB82H;6

DB0F8H;7

DB80H;8

DB90H;9

DB0C0H;0

DB0F9H;1

DB0A4H;2

TABLE2:

;设置温度值个位数代码表

DB92H;5

DB82H;6

DB0F8H;7

DB80H;8

DB90H;9

DB0C0H;0

DB0F9H;1

DB0A4H;2

DB0B0H;3

DB99H;4

TABLE3:

;数码管显示代码表

DB0C0H;0

DB0F9H;1

DB0A4H;2

DB0B0H;3

DB99H;4

DB92H;5

DB82H;6

DB0F8H;7

DB80H;8

DB90H;9

END

5电路仿真

5.1仿真软件

电路仿真中采用

Proteus仿真软件。

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

5.2仿真过程

建立仿真电路图,如下图所示:

图5.1水温控制设计仿真电路图

图5.2水温控制设计仿真电路图

 

图5.3水温控制设计仿真电路图

 

 

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总结

通过紧张有序的课程设计实践,不仅让我对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与模型机的硬件结构和怎么去设计微程序等过程有了进一步的了解,也让我觉得自己的动手能力有了很大的提高;自信心也增强了,在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这巩固和深化了自己的知识结构。

实现水温控制系统需要解决两个问题:

一是高精度的水温测量电路及其数据处理的实现,另一个是控制方法及其控制电路实现的研究。

采用PID控制,其优点是理论和技术都很成熟,再单片机上容易实现,可以达到较小的静态误差。

但必须仔细的调控参数,才能获得较好的结果。

实践也让我懂得了:

学校安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。

因此,我会认真地对待我的每一次实验。

参考文献

[1]李群芳.单片微型计算机与接口技术.电子工业出版社,2005.1

[2]何立民.MCS-51单片机应用系统设计.北京航空航天大学出版社,2000.3

[3]戴梅鄂.微型计算机技术及应用.清华大学出版社,2008.2

[4]李建忠.单片机原理及应用.西安电子科技出版社,2008.2

[5]沈美明.汇编语言程序设计.清华大学出版社,2008.10

[6]路而红.电子设计自动化应用技术.北京希望电子出版社,2000.1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1