智能水温控制系统.docx
《智能水温控制系统.docx》由会员分享,可在线阅读,更多相关《智能水温控制系统.docx(18页珍藏版)》请在冰点文库上搜索。
智能水温控制系统
智能水温控制系统
摘要:
为了实现水温控制系统的设计要求,通过对各个模块电路方案的比较和论证,最后确定了以STC89C52单片机为核心的硬件电路,选用DS18B20温度传感器测量水温。
该系统具有实时显示、温度测量、温度设定并能根据设定值对水的温度进行调节和控温的目的以及达到上限温度的报警功能,控制算法是基于数字PID算法,在设定温度发生突变时,可自动打印水温随时间变化的曲线。
关键词:
AT89C52单片机、PID算法、温度测量和控温
随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。
本设计论述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度自动控制系统。
该控制系统可以根据设定的温度,通过单片机控制继电器开启和关闭,从而控制水泥电阻的加热和停止。
硬件电路主要包括STC89C52单片机最小系统、稳压电路、DS18b20测温电路、键盘电路、锁存器SN74HC573、MT05011AR数码管显示电路、继电器电路,加热模块电路等。
系统程序模块主要包括主程序控制模块,温度处理子程序模块、按键处理程序模块、锁存器控制模块、数码管显示模块。
一、设计任务
设计并制作一个水温自动控制系统,控制对象为500ml净水,容器为搪瓷器皿。
水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变。
1)温度设定范围为20~70oC,最小区分度为1oC,标定温度≤1oC。
2)用十进制数码管显示水的实际温度。
3)采用适当的控制方法,当设定温度突变(比如:
由50oC提高到60oC)时,减小系统的调节时间和超调量。
4)温度控制的静态误差≤1oC(达到发挥部分的要求)
5)在设定温度发生突变时,自动打印水温随时间变化的曲线。
二、
整个系统分为以下几个部分:
温度采样部分、控制电路部分、加热装置以及串口通信部分。
2.1温度采样部分
采用温度传感器DS18B20,测温范围-55oC~+125oC,采用独特的单线接口方式,仅需一条口线即可实现微处理器与DS18B20的双向通讯,且在使用中不需要任何外围元件;可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出远端引入。
此器件具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求。
采用STC89C52单片机作为主控芯片。
STC89C52是一个超低功耗,高性能的51内核的CMOS8位单片机,片内含8KB空间的可反复擦写1000次的Flash只读存储器,具有512bytes的随机存取数据存储器(RAM),32个I/O口,两个16位可编程定时计数器。
且该系列的51单片机支持串口下载和串口调试。
所以我们选择了方案2。
2.3键盘显示部分
控制与显示电路是反映电路性能、外观的最直观部分,所以此部分电路设计的好坏直接影响到电路的好坏。
设计的系统中,共三个按键:
菜单键和温度设定的“+”、“-”控制键。
对菜单键按键一次,进入温度设定状态,通过连按“+”、“-”控制键来设定温度,数码管显示设定的温度值;对菜单键连按键两次,进入温度测量状态,数码管显示当前的实际水温。
2.4加热装置的选择
采用螺旋加热管。
可将螺旋加热管固定到容器内部,通电加热时能使水在容器内形成对流,加热功率相对较高,加热较均匀,使得测量误差较小。
对温度控制的精度要求较高
2.5串口通信部分
UART通信,是异步串口通信,在通信时只需要数据线,只需要知道发送数据的波特率,编程时设置好位长度即可。
UART通讯编程简单,通讯速度远比IIC快,可以直接使用RS485延伸通讯距离达到1km,通讯速度很容易做高。
所以本实验中,采用UART通信将数据传输给电脑。
2.6软件算法的选择
采用经典PID控制算法和根据实验数据分区间控制的算法,对于温度系统来说,被控对象没有精确的数学模型。
用螺旋加热器加热使得水温具有热惯性,采用补氧设备往水里加入空气,使水的上下温差变得非常小,故检测的实时数据基本能完全体现500ml水的实际温度,所以经典PID控制算法中的P能满足设计要求,但必须根据实验数据进行调整。
三、系统总体方案设计
此方案采用STC89C52单片机系统实现,键盘输入温度设定值,用数字温度传感器DS18B20采集准确的温度,数码管显示设定温度值和水温实测值,加热装置采用固态继电器控制,当水温超过设定值时蜂鸣器报警。
图1温度控制系统框图
四、硬件电路设计
4.1温度采集电路
一种电路是采用单线数字温度传感器DS18B20,可直接输出数字量,单线器件和单片机的接口只需一根信号线,所以本设计的硬件电路十分简单,容易实现。
使用读取温度暂存寄存器的方法能达到0.1oC以上的精度。
18B20连接电路图如图2所示
图2温度采集电路
4.2加热装置模块
由于本系统要控制加热管,功率较大,因此要借助功率电路。
使用继电器可以很容易的通过较高的电压和电流,在正常条件下,工作十分可靠。
使用电磁继电器电路的实现十分简单,而且还可以实现较为精确的控制,是比较好的一种方式。
DS18B20测温芯片传送温度数据单片机的I/O口P2.5。
对加热管通断的控制采用SSR固态继电器,SSR是半导体继电器,所以较小的驱动功率即可使SSR工作。
它的使用非常简单,且响应时间短,对系统干扰小。
只要在控制台端加上一个TTL、CMOS电平或光耦,即可实现对继电器的开关。
其电路图如下所示。
图3图4
4.3按键控制和显示模块
P2.0接KEY1,P2.1接KEY2,P2.2接KEY3。
KEY1:
菜单键,共有两种模式:
温度重新设置、当前所测温度。
KEY2:
温度设置“+”。
KEY3:
温度设置“-”。
图5
系统上电后,数码管全部显示为当前所测温度值,根据按KEY1次数,若按键一次,进入温度设定状态,通过连按“+”、“-”控制键来设定温度,数码管显示设定的温度值;若连按两次,进入温度测量状态,数码管显示当前的实际水温。
由于温度变化范围是40~70oC,所以选用两个数码管显示温度。
数码管采用共阳极,经过1KΩ的电阻限流后与单片机连接,由单片机I/O口P3对数码管进行位选。
4.4蜂鸣报警电路
蜂鸣器通过一个三极管来驱动,这里选用PNP型三极管,电路图如下
图6
4.5通信模块
系统设计要求控制系统能同PC联机通信,以利用PC图形处理能力打印显示温度曲线,故使用了STC89C52的异步串行端口UART实现与PC通信。
由于STC89C52串行口电平和PC不一致,(STC89C52的I/O为TTL电平,PC串行口为RS232电平),使用一片MAX232为进行电平转换驱动。
通信速率为9600波特率。
数据5秒传输一次。
电路图如图7所示,MAX232的RXD1和TXD1分别接STC89C52的P3.1(TXD)和P3.0(RXD)。
图7串行通信电路
UART模块提供了一个全双工标准通信口,用于完成STC89C52与外设之间的串行通信。
根据RS-232的标准,STC89C52单片机也是按照字节传输数据的。
UART还可以带缓冲接收数据,即可以在读取缓存器数据之前接收新的数据。
但是,如果新的数据被接收到缓存器之前一直未从中读取,先前的数据会发生数据丢失。
SBUF用于接收和发送数据的缓存,向该单元写入数据,将发送的数据送入缓存器;读该单元取数据,可以从缓存器读出接收到的单字节数据。
UART模块的接收管脚Rx和发送管脚Tx分别与P3.1和P3.0共用。
五、系统软件设计
任何一个系统的软件设计都离不开硬件电路的连接,本课题硬件设计的高度模块化决定了软件设计的模块化。
本程序结构包括:
主控程序模块、键盘扫描及处理子程序、LED显示子程序、采样数据处理子程序、PID算法子程序、串口通信并打印曲线图等子程序几个部分。
结构框图如图8。
主控程序模块在整个结构中充当管理者,管理所有子程序的调用,就相当于个人计算机的操作系统。
它主要负责初始化各个I/O口,等待键盘事件的发生,并作出相应的处理。
并在适当的时候调用数据采样程序,并将采样到的数据与键盘设定值比较。
再通过PID计算后用以控制继电器的开断,从而控制加热管的输出功率,来达到水温的调整,并将实测的水温数据上传给电脑,利用PC图形处理能力打印显示温度曲线。
图8程序结构图
程序流程图及部分程序
5.1主程序
程序按照模块化设计,所有功能都可通过调用子程序完成,主程序较简单,流程图如图9所示。
/***********************************
本设计系统是18b20温度报警系统数码管显示,可设置温度上限高温报警和下限低温报警,报警温度可精确到1度,并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面,人性化的按键设置,按键还具有连加、减功能。
**********************************/
voidmain()
{
UART_init();
time_init();//初始化定时器0
read_eepom();
if(a_a==0xff)
}
从主程序中可以看出,在进行一系列程序调用之前对系统进行初始化,然后进入while循环,重复以下步骤:
执行键盘程序,对键值进行处理。
进而调用加热函数,用PID算法,来控制继电器对加热器的关断,实现温度控制。
同时执行数码管显示程序,实现温度的实时显示。
当设定温度与实际温度相差较大时,调用打印函数,与电脑进行串口通信,利用PC机图形处理能力打印显示温度曲线。
5.2系统初始化
系统的初始化主要包括I/O口的初始化,键盘初始化,定时、中断初始化,串口初始化等等。
以下列出部分初始化程序
////////////////////////////串口初始化////////////////////////////////////////////////
5.3键盘程序
1)由于机械触点有弹性,在按下或弹起按键时会出现抖动,从最初按下到接触稳定要经过数毫秒的弹跳时间,如图所示。
为了保证探险键识别的准确性,必须消除抖动。
消抖处理有硬件和软件两种方法:
硬件消抖是利用加支抖动电路滤避免产生抖动信号;软件消抖是利用数字滤波技术来消除抖动。
我们采用软件的方法,利用主程序循环扫描,主程序每循环一次扫描到的键值相同时,则说明是某键按下。
2)键值处理
/****************按键处理数码管显示函数***************/
////////////////////////设置高低阈值///////////////////////
5.5PID算法
由于单片机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,因此式
(1)中的积分和微分项不能直接准确计算,只能用数值计算的方法逼近。
在采样时刻t=iT(T为采样周期)。
式
(1)所示的PID调节规律可通过数值公式
(2)近似计算。
由式
(2)可以得到:
由
(2)-(3)可得增量式算法公式:
/********************************************************************
PID计算部分
********************************************************************/
5.6继电器控制
继电器是和STC89C52单片机的P2.5口相连的,它的开断完全取决于P2.5口的输出,即PID计算的结果。
当输出小于零说明设定值小于实际输出值,这是就要关闭加热管,同时关闭定时器B的计时。
根据设定温度与实际温度的差值改变加热的延时时间。
显示窗口:
六、数据测量与分析
6.1使用说明书
准备阶段:
1)搪瓷水杯中接500ml的水,将螺旋加热管、数字温度传感器固定在水杯中,继电器接220V交流电源,系统4.5V直流供电。
工作阶段:
2)系统默认温度为50oC,若不做任何操作,可自动将水加热到50oC,然后继电器断开,停止加热。
整个过程中,数码管实时显示水温。
3)共三个按键:
菜单键和温度设定的“+”、“-”控制键。
对菜单键按键一次,进入温度设定状态,通过连按“+”、“-”控制键来设定温度,数码管显示设定的温度值;若15秒内没有按键“+”或“-”,数码管自动显示当前实际水温,否则显示设定温度值。
若对菜单键连按键两次,进入温度测量状态,数码管显示当前的实际水温。
结束阶段:
4)先断开继电器电源,再断开系统电源,将温度传感器和加热管取出。
将实验设备整理好。
6.2仪器设备与测试方法
仪器设备:
PC机、数字万用表、精密温度计(量程是0℃-100℃,分度值是1/5℃),
1)动态温度测量
测量方式:
将数据线接入控制仪,将容器中装入500ml室温的水,设定控温温度。
记录调节时间、超调温度、稳态温度波动幅度等。
测量仪器:
精密温度计(量程是0℃-100℃,分度值是1/5℃),DS18B20,秒表,PC机。
测量结果:
如下表所示
设定温度(℃)
50
55
60
65
70
超调量(℃)
1
1
2
3
3
变化范围(℃)
50~50
54~55
59~60
64~66
69~72
根据测量结果,控制的最大动态误差≤±2℃,系统达到稳态的时间≤5min。
2)静态温度测量
测量方式:
断开电源,往容器里加入500ml一定温度的水,连接好装置。
保持环境温度和其测量条件不变,接通电源,任意设置几组目标温度,利用精密温度计测量水温,与数码管显示的水温进行比较。
测量仪器:
精密温度计(量程是0℃-100℃,分度值是1/5℃),DS18B20,秒表,PC机。
测量结果:
如下表所示
1目标温度55℃
时间t(min)
0
30
60
90
120
150
180
测量温度(℃)
55
55
54
54
55
55
55
误差(℃)
0
0
1
1
0
0
0
2目标温度70℃
时间t(s)
0
30
60
90
120
150
180
测量温度(℃)
70
69
71
72
71
71
70
误差(℃)
0
1
1
2
1
1
0
误差分析:
温度计和DS18B20反应的灵敏度不同,且测量的是不同位置的水温。
此误差均在±1℃以内,且没有规律性,所以不再软件补偿温度值。
系统测量的静态误差≤±1℃,系统达到稳态的时间为5min。
6.3测试结果分析
由以上测量可见,系统性能基本上达到了所要求的指标。
静态测温的精度主要由DS18B20决定。
DS18B20的精度比较高,这里采取了读取温度寄存器办法,本系统中温度最小区分度选择1oC,比较符合系统要求。
在控温指标中,影响系统性能的因素非常多。
最关键的是加热系统本身的物理性质及控制算法。
由于温度传感器难免会有迟滞,螺旋加热器本身的延迟,水对流传热等因素也会造成测温的延时,这些都会直接影响系统的控制性能。
控制算法方面,需反复试验比较,在上升时间和超调量之间作权衡,选出较好的PID系数。
七、总结
此设计是水温控制系统,首先是方案的选择。
网上相关的资料很多,但不是每个都适合,这就需要甄选。
最后定下来的方案都是经过综合各种资料而成的。
接下来是制作单片机最小系统,由于以前的实验有过经验,因此在复习了相关知识之后,就很容易上手了,基本上没遇到什么困难。
但需要注意的是元器件的排版,要为以后添加的器件留下空间,最后可适当考虑美观的问题。
体会就是,制作板子的时候一定要统筹安排。
电路焊好后,接上电源,通过数据线连接电脑下载编好的程序,进行调试。
再接下来是添加单元电路,并进行调试。
调试过程中,遇到不少问题,主要是经验不足,经过不断的查找资料,修改调试,问题基本上得到了解决。
体会就是,系统要有良好的控制效果,其前端采集温度信号并放大需要足够精确,其次系统的构成要简单实用,实时监控系统状态参数,并且运用多种算法使得数据更为接近真实值。
此次系统设计中遇到的难题有1.参量的设定,由于加热管的加热惯性,会导致温度加热过快超过设定温度值。
对于本系统来说参数设定只能使用经验凑试。
调试的时候一定要耐心,细心。
2.串口通信部分的程序设计,由于第一次接触这方面的内容,串口通信过程中出现了各种问题,经过不断的尝试和参考相关资料,最终基本上达到了题目要求中的发挥部分要求。
团队的协同合作是相当重要的,有时候1+1>2的作用。
总的来说通过这次设计实验,学到了很多东西,无论是动手能力,分析问题的能力都得到了提高,重要的是建立了对于电子设计信心,增强了对于电子设计兴趣。
最大的体会还是理论运用到实践还是有很大差距,理论学得再好到了实际运用的时候还是会出现很多问题,这些问题通过多实践积累经验可以得到解决。
总之本次系统设计让我们收获颇丰。
八、参考文献
1.《可编程序控制器模拟量及PID算法应用案例》,曹辉编著,北京:
高等教育出版社,2008
2.《2011版全国大学生电子设计竞赛硬件电路设计精解》,陈永真等著,北京:
电子工业出版社,2011
3.《全国大学生电子设计竞赛——系统设计》,黄智伟编著,北京:
北京航空航天大学出版社,2006.12
4.《基于VC++6.0的数据可视化串口通信》叶艳艳,樊峰,陈西曲,武汉工业学院学报,2012.3(31)
5.《模拟电子技术基础》,童诗白,华成英著,北京:
高等教育出版社,2000.
6.《数字电子技术基础》,阎石著,北京:
高等教育出版社,2005.
九、电路图附录