1、水温控制系统设计03摘 要温度是日常生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。因此,智能化温度控制技术正被广泛地采用。水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,其中以PID控制法最为常见。单片机控制部分采用AT89C51单片机为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加
2、热来实现温度控制。然而,单纯的PID算法无法适应不同的温度环境,在某个特定场合运行性能非常良好的温度控制器,到了新环境往往无法很好胜任,甚至使系统变得不稳定,需要重新改变 PID 调节参数值以取得佳性能。关键词:单片机、水温控制、AT89C511 课题描述水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,其中以PID控制法最为常见。单片机控制部分采用AT89C51单片机为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。然而,单纯的PID算法无法适应不同的温度环境,在某个特定场合运行性能非常良好的温度控制器,到了新环境
3、往往无法很好胜任,甚至使系统变得不稳定,需要重新改变 PID 调节参数值以取得佳性能。本文首先用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。然后在模型参考自适应算法 MRAC基础上,用单片机实现了自适应控制,弥补了传统 PID控制结构在特定场合下性能下降的不足,设计了一套实用的温度测控系统,使它在不同时间常数下均可以达到技术指标。此外还有效减少了输出继电器的开关次数,适用于环境参数经常变化的小型水温控制系统。开发环境:微机windowsXP操作系统、DICE反汇编环境、Protues仿真系统、Keil环境2问题分析和任务定义2.1 问题分析实际上题目的任务就是要设计一个温
4、控系统,系统的功能是温度测量和控温在测量部分,要求测量4090C的温度范围,还规定了测量的精度需高于1C,测温的结果要求显示。在控制部分,要求系统能够将水温调节到给定的温度,并进行保温。题目并未规定温度调节的时间长短,但显然调节时间越短越好。题目没有具体给出具体加热的器具和方式,因此选手必须自行选择和制作加热装置,然后才能真正进行电路制作。在发挥部分,还要求提高温度系统的控制性能,缩短调节时间,提高控制精度,增加打印功能。2.2 水温控制系统总体框图 图2.1 总体设计3硬件电路设计水温控制硬件电路图,如图3.1所示:图3.1 水温控制硬件电路图4 程序设计4.1 程序流程图(1)主程序流程图
5、图4.1 水温控制主程序流程图(2)软件结构程序流程图图4.2 软件结构程序流程图4.2 程序代码;用于获取设置的温度值TEMP_GETSH EQU 10HTEMP_GETSL EQU 11H;用于在数码管上显示TEMP_SETHH EQU 12HTEMP_SETLL EQU 13H;用于存放实时温度值A_BIT EQU 14H ;个位B_BIT EQU 15H ;十位;按键输入引脚定义K1 EQU P2.0K2 EQU P2.1;控制状态引脚定义DS1820 EQU P3.7FLAG EQU 20H.1 ;DS18B20是否存在标记DQ EQU P3.7;=主程序= ORG 0000H JM
6、P 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为按键K
7、2次数记录;=数码管显示子程序=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 M
8、OV 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,R6DD1: MOV DPTR,#TABLE1 MOVC A,A+DPTR MOV TEMP_SETHH,A ;ACALL DEL
9、AY POP PSW POP ACC RETIEXT1: PUSH ACC PUSH PSW INC R7 MOV A,R7 CJNE A,#10,DD2 MOV R7,#00H MOV A,R7DD2: 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,#0FFHTEM
10、P1: 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 RETTEMP_GETSLL1: ;PUSH ACC MOV A,TEMP_SETLL ;获取设置温度值的个位数 MOV TEMP_GETSL,A MOV R0,#0FFHTEMP2: INC R0 MOV A,R0 MOV DPTR,#TABLE3 MOVC A,A+DPTR MOV R1,TEMP_GETSL CLR C SUBB A,R1 JNZ
11、TEMP2 MOV TEMP_GETSL,R0 ;POP ACC RET;=;=初始化及读取温度值子程序=RE_TEMP: SETB DQ ACALL RESET_1820 JB FLAG,ST RETST: 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
12、CLR DQ;主机发出延时537us的复位低脉冲 MOV R1,#3DLY: MOV R0,#107 DJNZ R0,$ DJNZ R1,DLY;然后拉高数据线 SETB DQ NOP NOP NOP;等待DS18B20回应 MOV R0,#25HT2: 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,#117T6: DJNZ R0,T6T7: SETB DQ RET;=;=
13、写入DS1820子程序=;写入DS1820WRITE_1820: MOV R2,#8 ;一共8位数据 CLR C ;C=0WR1: CLR DQ ;总线低位,开始写入 MOV R3,#7 DJNZ R3,$ ;保持16us以上 RRC A ;把字节DATA分成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 ;读取两个字节的数据
14、MOV R1,#29H ;低位存入TEMP_GETCL,高位存入TEMP_GETCHRE0: 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_DI
15、SPLAY: 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
16、: 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;=;=处理温度数据子程序=DATAES1: 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
17、A,R1 JZ DDAS3 RLC A JC DDAS4 MOV P2,#11011111B JMP DDAS5DDAS3: MOV P2,#10111111B JMP DDAS5DDAS4: MOV P2,#01111111BDDAS5: ACALL DELAY RET;=;=延时子程序=DELAY: ;延时3ms MOV R0,#25DD3: MOV R1,#100 DJNZ R1,$ DJNZ R0,DD3 RETTABLE1: ;设置温度值十位数代码表 DB 0B0H ;3 DB 99H ;4 DB 92H ;5 DB 82H ;6 DB 0F8H ;7 DB 80H ;8 DB 90
18、H ;9 DB 0C0H ;0 DB 0F9H ;1 DB 0A4H ;2TABLE2: ;设置温度值个位数代码表 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 ;4TABLE3: ;数码管显示代码表 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 END5电路仿真5.1 仿真软
19、件电路仿真中采用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)根据所设计电路图
20、连接电路: (3)编写代码,实现软件设计。(4)使用Kiel编译程序,产生相应的Hex文件。(5)将Hex文件装入DICE中,下载到AT89C51中,运行系统。6.3结果分析 通过按照设计的电路图连接电路,装载、编译并运行程序,可以实现通过温度的变化,系统给出相应的警示。7总结通过紧张有序的课程设计实践,不仅让我对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与模型机的硬件结构和怎么去设计微程序等过程有了进一步的了解, 也让我觉得自己的动手能力有了很大的提高;自信心也增强了,在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这巩固和深化了自己
21、的知识结构。实现水温控制系统需要解决两个问题:一是高精度的水温测量电路及其数据处理的实现,另一个是控制方法及其控制电路实现的研究。采用PID控制,其优点是理论和技术都很成熟,再单片机上容易实现,可以达到较小的静态误差。但必须仔细的调控参数,才能获得较好的结果。实践也让我懂得了:学校安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。因此,我会认真地对待我的每一次实验。参考文献1 李群芳.单片微型计算机与接口技术.电子工业出版社,2005.12 何立民. MCS-51单片机应用系统设计. 北京航空航天大学出版社,2000.33 戴梅鄂.微型计算机技术及应用.清华大学出版社,2008.2 4 李建忠单片机原理及应用西安电子科技出版社,2008.2 5 沈美明.汇编语言程序设计.清华大学出版社,2008.106 路而红. 电子设计自动化应用技术. 北京希望电子出版社,2000.1