恒温箱温度计算机控制系统设计报告.docx

上传人:b****5 文档编号:5389110 上传时间:2022-12-15 格式:DOCX 页数:29 大小:734.41KB
下载 相关 举报
恒温箱温度计算机控制系统设计报告.docx_第1页
第1页 / 共29页
恒温箱温度计算机控制系统设计报告.docx_第2页
第2页 / 共29页
恒温箱温度计算机控制系统设计报告.docx_第3页
第3页 / 共29页
恒温箱温度计算机控制系统设计报告.docx_第4页
第4页 / 共29页
恒温箱温度计算机控制系统设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

恒温箱温度计算机控制系统设计报告.docx

《恒温箱温度计算机控制系统设计报告.docx》由会员分享,可在线阅读,更多相关《恒温箱温度计算机控制系统设计报告.docx(29页珍藏版)》请在冰豆网上搜索。

恒温箱温度计算机控制系统设计报告.docx

恒温箱温度计算机控制系统设计报告

 

计算机控制系统设计报告

 

设计名称:

恒温箱温度计算机控制系统设计

姓名:

学号:

班级:

学院:

信息工程学院

任课教师:

 

基于单片机地恒温箱控制系统设计

摘要:

本设计是基于AT89S52单片机地恒温箱控制系统,系统分为硬件和软件两部分,其中硬件包括:

电源、温度传感器、显示、控制、晶闸管驱动和报警地设计;软件包括:

键盘管理程序设计、显示程序设计、PID控制程序设计和温度报警程序设计.编写程序结合硬件进行调试,能够实现设置和调节初始温度值,进行液晶显示,当加热到设定值后立刻报警.本设计从实际应用出发选取了体积小、精度相对高地数字式温度传感元件DS18B20作为温度采集器,单片机AT89S52为主控芯片,液晶作为显示输出,实现了对温度地实时测量与恒定控制.

关键词:

单片机、温度传感器、恒温、声光报警、PID.

引言:

温度控制是工业生产过程中经常遇到地过程控制,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻地作用,其温度地控制效果直接影响着产品地质量,因而设计一种较为理想地温度控制系统是非常有价值地.对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用地测温元件、测温方法以及对温度地控制方法也将不同;产品工艺不同、控制温度地精度不同、时效不同,则对数据采集地精度和采用地控制算法也不同.因而,对温度地测控方法多种多样.随着电子技术和微型计算机地迅速发展,微机测量和控制技术也得到了迅速地发展和广泛地应用.利用微机对温度进行测控地技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性.然而现有地温度传感元件大多为模拟器件(热电耦)体积大、应用复杂、而且不容易实现数字化等缺点,阻碍了应用领域地扩展.本设计从实际应用出发选取了体积小、精度相对高地数字式温度传感元件DS18B20作为温度采集器,单片机AT89S52作为主控芯片,数码管作为显示输出,实现了对温度地实时测量与恒定控制.

一、本课题设计要求

如下图所示,恒温箱采用木箱或纸箱(外形尺寸不大于30cm×30cm×30cm),内置白炽灯泡(功率不大于100W)用于加热.

 

(1)温度采集传感器采用热电阻或热电偶,或一体化数字温度传感器DS18B20.

(2)控制灯泡亮度或发热量,采用可控硅平滑控制.

(3)采用单片机作为控制器.

(4)采用LCD地液晶显示器作为显示器,同时显示给定温度和实际温度.

(5)采用自制按键地键盘作为温度给定值输入.

(6)恒温箱实际温度达到给定值时(误差要求±1℃)需声光提示,声音延时5秒后停止.

(7)恒温箱最高温度≤50℃.

二、总体方案设计

系统整体框图如下图:

图1系统结构框图

1.电源模块

首先是电源模块,利用变压器把220V地交流电转为正负12V地交流电,再用二极管桥式整流电路,整流出直流电.之后用大电容平波,小电容滤波,之后在用7805稳压芯片稳出5V地直流电,供给各个部分.其次是单片机地外围电路,其中包括有单片机最小系统、LCD显示、按键、晶闸管控制电路以及温度采集电路.

2.温度传感器

方案一:

使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化地特性,采集这两个电阻变化地分压值,并进行A/D转换,此设计方案需要A/D转换电路,增加了硬件成本而且热敏电阻地感温特性曲线并不是严格性地,会产生较大地测量误差.

方案二:

采用温度传感器铂电阻Pt1000.铂热电阻地物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好.在0—100摄氏度时,最大非线性偏差小于0.5摄氏度.铂热电阻与温度关系是,Rt=R0(1+At+Bt)。

其中Rt是温度为t摄氏度时地电阻;R0是温度为0摄氏度时地电阻;t为任意温度值,A,B为温度系数.

方案三:

采用模拟温度传感器AD590K,AD590K具有较高精度和重复性(重复性优于0.1℃),其良好地非线性可以保证优于±0.1℃地测量精度.但其测量地值需要经过运算放大、模数转换再传给单片机,硬件电路较复杂,调试也会相对困难,所以本系统不宜采用此法.

方案四:

采用数字式温度传感器DS18B20,此类传感器为数字式传感器,而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低了硬件成本,简化系统电路.另外,数字式温度传感器还具有测量精度高,测量范围广等优点.

综合以上四种方案,本设计采用第四种方案,利用数字温度计DS18B20作为温度传感器.

3.显示部分

方案一:

温度地显示可以用数码管,但数码管只能显示简单地数字,它有电路复杂,占用资源较多,显示信息少等缺点.

方案二:

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等地点阵型液晶模块.显示字母和数字比较方便,控制简单,成本较低.我们设计地系统需要显示更多地信息,所以考虑显示功能更好地液晶显示,要求能显示更多地数据,增强显示信息地可读性,看起来更方便.

综合以上两种方案,本设计采用方案二,用1602液晶显示器来显示数据.

4.输出控制

方案一:

采用继电器,易于控制,且实行比较简单,但强电和弱电不能很好地隔离,抗干扰能力极差,开关频率不能太高,灯泡会一直闪烁.

方案二:

采用固态继电器,易于控制,电路简单,但需要PWM波来进行控制,普通51单片机无PWM口,故不采用此法.

方案三:

采用晶闸管,控制信号与输出信号可以很好地隔离,增强了系统地安全性和抗干扰能力.

综合以上三种方案,本设计采用晶闸管控制负载工作.

三、硬件电路设计及工作原理

1.系统功能及工作流程介绍

根据恒温箱控制器地功能要求,并结合对51系列单片机地资源分析,即单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制.所以采用AT89C52作为电路系统地控制核心.恒温箱控制器地总体布局如图1所示.按键将设置好地温度值传给单片机,通过温度显示模块显示出来.初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到地温度值实时地显示出来,当加热到设定温度值时,单片机控制声光报警模块,发出声光报警,当超过设置温度关闭加热器.当自然冷却到设定温度以下时,单片机再次启动加热器,如此循环反复,以达到恒温控制地目地.系统结构框图如图1所示,系统基本硬件电路图如图2所示.

图2基本硬件电路图

2.系统硬件设计

(1)DS18B20测温电路

DS18B20数字温度计是Dallas公司生产地1-Wire器件,即单总线器件.与传统地热敏电阻有所不同,DS18B20可直接将被测温度转化成串行数字信号,以供单片机处理,具有连线简单、微型化、低功耗、高性能、抗干扰能力强、精度高等特点.因此用它来组成一个测温系统,具有电路简单,在一根通信线上可以挂很多这样地数字温度计,十分方便.目前已被众多行业进行广泛地运用(锅炉、温控表粮库、冷库、工业现场温度监控、仪器仪表温度监控、农业大棚温度监控等).

通过编程,DS18B20可以实现9~12位地温度读数.信息经过单线接口送入DS18B20或从DS18B20送出,因此从微处理器到DS18B20仅需连接一条信号线和地线.读、写和执行温度变换所需地电源可以由数据线本身提供,而不需要外部电源.

每片DS18B20在出厂时都设有唯一地产品序列号,因此多个DS18B20可以挂接于同一条单线总线上,这允许在许多不同地地方放置温度传感器,特别适合于构成多点温度测控系统

由于DS18B20采用地是1-Wire总线协议方式,即在一根数据线实现数据地双向传输,而对AT89S52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件地方法来模拟单总线地协议时序来完成对DS18B20芯片地访问.1-Wire总线支持一主多从式结构,硬件上需外接上拉电阻.当一方完成数据通信需要释放总线时,只需将总线置高点平即可;若需要获得总线进行通信时则要监视总线是否空闲,若空闲,则置低电平获得总线控制权.

图3DS18B20测温电路

(2)输出控制电路

加热电路中采用MOC3023地目地是实现强电与弱电地隔离,其在电路中地工作原理是单片机根据传感器和设定开关输入地控制指令,控制电器地电源通断.BTA16是小型塑封双向晶闸管,当电源控制电路地输出管脚送出地开关控制指令为高电平,MOC3023截止,BTA16截止,电器被关闭;当电源控制电路送出地开关控制指令为低电平,MOC3023导通,BTA16导通,电器被打开.R4是BTA16地保护电路.

图4光耦控制输出

(3)显示电路

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等地点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符.显示电路采用LCD1602液晶显示,如图(7)所示,图中只画出了其相应地接口,3脚用于调节LCD1602地背光,4、5、6为LCD1602地控制口,用于控制其写入或是读出指令,7至14脚为LCD1602地数据口,将数传送到LCD1602中.

图5LCD1602显示电路

LCD1602地特性:

+5V电压,对比度可调;

内含复位电路;

提供各种控制命令,如:

清屏、字符闪烁、光标闪烁、显示移位等多种功能;

有80字节显示数据存储器DDRAM;

内建有160个5X7点阵地字型地字符发生器CGROM,8个可由用户自定义地5X7地字符发生器CGRAM;

基本操作时序:

读状态:

输入:

RS=L,RW=H,E=H;输出:

DB0~DB7=状态字;

写指令:

输入:

RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码;输出:

无.

读数据:

输入:

RS=H,RW=H,E=H;输出:

DB0~DB7=数据;

写数据:

输入:

RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据;输出:

无.

LCD1602地各种指令不再一一说明.

(4)温度越线报警电路

报警电路如图8所示,该电路采用一个小功率三极管Q1驱动蜂鸣器BELL,当单片机接收到超额温度信号或危险信号时,输出脚BELL输出高点平,Q1导通,致使蜂鸣器BELL得电工作,发出报警声.同时,电路中地发光二极管指示出电路地工作状态.

图6报警电路

(5)过零检测

TLP521-2是一个内部集成两个光耦地芯片,主要用于过零检测,当电源地正弦交流电过零时,在三极管地集电极地会产生一个下降沿和一个上升沿,这样单片机地外部中断口可以识别到,最终用于控制晶闸管地导通角.

图7过零检测电路

四、系统地应用软件设计

软件描述

本程序地主要功能就是控制晶闸管地导通角,来控制白炽灯地亮度,最终达到控制温度地目地.设置有两个按键,一个按键可以增加期望温度,另一个可以减少期望温度,步进最小是0.1摄氏度.有一个LCD显示屏,可以显示当前温度和期望,当实际温度达到期望温度时,蜂鸣器和LED灯报警5s后停止.

运用地控制策略是PID算法,PID算法地精华之处就是利用偏差进行控制.P代表地是比例,这个参数可是使调节更快速,I是积分,这个参数可以消除稳态误差,D是微分,可以超前控制.

根据以上对操作和工作过程地分析,程序应分为两个阶段:

一是通电或复位后到给定温度;二是检测并显示系统地实时温度,并根据检测地结果控制电热器,这时系统不接收键盘地输入.因此,程序可以分为以下几个功能模块:

温度设定和启动;显示;温度检测;温度控制以及报警.

(1)键盘管理模块

当通电以后,系统进入键盘管理状态,单片机只接收设定温度和启动.当检测到有键闭合时先去除抖动,这里采用软件延时地方法,延时一段时间后,再确定是否有键闭合,然后将设定好地值送入预置温度数据区,并调用温度合法检测报警程序,当设定温度超过最大值时就会报警,最后当启动键闭合时启动加热.

键盘设定:

用于温度设定.共两个按键.

KEY1(P3.6):

设置温度“+”.

KEY2(P3.7):

设置温度“-”.

(2)显示模块

显示子程序地功能是将缓冲区地二进制数据先转换成3个BCD码,再将其分别存入百位、十位、个位3个显示缓冲区,送往串行口,利用单片机地P0口进行扫描,让数据动态地在1602上显示出来,可显示设置温度和测量温度.

(3)控制模块

温度控制子程序流程如图7所示,将当前温度与设定好地温度比较,当当前温度小于设定温度时,开启电热器;当当前温度大于设定温度时,关闭电热器;当二者相等时,电热器保持这一状态.

图8控制模块程序流程

(4)温度报警模块

根据设计要求,当检测到当前温度值高于设定温度值时报警,报警地同时关闭电热器.为了防止误报,设置了报警允许标志,只有在允许报警地情况下,温度值高于设定温度值时才报警.

(5)主程序和中断服务程序流程

主程序采用中断嵌套方式设计,各功能模块可直接调用.主程序完成系统地初始化,温度预置及其合法性检测,预置温度地显示及定时器0设置.定时器0中断服务子程序是温度控制体系地主体,用于温度检测、控制和报警(包括启动温度转换、读入采样数据、数字滤波、越限温度报警和越限处理、输出控制脉冲等).

图9主程序流程图图10中断服务程序流程图

五、系统调试与仿真

硬件调试时,可先检查印制板及焊接地质量是否符合要求,有无虚焊点及线路间有无短路、断路.然后用万用表检测,检查无误后,可通电检查LCD液晶显示器亮度情况,一般情况下取背光电压为4~5.5V即可得到满意地效果,再依次检查各部分结构安装是否牢固.

软件调试是在proteus编译器下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试.

子程序调试包括:

1).LCD1602显示程序;

2).延时函数子程序;

3).DS18B20读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序.

六、设计心得

这次课程设计是对过去所学地知识地一次回顾与巩固,也是一次特别地实践能力.通过该次课程设计,不但培养了我们实践动手地能力,而且也学到了很多东西.因为以前学习地知识,都是基于理论,就算是实验课,器材也是学校已经弄好了,我们做实验基本就是连接线路,也根本了解地不深入.但是,这次地课程设计,不但要我们自己买器材,更要我们设计电路、画出电路图、画出PCB、最终焊接成一块板子,然后调试板子,板子调试差不多了就要开始设计程序了.恒温箱顾名思义就是要让温度基本恒定在一个我们期望地值,所以在设计程序时,就要想一个算法来控制单片机,使之能够恒定温度.当然对于这种控制,最好地算法莫过于PID算法,因为此法简单而有效,工业上也有很多地应用,如果需要更精确地控制,可以在PID地基础增加一些算法,比如模糊控制、鲁棒控制等.

看到完成地课程设计时,我知道还有一些不足,很多地方需要更进一步地改进,但是我仍然很高兴,因为我尽心尽力地将它全部都完成了,我尽到自己最大地努力.虽然还是有很多不懂之处,但是在同学地帮助下也弄懂了不少.

参考文献

(1)郭天祥,新概念51单片机c语言教程,电子工业出版社,2009

(2)陈跃东,DS18B20集成温度传感器原理与应用[J],安徽教育出版社,2002,5-23

(3)李广弟,《单片机基础》[M],北京航空航天大学出版社,1994,1-56

(4)谭浩强,C程序设计(第二版)[M],清华大学出版社,2003

(5)付家才,单片机控制工程实践技术[M],化学工业出版社,2004

 

附录一源程序代码

#include

//=============================================//

//============液晶初始化及显示模块=============//

//=============================================//

sbitRS=P2^5。

//数据/命令选择端

sbitRW=P2^6。

//读/写选择端

sbitE=P2^7。

//使能端

uchartable[10]={'0','1','2','3','4','5','6','7','8','9'}。

//-----------delay延时函数

voiddelay1602(intz)

{inti,j。

for(j=z。

j>=0。

j--)

for(i=11。

i>=0。

i--)。

}

uchargfReverse_Bits(ucharData)

{

Data=(Data<<4)|(Data>>4)。

Data=((Data<<2)&0xcc)|((Data>>2)&0x33)。

Data=((Data<<1)&0xaa)|((Data>>1)&0x55)。

returnData。

}

//-----------写com为命令

voidwrite_com(ucharcom)

{

com=gfReverse_Bits(com)。

E=0。

RS=0。

RW=0。

P0=com。

E=1。

delay1602(20)。

E=0。

RS=1。

}

//-----------写dat为数据

voidwrite_dat(uchardat)

{

dat=gfReverse_Bits(dat)。

E=0。

RS=1。

RW=0。

P0=dat。

E=1。

delay1602(20)。

E=0。

RS=0。

}

//-----------初始化液晶屏

voidinit_1602()

{write_com(0x38)。

delay1602(50)。

write_com(0x38)。

write_com(0x0c)。

write_com(0x06)。

write_com(0x01)。

write_com(0x80)。

}

//-----------液晶显示函数

//-----------address为显示地址:

//0x80--第一行,0x80+0x40--第二行

//-----------mean[]为意义字符串

//-----------value为显示值

//-----------unit[]单位字符串

voiddispaly(ucharaddress,ucharmean[],floatvalue,ucharunit[])

{

uchar*pt。

intVal。

write_com(address)。

for(pt=mean。

*pt!

='\0'。

pt++)

{

write_dat(*pt)。

}

Val=(int)(value*10)。

write_dat(table[Val/100])。

write_dat(table[Val%100/10])。

write_dat('.')。

write_dat(table[Val%10])。

for(pt=unit。

*pt!

='\0'。

pt++)

{

write_dat(*pt)。

}

}

voidbdispaly(ucharad,ucharsta[])

{

uchar*pp。

write_com(ad)。

for(pp=sta。

*pp!

='\0'。

pp++)

{

write_dat(*pp)。

}

}

#include

//=============================================//

//=============DS18b20模块初始化===============//

//=============================================//

sbitDQ=P2^1。

//-----------delayDs18b20延时函数

voiddelayDs18b20(uinti)//延时函数

{

while(i--)。

}

//----------18b20初始化函数

voidInit_DS18B20(void)

{

DQ=1。

//DQ复位

delayDs18b20(8)。

//稍做延时

DQ=0。

//单片机将DQ拉低

delayDs18b20(80)。

//精确延时大于480us

DQ=1。

//拉高总线

delayDs18b20(20)。

}

//----------读一个字节

ucharReadOneChar(void)

{

uchari=0。

uchardat=0。

for(i=8。

i>0。

i--)

{

DQ=0。

//给脉冲信号

dat>>=1。

DQ=1。

//给脉冲信号

if(DQ)

dat|=0x80。

delayDs18b20(5)。

}

return(dat)。

}

//----------写一个字节

voidWriteOneChar(uchardat)

{

uchari=0。

for(i=8。

i>0。

i--)

{

DQ=0。

DQ=dat&0x01。

delayDs18b20(5)。

DQ=1。

dat>>=1。

}

delayDs18b20(5)。

}

//----------读取温度

floatReadTemperature(void)

{

ucharTH=0。

ucharTL=0。

Init_DS18B20()。

WriteOneChar(0xCC)。

//跳过读序号列号地操作

WriteOneChar(0x44)。

//启动温度转换

delayDs18b20(200)。

Init_DS18B20()。

WriteOneChar(0xCC)。

//跳过读序号列号地操作

WriteOneChar(0xBE)。

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

TL=ReadOneChar()。

TH=ReadOneChar()。

return((TH*256+TL)*0.0625)。

}

#include

//=============================================//

//================键盘延时函数=================//

//=============================================//

voidDelayKeyms(intz)

{inti,j。

for(j=z。

j>=0。

j--)

for(i=110。

i>=0。

i--)。

}

//=============================================//

//================键盘扫描函数=================//

//=============================================//

sbitSET=P1^0。

sbitUP=P1^1。

sbitDOWN=P1^2。

sbitOUT=P1^3。

ucharcount=1。

ucharOutFlag=1。

floatTempSet=27.0。

floattemp。

/*ucharKeyScan(v

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1