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