基于单片机的淋浴水温控制系统的设计

时间:2022-09-28 04:48:41

基于单片机的淋浴水温控制系统的设计

摘要:本文详细介绍了淋浴水温控制系统的设计过程,涉及系统结构设计、各个主要硬件部分的设计,并且对程序进行模块化设计,提高了系统开发的速度。在此基础上,详细介绍了带死区的PID算法控制程序实现,通过软件实现对水温的控制,使用继电器执行控制装置。

Abstract: This article introduced the water temperature control system design process of a shower,involving the system design,major hardware parts of the design,modular design procedures improve the system development speed. On this basis,detailed information with the death of the pid algorithms to control program achieved through software for the implementation of the control device used to relay are introduced in detail.

关键词:单片机;继电器;带死区的PID算法控制;DS18B20

Key word: MCU;relay;the pid algorithm control;DS18B20

中图分类号:TP2 文献标识码:A文章编号:1006-4311(2010)15-0178-02

0引言

随着嵌入式系统开发技术的快速发展及其在各个领域的广泛应用,人们对电子产品的小型化和智能化要求越来越高,单片机以其体积小、价格低、可靠性高、适用范围广以及本身的指令系统等诸多优势,在各个领域得到了广泛的应用。

1系统设计方案

本次设计的淋浴水温控制系统硬件电路主要包括温度传感器、单片机、按键与显示电路、无水检测、加热装置、进水控制、溢流控制、工作指示及报警电路等部分组成。采用带死区的PID控制算法,它具有控制精度高、能够克服容量滞后的特点,可以实现通过按键设定需要的淋浴水温,数码实时显示当前温度和设定温度;当水温到达设定值的时候自动报警,并有指示灯显示;并且当水温超过设定值时,自动控制进水,保持温度的恒定,如果没有凉水或者水满时自动切断电源,如图1所示。

2系统的硬件设计

2.1 单片机的选择

单片机是整个设计方案的核心,控制了温度的采集、显示和处理以及温度超出设定值时电机启动。综合考虑性能和成本方面的因素,本次设计选用了ATMEL公司的AT89C51单片机作为主控芯片。

AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。

AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

在本次设计中,用AT89C51的P0口作为PID算法控制信号输出口,P2口用作数码管显示按键,P3口完成温度显示数据的传送。

2.2 温度采集电路

温度传感器是整个控制系统控制所需的重要部件,它的特性直接影响系统的精度。本次设计选用的数字式温度传感器DS18B20是由DALLAS半导体公司生产,具有更小的封装方式,更宽的电压适用范围,接口方便,传输距离远等特点;测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C,可编程为9~12位A/D转换精度,12位时测温分辨率可达0.0625℃;其工作电源既可在远端引入,也可采用寄生电源方式产生;采集的温度数据直接以“一线总线”的数字方式传输至单片机,占用微处理器的端口较少,可节省大量的引线和逻辑电路,可以显著地提高系统的抗干扰性,非常适合于恶劣环境的现场温度测量。

由于DS18B20采用一根数据线实现数据的双向传输,而单片机AT89C51并不支持单总线传输协议,因此,必须采用程序设计模拟单总线协议确保各位数据传输的正确性和完整性,完成对DS18B20芯片的访问。每一次命令和数据的传输都是由主机启动写时序开始,如果需要DS18B20返回数据,在进行写命令后,主机需启动读时序完成数据的接收,其硬件连接图2所示。

2.3 按键与显示电路

按键电路用来人工设定温度,而数码显示可以显示当前的温度值以及设定的温度值。当没有按键按下时,10秒后返回当前实际温度,防止加热器在加热过程中被算坏。同时,为了防止按键抖动,保证按键识别的准确性,本次设计采用单片机程序实现数字滤波技术,利用主程序循环扫描,每循环一次扫描到的键值相同时,则说明按键被按下。

显示部分采用6个数码管来完成,当前温度和设定的温度值采用十位、个位以及小数点后一位组成,所显示的数据由单片机直接以BCD码并行输出至数码管。

2.4 输出驱动电路

由于需要采用单片机AT89C51控制大功率的负载工作,需要经过单片机的接口控制驱动。单片机输出的控制信号为占空比可变的脉冲信号控制继电器和可控硅的导通时间。本次设计采用了两个三极管来驱动继电器,一方面用于驱动加热装置,另一方面用于进冷水装置。其中加热装置选用小功率的电热棒,既可以达到加热的目的,有比较容易实现对温度的控制。而当水的温度过高时,驱动进冷水装置工作,打开分流阀,注入冷水,实现动态温度变化,实时监控温度。同时为了防止加入的水量过多而超出淋浴容器,增加了溢流控制装置,达到对容量中水量的控制,其中继电器选用超小型、低功耗、触电负载为2A,120VAC的JRC-21F的继电器。

2.5 报警电路

本次设计采用三极管驱动的蜂鸣报警器。当单片机通过温度对比,判断到当前温度超过设定温度时,即接通中断,输出电平发生变化,导致蜂鸣,同时启动输出驱动电路。

2.6 水位检测

在本次设计中,无水检测和溢流控制装置分别在容器的底部和顶部安装金属传感片,当水位低至金属片位置以下时,电平发生跳变,产生数字脉冲信号传输至单片机,供单片机判断,切断电源;同理,当水位上升至金属片位置时,电平发生跳变,接通单片机的控制,停止加热并切断进水口。

3系统的软件设计

当完成系统的硬件设计后,为了调试方便,并且能够并行调试,采用了模块化设计方式。主程序调用了6个子程序,分别是LCD 显示程序、按键扫描及处理程序、温度采集程序、温度越界判决程序、DS18B20读写程序和无水检测控制。LCD 显示程序,用于温度等数据的实时显示;按键扫描及处理程序,实现按键识别、按键输入及相关处理;温度采集程序负责把DS18B20所采集的现场温度读入到指定的数组中;温度越界判决程序,对现场温度与设定的温度上下限进行比较,若温度越界,并且当温控开关处于开启状态时,启动加热器或进冷水工作;无水检测用于切断电源,保持现有温度。

3.1 主控程序

主控程序模块用于全局调用各个子模块,充当管理者角色。主要负责初始化各个I/O口、等待按键、并做出相应的处理。并且实时调用温度采集程序,将采集到的数据与按键设定值进行比较,再通过PID计算后控制继电器的通断,从而控制加热及进冷水装置,调节淋浴水的温度。

3.2 PID控制程序

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点。

PID控制为本次设计的重点,其实现程序如下所示。

voidPIDProcess(void)

{

uint32 idata Temp[3];//临时变量

uint32 idata PostSum;//正数和

uint32 idata NegSum; //负数和

Temp[0] = 0;

Temp[1] = 0;

Temp[2] = 0;

PostSum = 0;

NegSum = 0;

if( ADPool.Value_Uint16[UINADCH] > ADPool.Value_Uint16[UFADCH] )//给定大于反馈,则EK为正数

{

Temp[0] = ADPool.Value_Uint16[UINADCH] - ADPool.Value_Uint16[UFADCH]; //计算Ek[0]

if( Temp[0] > PID.B_Uint8 )

{

//数值移位

PID.Ek_Uint32[2] = PID.Ek_Uint32[1];

PID.Ek_Uint32[1] = PID.Ek_Uint32[0];

PID.Ek_Uint32[0] = Temp[0];

//符号移位

PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];

PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];

PID.EkFlag_Uint8[0] = 0; //当前EK为正数

Temp[0] = (uint32)PID.KP_Uint8 * PID.Ek_Uint32[0];// KP*EK0

Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[1];// KI*EK1

Temp[2] = (uint32)PID.KD_Uint8 * PID.Ek_Uint32[2];// KD*EK2

}

}

else //反馈大于给定

{

Temp[0] = ADPool.Value_Uint16[UFADCH] - ADPool.Value_Uint16[UINADCH]; //计算Ek[0]

if( Temp[0] > PID.B_Uint8 )

{

//数值移位

PID.Ek_Uint32[2] = PID.Ek_Uint32[1];

PID.Ek_Uint32[1] = PID.Ek_Uint32[0];

PID.Ek_Uint32[0] = Temp[0];

//符号移位

PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];

PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];

PID.EkFlag_Uint8[0] = 1; //当前EK为负数

Temp[0] = (uint32)PID.KP_Uint8 * PID.Ek_Uint32[0];// KP*EK0

Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[1];// KI*EK1

Temp[2] = (uint32)PID.KD_Uint8 * PID.Ek_Uint32[2];// KD*EK2

}

}

4结论

本文详细讲述了系统设计方案以及各个硬件部分设计,给出了PID详细程序设计,应用性极强,经过测试,完全可由人工在70.0℃~90。0℃之间设定,当超过预定温度时,电路会在所设温度0.5℃左右调整,完全合乎温度要求。

参考文献:

[1]赵娜,赵刚,于珍珠,等.基于51 单片机的温度测量系统[J].微计算机信息,2007,1-2:146-148.

[2]李俊婷,石文兰,高楠.参数自整定模糊PID在温度控制中的应用[J].无线电工程,2007(7):45-50.

[3]张德友,赵志英,涂时亮.单片机原理应用与实践[M].上海:复旦大学出版社,2003.

[4]曾光奇.模糊控制理论与工程应用[M].武汉:华中科技大学出版社,2006.

[5]刘文慰,葛锁良.AT89C2051在自适应模糊PID温度控制器中的应用[J].电子工程师,2004,30(1):20-23.

上一篇:北京林业大学学生性格与品牌偏好的关系研究 下一篇:重卷机组的工艺原理及其应用