智能水温控制系统摘要:为了实现水温控制系统的设计要求,通过对各个模块电路方案的比较和论证,最后确定了以STC89C52单片机为核心的硬件电路,选用DS18B20温度传感器测量水温。
该系统具有实时显示、温度测量、温度设定并能根据设定值对水的温度进行调节和控温的目的以及达到上限温度的报警功能,控制算法是基于数字PID算法,在设定温度发生突变时,可自动打印水温随时间变化的曲线。
关键词:AT89C52单片机、PID算法、温度测量和控温随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。
本设计论述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度自动控制系统。
该控制系统可以根据设定的温度,通过单片机控制继电器开启和关闭,从而控制水泥电阻的加热和停止。
硬件电路主要包括STC89C52单片机最小系统、稳压电路、DS18b20测温电路、键盘电路、锁存器SN74HC573、MT05011AR数码管显示电路、继电器电路,加热模块电路等。
系统程序模块主要包括主程序控制模块,温度处理子程序模块、按键处理程序模块、锁存器控制模块、数码管显示模块。
一、设计任务设计并制作一个水温自动控制系统,控制对象为500ml净水,容器为搪瓷器皿。
水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变。
1)温度设定范围为20~70o C,最小区分度为1o C,标定温度≤1o C。
2)用十进制数码管显示水的实际温度。
3)采用适当的控制方法,当设定温度突变(比如:由50o C提高到60o C)时,减小系统的调节时间和超调量。
4)温度控制的静态误差≤1o C(达到发挥部分的要求)5)在设定温度发生突变时,自动打印水温随时间变化的曲线。
二、整个系统分为以下几个部分:温度采样部分、控制电路部分、加热装置以及串口通信部分。
2.1温度采样部分采用温度传感器DS18B20,测温范围-55o C ~ +125o C,采用独特的单线接口方式,仅需一条口线即可实现微处理器与DS18B20的双向通讯,且在使用中不需要任何外围元件;可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出远端引入。
此器件具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求。
采用STC89C52单片机作为主控芯片。
STC89C52是一个超低功耗,高性能的51内核的CMOS 8位单片机,片内含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.1o C以上的精度。
18B20连接电路图如图2所示图2 温度采集电路4.2加热装置模块由于本系统要控制加热管,功率较大,因此要借助功率电路。
使用继电器可以很容易的通过较高的电压和电流,在正常条件下,工作十分可靠。
使用电磁继电器电路的实现十分简单,而且还可以实现较为精确的控制,是比较好的一种方式。
DS18B20测温芯片传送温度数据单片机的I/O口P2.5。
对加热管通断的控制采用SSR固态继电器,SSR是半导体继电器,所以较小的驱动功率即可使SSR工作。
它的使用非常简单,且响应时间短,对系统干扰小。
只要在控制台端加上一个TTL、CMOS电平或光耦,即可实现对继电器的开关。
其电路图如下所示。
图3 图44.3按键控制和显示模块图5系统上电后,数码管全部显示为当前所测温度值,根据按KEY1次数,若按键一次,进入温度设定状态,通过连按“+”、“-”控制键来设定温度,数码管显示设定的温度值;若连按两次,进入温度测量状态,数码管显示当前的实际水温。
由于温度变化范围是40~70o C ,所以选用两个数码管显示温度。
数码管采用共阳极,经过1K Ω的电阻限流后与单片机连接,由单片机I/O 口P3对数码管进行位选。
4.4蜂鸣报警电路蜂鸣器通过一个三极管来驱动,这里选用PNP 型三极管,电路图如下图64.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秒后自动退出设置界面,人性化的按键设置,按键还具有连加、减功能。
**********************************/void main(){UART_init();time_init(); //初始化定时器0read_eepom();if(a_a == 0xff)} 从主程序中可以看出,在进行一系列程序调用之前对系统进行初始化,然后进入while 循环,重复以下步骤:执行键盘程序,对键值进行处理。
进而调用加热函数,用PID 算法,来控制继电器对加热器的关断,实现温度控制。
同时执行数码管显示程序,实现温度的实时显示。
当设定温度与实际温度相差较大时,调用打印函数,与电脑进行串口通信,利用PC 机图形处理能力打印显示温度曲线。
5.2系统初始化系统的初始化主要包括I/O 口的初始化,键盘初始化,定时、中断初始化,串口初始化等等。
以下列出部分初始化程序////////////////////////////串口初始化////////////////////////////////////////////////5.3键盘程序1)由于机械触点有弹性,在按下或弹起按键时会出现抖动,从最初按下到接触稳定要经过数毫秒的弹跳时间,如图所示。
为了保证探险键识别的准确性,必须消除抖动。
消抖处理有硬件和软件两种方法:硬件消抖是利用加支抖动电路滤避免产生抖动信号;软件消抖是利用数字滤波技术来消除抖动。
我们采用软件的方法,利用主程序循环扫描,主程序每循环一次扫描到的键值相同时,则说明是某键按下。
2)键值处理/****************按键处理数码管显示函数***************/////////////////////////设置高低阈值///////////////////////5.5 PID 算法由于单片机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,因此式(1)中的积分和微分项不能直接准确计算,只能用数值计算的方法逼近。
在采样时刻t=iT(T 为采样周期)。