当前位置:文档之家› 水温控制系统

水温控制系统

题号: E

武汉理工大学第四届电工电子创新设计大赛设计报告

题目:水温控制系统

参赛者:高玉涛

学院班级:信息工程0903

联系方式:189********

评分标准:

项目满分得分基本要求

总分

目录

1.设计要求 (3)

1.1设计要求 (3)

2.系统方案选择和论证 (3)

2.1各模块的方案选择及论证 (3)

2.2.最终方案选取 (6)

3.系统的硬件设计 (6)

3.1 温度采集模块设计 (8)

3.2显示、设置模块设计 (9)

3.3串口输出、温度调节模块设计 (9)

4.系统的软件设计 (9)

4.1 主函数程序设计 (9)

4.2 DS18B20取数子函数设计 (10)

4.3显示子函数设计 (10)

4.4 中断子函数设计 (10)

4.5 打印子函数设计 (11)

5.系统的测试 (12)

5.1 测定并显示静态温度仿真 (12)

5.2 温度调节仿真 (12)

5.3 串口输入温度值仿真 (13)

6.小结 (14)

参考文献

附录1 元件清单

附录2 电路图

附录3 程序清单

水温控制系统报告

摘要:该水温控制系统采用单片机STC89C52完成数字的分析、计算和控制。温度信号到数字信号的采集于转换有芯片DS18B20提供,其可以直接和单片机通信,电路简单,DS18B20在10~90摄氏度范围内,固定有测量分辨率为0.0625℃。水温的实时控制主要有单片机控制继电器,继电器控制电热丝或者电风扇,从而在温度改变时,能够升高或者降低水温。

为了减小系统的超调时间,可以采用多点加热或者散热的方式,这样子可以大大减小系统调节时间。另一方面,为了方便观察调解过程中水温的变化,用单片机的串口通信,将水温信号实时的传输出来,交给打印机,绘出温度随时间变化的曲线。

关键字:STC89C52 DS18B20 水温控制

1.设计要求

1.1基本要求

(1)温度设定范围为10~90℃,最小区分度为0.5℃,标定温度≤1℃。 (2)环境温度降低时(例如用电风扇降温)温度控制的静态误差≤1℃。 (3)能显示水的实际温度。

1.1发挥部分

(1)采用适当的控制方法,当设定温度突变(由40℃提高到60℃)时,减小系统的调节时间和超调量。

(2)温度控制的静态误差≤0.2℃。

(3)在设定温度发生突变(由40℃提高到60℃)时,自动打印或用LCD 等显示设备显示水温随时间变化的曲线。

2.系统方案的选择和论证

根据要求可以将水温控制系统分为温度测量模块、显示模块、设置模块、控制模块、温度调节模块。系统框图如图2.1。为了实现设计的目的,我们分别对不同的模块做了如下的论证。

图2.1 系统框图 2.1各模块的方案选择及论证

2.1.1控制模块

控制模块

温度测量

设置输入

显示模块

温度调节

作为该系统的核心部分,并结合设计的要求,完成输入输出信号的处理,我选择了如下的方案:

1)采用模拟电路和数字电路搭建控制单元,这种方法虽然可行,并且依靠我们模数电的知识完全可以完成这个功能,但是设计相对繁琐,而且使用的元器件多,相对耗能也多。这种方法并不可取。

2)利用EDA来设计专用电路,利用VHDL语言来描述我们需要的电路特点,并在FPGA中烧制。这种方法可以实现各种复杂的逻辑功能,并且可以将很多种电路集成到一个很小的芯片上,集成度高,减小体积,提高了稳定性。但是这种设计的成本过高,耗时耗力,对于温度信号的处理有富余。所以不可取。

3)利用单片机,如:STC89C52,单片机不仅集成了处理单元,还有中断系统、计数器、I/O端口、RAM等。运算能力强,软件编程灵活性大,而且是和扩展新功能,因此很适合作为小系统的中心控制单元。此次设计采用这种方案,不仅很方便的实现设计的要求,而且成本低,设计效率高。因此选用次中方案。

2.1.2温度测量模块

温度测量是主要完成将水温转化成数字信号的功能。可以直接用温度传感器、A/D芯片得到水温的数字信号,也可以直接用水温传感器直接输出数字信号。下面就这两种方式作比较。

1)采用热电阻温度传感器作为感温元件,将水温信号变成模拟信号,再用A/D 芯片将模拟信号变成数字信号,采用这种方式的容易实现,编程简单,成本相对低,但是模拟信号传输过程中易受干扰,而且会消耗相对多的I/O端口。

2)采用数字式温度传感器DS18B20,它直接输出数字量,可以直接和单片机通信,电路相对简单,如图2.2所示。而且它的精度可以达到0.0625,完全满足要求,更重要的是,这种测温方便多个测量点的级联。

上面两种方式比较第二种方式更优,因此选用第二种方案。

图2.2 DS18B20测量电路

2.1.3 设置模块

设置模块主要功能就是向控制单元输入设置的数字。可以直接用键盘或者开关来实现,由于此系统比较小,而且输入的数值少,变化范围也小,采用开关更佳,这样子需要较少的I/O端口就可以实现温度数值的设定。而且如果采用中断方式,就可以简化程序,很容易实现温度的设定。相对于开关,使用4X4键盘作为输入就显得麻烦,而且多余。因此采用开关出发中断的方式作为设置模块的输入。

2.1.4 显示模块

显示模块的主要功能就是现实实时温度值和设定的温度值。小系统中一般采用7段数码管或者LCD液晶显示屏作为输出,由于设计要求现实最多的就只有三位数字,信息量少,用七段数码管完全可以满足设计的要求。并且这样子编程容易,占用的资源相对较少。

2.1.5温度调节模块

这个模块设计搭配温度的降低和升高,因此采用电扇和电热丝。这两种器件常见,容易实现,加热效率相对较高,而且可以通过多点加热来提高温度调节的超调量,但是使用电热丝需要较高的电压,而单片机可输出电压最高为5V,不能满足要求,因此可以用单片机来驱动继电器,用继电器控制加热丝的通断。这样子不仅安全还能获得很高的加热功率。

如果采用单片机驱动硅片加热的方式,虽然简单,但是加热功率低。

2.2最终方案选取

通过以上的论证,现确定方案如下:

1)中心控制模块采用STC89C52作为控制器,完成温度信号的采集、LED显示,温度的设定,加\散热器的控制,以及通过串口通信连接打印机,输出温度控制过程中温度随时间的变化曲线。

2)温度测量模块采用DS18B20芯片,不仅能直接获得温度的数字量,还能够获得较高的分辨率,完全可以满足设计要求中静态误差小于0.2的要求。更重要的是,可以用多个芯片级联,用单片机端口连接DS18B20的接地端,作为芯片的选择信号。可以对通过分析多点分度获得更加精确的温度值。

3)加热散热部分采用电热丝和电扇,为了更好控制功率,采用继电器控制方式。电路简答使用,而且温度变化满足设计要求。

4)设置模块采用开关出发中断的方式,简单易行。显示采用三位七段数码管,实时显示温度值。

另外,对单片机的编程采用汇编的方式,主要因为编程中最关键的部分是获得DS18B20中温度值,与硬件接触密切,汇编语言更加方便。

3.硬件系统的设计

3.1 温度采集部分设计

设计采用半导体温度传感器作为敏感元件,我们采用的DS18B20是总线可编程的传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机通信,大大简化了电路的复杂度。DS18B20测温电路如图3.1所示。

1)DS18B20测温的实现

其测温的实现是基于单片机编程的基础之上。当DS18B20受到温度转化信号之后开始启动转换。转化后的温度以十六进制带符号的二进制补码形式存放在高

速暂存存储器的0,1字节。单片机可以通过单线接口读到该数据,读取时地位在前高位在后。温度最小精度为0.0625,温度存放的格式如表3.1。

图3.1 DS18B20测温电路

表3.1 DS18B20中温度值存放格式

温度值计算公式为:

TEMP=M2*2^6+M1*2^5+.....+L7*2^3+....+L0*2^(-4)

2)DS18B20计算过程中的命令

DS18B20工作首先需要初始化判断是否需要开始温度转化,需要将DQ段电平拉低480us到960us,然后通过获得的信号判断是否连接。然后对DS18B20进行写入操作,用的命令字如下:

温度转换 44H 启动DS18B20进行温度转换

读暂存器 BEH 读暂存器9位二进制数字

写暂存器 4EH 将数据写入暂存器的TH、TL字节

复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中

重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节

读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

跳过ROM 0CCH 跳过判断ROM阶段

通过以上命令可以实现DS18B20的初始化,并且可以写入读出数据。从其中获得数据主要是十六进制的,显示则需要用到换成十进制或者二进制。

3.2显示、设置模块的设计电路

显示部分主要用P0、P1端口作为数据输出端,P2中的部分端口作为位选端,设置模块则主要在两个中断接口P3.2 、P3.3连接开关,开关闭合就会有一个下降沿脉冲信号。连接电路如图3.2所示。

3.3 串口输出和调节模块

为了打印测量的实际值,将DS18B20中的获得数据从TXD端口输出,并用USB接口,或者RS232C与打印机相连。

调节模块主要用三极管构成开关电路,控制继电器的通断,然后利用继电器控制电热丝,或者电风扇工作来调节水温。设计实际电路如图3.2所示。为了仿真便于观察,在控制端连接上二极管作为观察信号。

图3.2 系统设计电路

4.软件系统的设计

软件主要采用汇编来进行设计。主要是为了方便调用DS18B20中数值。下面就软件的主程序及各个子程序,中断程序做一设计说明。

4.1 主函数设计

主函数主要要初始化程序、设定中断的开启、调用DS18B20取数显示函数,判断是否要启动加热或者降温,并调用打印函数。主函数的流程图如图4.1所示。

开始

初始化程序

开中断

调用DS18B20取数函数

调用显示函数

判断设定与实际值相等? Y N

设定值小于实际值? N

Y

启动电风扇降温启动电热器加热

输出实际温度值给打印机

图 4.1 主程序流图

4.2 DS18BB20取数函数的设计

对DS18B20的操作需要依靠它的工作原理,按照其工作过程要求进行程序设计。它工作一般过程为,初始化,调用ROM命令,调用RAM命令,取数据。程序设计了FLAG1作为DQ信号标志位,其子程序流图如图4.2所示。

开始

初始化

否 DS18B20存在?

ROM操作命令

RAM操作命令

读取数据

返回

图4.2 DS18BB20取数函数的程序流图

4.3 显示程序设计

显示程序包括实际温度值的显示和设定温度值的显示,为了节省接口采用动态显示的方法,为了显示可见,对显示程序进行了1000次循环,使得显示时间保持到1S,这个时间远远大于其他程序执行的时间,因此视觉上感觉不到显示数据在动。显示程序的程序流图如图4.3所示。七段数码管使用端口P2.0到P2.5作为位选,由于只需要显示0到100范围内的数字,因此可以把个位的小数点始终显示。

4.4中断程序设计

两个中断程序都是进入中断则设置位加1,十位只能够在1到8变化,个位可以到0到9变化。程序流图如图4.4所示。

开始

数据位和循环控制位装入初值

分别将每一位数字显示1Ms

否循环是否结束?

返回

图 4.3 显示子函数程序流图

开始

KEY加1

是否超过范围?

是否

返回初值0或者1

返回

图 4.4 中断子程序流图

4.5 打印子程序设计

此程序就是将测得温度值,用串口通信的方式发送出来,连接到打印机,可以直接以时间为横轴,做出温度变化图形。直接设计子程序如附录中程序清单。

5.系统测试与仿真

5.1 测量并显示静态温度

温度控制系统首先应该可以准确的测量温度,因此首先来验证系统是否可以在误差范围内显示设定的温度值。设定温度值分别为56.2℃、56.5℃,分别观察显示数值。观察四个显示值如下图5.1所示。

图5.1 实际值与测量值的仿真结果

观察可得温度区分范围最小可以达到0.4℃。基本满足设计要求。

5.2温度调节仿真

当温度相等时候,仿真图中的P3.6和P3.7都处于高电平,当设定值温度高的时候加热显示灯亮,当设定值小的时候降温指示灯亮。仿真结果如图5.2所示。

A. 设定和实际温度相等时候,指示灯不亮

B.实际温度值大,风扇指示灯亮

C.实际温度值小,电热丝指示灯亮

图5.2 A,B,C显示不同实际温度和不同设定温度时候的结果

5.3 串口输出温度值的仿真

用示波器观察串口输出的数据,每隔大约10s输出一个数据,将这个数据在坐标图上画出来,就可以显示实际温度的变化。示波器观察TXD端口输出波形如图5.3所示。

图5.3 TXD端口输出数据波形观察结果

从图中不难发现每隔一段时间都会有一个数据从TXD端口输出,并且可以看出这个数据的具体值。

6.小结

这个系统的设计不仅实现了基本功能,而且实现了发挥部分的部分要求。如果增加两个DS18B20求温度平均值并输出,可进一步减小误差。

系统设计优点在于以最佳方式实现各种基本功能,由于没有做出实物,仅用proteus仿真,并不能完全反应实际情况。

为了减少温度突变,系统的超调时间,在系统中多设置几个加热器和散热器,实现多点控制,这样子就很容易减小调节时间。

参考文献

[1] 高吉祥主编,电子技术基础实验与课程设计,电子工业出版社出版,2008年出版

[2] 谢自美主编,电子线路设计.测试.仿真,高等教育出版社,2009年

[3] 陈大钦主编,电子技术基础实验-电子电路实验、设计、仿真,高等教育出版社出版,2009年

[4] 康华光主编,电子技术基础(数字部分)第四版,高等教育出版社出版,1998年

[5] 电信技术编辑部主编,《电信技术》,2011年第10期

附录1 元件清单

元件名称数量备注

STC89C52 1

DS18B20 1

74LS245 2

二极管 2

三极管NPN 2

电容、电阻若干

RS232-C 1

七段数码管 5

继电器 2

电热丝 1 大于1KW 电风扇 1 大于100W

附录2 电路原理图

附录 3 程序清单

FLAG1 BIT F0 ;DS18B20存在标志位

DQ BIT P2^7

KEY EQU 24H

KEY1 EQU 25H

TEMPER_L EQU 29H

TEMPER_H EQU 28H

A_BIT EQU 36H

B_BIT EQU 35H

;************汇编程序起始*******

ORG 0000H

AJMP MAIN1

ORG 0003H

LJMP JT0

ORG 0013H

LJMP JT1

;**************主程序开始************

ORG 0100H

MAIN1: MOV 24H,#1

MAIN:MOV IE,#85H

SETB IT0 ;开中断

SETB IT1

LCALL GET ;从ds18b20中取数

LCALL CHANGE ;调用ds18b20显示函数MOV A,24H

MOV B,#10

MUL AB ;将设置数值转化为16进制ADD A,25H

CLR C

SUBB A,29H ;将设置数字和实际温度值比较大小

JZ GAO2 ;判断是否相等

JC GAO

CLR P3.7

SETB P3.6 ;启动加热器

AJMP GAO1

GAO:CLR P3.6

SETB P3.7 ;启动电扇

GAO1:LCALL PRINT ;串口输出打印的温度变化值

AJMP GAO3

GAO2: SETB P3.6

SETB P3.7

GAO3:AJMP MAIN ;**************获取DS18B20中数字********* GET:

LCALL INIT_18B20

LCALL RE_CONFIG

LCALL GET_TEMPER

RET

;**********DS18B20复位程序*****************

INIT_18B20: SETB DQ

NOP

CLR DQ

MOV R0,#0FBH

TSR1: DJNZ R0,TSR1 ;延时

SETB DQ

MOV R0,#25H

TSR2: JNB DQ ,TSR3

DJNZ R0,TSR2

TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在

CLR P2.6 ;二极管指示

AJMP TSR5

TSR4: CLR FLAG1

LJMP TSR7

TSR5: MOV R0,#06BH

TSR6: DJNZ R0,TSR6

TSR7:SETB DQ ;表明不存在

RET

;********************设定DS18B20暂存器设定值************** RE_CONFIG:

JB FLAG1,RE_CONFIG1

RET

RE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令

LCALL WRITE_18B20

MOV A,#4EH

LCALL WRITE_18B20 ;写暂存器命令

MOV A,#00H ;报警上限中写入00H

LCALL WRITE_18B20

MOV A,#00H ;报警下限中写入00H

LCALL WRITE_18B20

MOV A,#1FH ;选择九位温度分辨率

LCALL WRITE_18B20

RET

;*****************读转换后的温度值****************

GET_TEMPER:

SETB DQ

LCALL INIT_18B20

JB FLAG1,TSS2

RET ;若不存在则返回

TSS2: MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#44H ;发出温度转换命令

LCALL WRITE_18B20

LCALL DISPLAY ;延时

LCALL INIT_18B20

MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#0BEH ;发出读温度换命令

LCALL WRITE_18B20

LCALL READ2_18B20 ;读两个字节的温度

RET

;***************写ds18b20汇编程序************ WRITE_18B20:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$ ;延时

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;***********读18B20程序,读出两个字节的温度********* READ2_18B20:

MOV R4,#2 ;低位存在29 H,高位存在28H

相关主题
文本预览
相关文档 最新文档