恒温箱温度计算机控制系统设计报告_第1页
恒温箱温度计算机控制系统设计报告_第2页
恒温箱温度计算机控制系统设计报告_第3页
恒温箱温度计算机控制系统设计报告_第4页
恒温箱温度计算机控制系统设计报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机控制系统设计报告 设计名称: 恒温箱温度计算机控制系统设计 姓 名: 学 号: 班 级: 学 院: 信息工程学院 任课教师: 基于单片机的恒温箱控制系统设计 摘要: 本设计是基于AT89S52单片机的恒温箱控制系统,系统分为硬件和软件两部分,其中硬件包括:电源、温度传感器、显示、控制、晶闸管驱动和报警的设计;软件包括:键盘管理程序设计、显示程序设计、PID控制程序设计和温度报警程序设计。编写程序结合硬件进行调试,能够实现设置和调节初始温度值,进行液晶显示,当加热到设定值后立刻报警。本设计从实际应用出发选取了体积小、精度相对高的数字式温度传感元件DS18B20作为温度采集器,单片机AT89

2、S52为主控芯片,液晶作为显示输出,实现了对温度的实时测量与恒定控制。关键词:单片机、温度传感器、恒温、声光报警、PID。引言: 温度控制是工业生产过程中经常遇到的过程控制,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用,其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用的测温元件、测温方法以及对温度的控制方法也将不同;产品工艺不同、控制温度的精度不同、时效不同,则对数据采集的精度和采用的控制算法也不同。因而,对温度的测控方法多种多样。随着电子技术和微型计算机的迅速发展,

3、微机测量和控制技术也得到了迅速的发展和广泛的应用。利用微机对温度进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。然而现有的温度传感元件大多为模拟器件(热电耦)体积大、应用复杂、而且不容易实现数字化等缺点,阻碍了应用领域的扩展。本设计从实际应用出发选取了体积小、精度相对高的数字式温度传感元件DS18B20作为温度采集器,单片机AT89S52作为主控芯片,数码管作为显示输出,实现了对温度的实时测量与恒定控制。本课题设计要求 如下图所示,恒温箱采用木箱或纸箱(外形尺寸不大于30cm30cm30cm),内置白炽灯泡(功率不大于100W)用于加热。30cm30cm木箱或纸箱白炽

4、灯泡100W 自制恒温箱要求(1)温度采集传感器采用热电阻或热电偶,或一体化数字温度传感器DS18B20。(2)控制灯泡亮度或发热量,采用可控硅平滑控制。(3)采用单片机作为控制器。(4)采用LCD的液晶显示器作为显示器,同时显示给定温度和实际温度。(5)采用自制按键的键盘作为温度给定值输入。(6)恒温箱实际温度达到给定值时(误差要求1)需声光提示,声音延时5秒后停止。(7)恒温箱最高温度50。二、总体方案设计系统整体框图如下图: 图1 系统结构框图首先是电源模块,利用变压器把220V的交流电转为正负12V的交流电,再用二极管桥式整流电路,整流出直流电。之后用大电容平波,小电容滤波,之后在用7

5、805稳压芯片稳出5V的直流电,供给各个部分。其次是单片机的外围电路,其中包括有单片机最小系统、LCD显示、按键、晶闸管控制电路以及温度采集电路。2.温度传感器方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换,此设计方案需要A/D转换电路,增加了硬件成本而且热敏电阻的感温特性曲线并不是严格性的,会产生较大的测量误差。方案二:采用温度传感器铂电阻 Pt1000。铂热电阻的物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好。在 0100 摄氏度时,最大非线性偏差小

6、于 0.5 摄氏度。铂热电阻与温度关系是,Rt = R0(1+At+Bt) ;其中 Rt 是温度为 t 摄氏度时的电阻;R0 是温度为 0 摄氏度时的电阻;t 为任意温度值,A,B 为温度系数。方案三:采用模拟温度传感器AD590K,AD590K具有较高精度和重复性(重复性优于0.1),其良好的非线性可以保证优于0.1的测量精度。但其测量的值需要经过运算放大、模数转换再传给单片机,硬件电路较复杂,调试也会相对困难,所以本系统不宜采用此法。 方案四:采用数字式温度传感器DS18B20,此类传感器为数字式传感器,而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低了硬件成本

7、,简化系统电路。另外,数字式温度传感器还具有测量精度高,测量范围广等优点。综合以上四种方案,本设计采用第四种方案,利用数字温度计DS18B20作为温度传感器。3.显示部分方案一:温度的显示可以用数码管,但数码管只能显示简单的数字,它有电路复杂,占用资源较多,显示信息少等缺点。方案二:1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。显示字母和数字比较方便,控制简单,成本较低。我们设计的系统需要显示更多的信息,所以考虑显示功能更好的液晶显示,要求能显示更多的数据,增强显示信息的可读性,看起来更方便。综合以上两种方案,本设计采用方案二,用1602液晶显示器

8、来显示数据。4.输出控制方案一:采用继电器,易于控制,且实行比较简单,但强电和弱电不能很好的隔离,抗干扰能力极差,开关频率不能太高,灯泡会一直闪烁。方案二:采用固态继电器,易于控制,电路简单,但需要PWM波来进行控制,普通51单片机无PWM口,故不采用此法。方案三:采用晶闸管,控制信号与输出信号可以很好的隔离,增强了系统的安全性和抗干扰能力。综合以上三种方案,本设计采用晶闸管控制负载工作。三、硬件电路设计及工作原理1.系统功能及工作流程介绍根据恒温箱控制器的功能要求,并结合对51系列单片机的资源分析,即单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系

9、统的控制核心。恒温箱控制器的总体布局如图1所示。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到的温度值实时的显示出来,当加热到设定温度值时,单片机控制声光报警模块,发出声光报警,当超过设置温度关闭加热器。当自然冷却到设定温度以下时,单片机再次启动加热器,如此循环反复,以达到恒温控制的目的。系统结构框图如图1所示,系统基本硬件电路图如图2所示。 图2 基本硬件电路图系统硬件设计(1)DS18B20测温电路DS18B20数字温度计是Dallas公司生产的1Wire器件 HYPERLIN

10、K :/ mcu99 ,即单总线器件。与传统的热敏电阻有所不同,DS18B20可直接将被测温度转化成串行数字信号,以供单片机处理,具有连线简单、微型化、低功耗、高性能、抗干扰能力强、精度高等特点。因此用它来组成一个测温系统,具有电路简单,在一根通信线上可以挂很多这样的数字温度计,十分方便。目前已被众多行业进行广泛的运用(锅炉、温控表粮库、冷库、工业现场温度监控、仪器仪表温度监控、农业大棚温度监控等)。通过编程,DS18B20可以实现912位的温度读数。信息经过单线接口送入DS18B20或从DS18B20送出,因此从微处理器到DS18B20仅需连接一条信号线和地线。读、写和执行温度变换所需的电源

11、可以由数据线本身提供,而不需要外部电源。每片DS18B20在出厂时都设有唯一的产品序列号,因此多个DS18B20可以挂接于同一条单线总线上,这允许在许多不同的地方放置温度传感器,特别适合于构成多点温度测控系统由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。1Wire总线支持一主多从式结构,硬件上需外接上拉电阻。当一方完成数据通信需要释放总线时,只需将总线置高点平即可;若需要获得总线进行通信时则要监视总线是否空闲,若空闲,

12、则置低电平获得总线控制权。 图3 DS18B20测温电路(2)输出控制电路加热电路中采用MOC3023的目的是实现强电与弱电的隔离,其在电路中的工作原理是单片机根据传感器和设定开关输入的控制指令,控制电器的电源通断。BTA16是小型塑封双向晶闸管,当电源控制电路的输出管脚送出的开关控制指令为高电平,MOC3023截止,BTA16截止,电器被关闭;当电源控制电路送出的开关控制指令为低电平,MOC3023导通,BTA16导通,电器被打开。R4是BTA16的保护电路。 图4 光耦控制输出(3)显示电路1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干

13、个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。显示电路采用LCD1602液晶显示,如图(7)所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。 图5 LCD1602显示电路LCD1602的特性:+5V电压,对比度可调;内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器C

14、GRAM;基本操作时序: 读状态:输入:RS=L,RW=H,E=H;输出:DB0DB7=状态字 ;写指令:输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码 ;输出:无。读数据:输入:RS=H,RW=H,E=H;输出:DB0DB7=数据 ;写数据:输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据 ;输出:无。LCD1602的各种指令不再一一说明。(4)温度越线报警电路报警电路如图8所示,该电路采用一个小功率三极管Q1驱动蜂鸣器BELL,当单片机接收到超额温度信号或危险信号时,输出脚BELL输出高点平,Q1导通,致使蜂鸣器BELL得电工作,发出报警声。同时,电路中的发光二

15、极管指示出电路的工作状态。 图6 报警电路 (5)过零检测 TLP521-2是一个内部集成两个光耦的芯片,主要用于过零检测,当电源的正弦交流电过零时,在三极管的集电极的会产生一个下降沿和一个上升沿,这样单片机的外部中断口可以识别到,最终用于控制晶闸管的导通角。图7过零检测电路四、系统的应用软件设计软件描述本程序的主要功能就是控制晶闸管的导通角,来控制白炽灯的亮度,最终达到控制温度的目的。设置有两个按键,一个按键可以增加期望温度,另一个可以减少期望温度,步进最小是摄氏度。有一个LCD显示屏,可以显示当前温度和期望,当实际温度达到期望温度时,蜂鸣器和LED灯报警5s后停止。运用的控制策略是PID算

16、法,PID算法的精华之处就是利用偏差进行控制。P代表的是比例,这个参数可是使调节更快速,I是积分,这个参数可以消除稳态误差,D是微分,可以超前控制。根据以上对操作和工作过程的分析,程序应分为两个阶段:一是通电或复位后到给定温度;二是检测并显示系统的实时温度,并根据检测的结果控制电热器,这时系统不接收键盘的输入。因此,程序可以分为以下几个功能模块:温度设定和启动;显示;温度检测;温度控制以及报警。(1)键盘管理模块当通电以后,系统进入键盘管理状态,单片机只接收设定温度和启动。当检测到有键闭合时先去除抖动,这里采用软件延时的方法,延时一段时间后,再确定是否有键闭合,然后将设定好的值送入预置温度数据

17、区,并调用温度合法检测报警程序,当设定温度超过最大值时就会报警,最后当启动键闭合时启动加热。键盘设定:用于温度设定。共两个按键。 KEY1(P3.6): 设置温度“+”。KEY2(P3.7): 设置温度“-”。 (2)显示模块显示子程序的功能是将缓冲区的二进制数据先转换成3个BCD码,再将其分别存入百位、十位、个位3个显示缓冲区,送往串行口,利用单片机的P0口进行扫描,让数据动态的在1602上显示出来,可显示设置温度和测量温度。(3)控制模块温度控制子程序流程如图7所示,将当前温度与设定好的温度比较,当当前温度小于设定温度时,开启电热器;当当前温度大于设定温度时,关闭电热器;当二者相等时,电热

18、器保持这一状态。图8控制模块程序流程(4)温度报警模块根据设计要求,当检测到当前温度值高于设定温度值时报警,报警的同时关闭电热器。为了防止误报,设置了报警允许标志,只有在允许报警的情况下,温度值高于设定温度值时才报警。(5)主程序和中断服务程序流程主程序采用中断嵌套方式设计,各功能模块可直接调用。主程序完成系统的初始化,温度预置及其合法性检测,预置温度的显示及定时器0设置。定时器0中断服务子程序是温度控制体系的主体,用于温度检测、控制和报警(包括启动温度转换、读入采样数据、数字滤波、越限温度报警和越限处理、输出控制脉冲等)。 图9 主程序流程图 图10 中断服务程序流程图五、系统调试与仿真硬件

19、调试时,可先检查印制板及焊接的质量是否符合要求,有无虚焊点及线路间有无短路、断路。然后用万用表检测,检查无误后,可通电检查 LCD 液晶显示器亮度情况,一般情况下取背光电压为 45.5V 即可得到满意的效果,再依次检查各部分结构安装是否牢固。 软件调试是在proteus编译器下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试。 子程序调试包括: 1).LCD1602显示程序; 2).延时函数子程序; 3).DS18B20读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序。六、设计心得这次课程设计是对过去所学的知识的一次回顾与巩固,也是一次特别的

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

21、础增加一些算法,比如模糊控制、鲁棒控制等。 看到完成的课程设计时,我知道还有一些不足,很多地方需要更进一步的改进,但是我仍然很高兴,因为我尽心尽力的将它全部都完成了,我尽到自己最大的努力。虽然还是有很多不懂之处,但是在同学的帮助下也弄懂了不少。参考文献(1) 郭天祥,新概念51单片机c语言教程,电子工业出版社,2009(2) 陈跃东,DS18B20集成温度传感器原理与应用J,安徽教育出版社,2002,5-23(3) 李广弟,单片机基础M,北京航空航天大学出版社,1994,1-56(4) 谭浩强,C程序设计(第二版)M,清华大学出版社,2003 (5) 付家才,单片机控制工程实践技术M,化学工业

22、出版社,2004附录一 源程序代码#include/=/=液晶初始化及显示模块=/=/sbit RS=P25; /数据/命令选择端sbit RW=P26; /读/写选择端sbit E=P27; /使能端uchar table10=0,1,2,3,4,5,6,7,8,9;/-delay延时函数void delay1602(int z) int i,j;for(j=z;j=0;j-)for(i=11;i=0;i-); uchar gfReverse_Bits(uchar Data) Data=(Data4); Data=(Data2)&0 x33); Data=(Data1)&0 x55); re

23、turn Data; /-写com为命令void write_com(uchar com) com=gfReverse_Bits(com); E=0;RS=0; RW=0;P0=com;E=1; delay1602(20);E=0; RS=1;/-写dat为数据void write_dat ( uchar dat )dat=gfReverse_Bits(dat); E=0; RS=1; RW=0;P0=dat;E=1;delay1602(20); E=0; RS=0; /-初始化液晶屏void init_1602()write_com(0 x38);delay1602(50); write_c

24、om(0 x38);write_com(0 x0c);write_com(0 x06);write_com(0 x01);write_com(0 x80);/-液晶显示函数/-address为显示地址:/0 x80-第一行,0 x80+0 x40-第二行/-mean为意义字符串/-value为显示值/-unit单位字符串void dispaly(uchar address,uchar mean,float value,uchar unit)uchar *pt;int Val;write_com(address);for(pt=mean;*pt!=0;pt+)write_dat(*pt);Val

25、 = (int)(value*10);write_dat(tableVal/100);write_dat(tableVal%100/10);write_dat(.);write_dat(tableVal%10);for(pt=unit;*pt!=0;pt+)write_dat(*pt);void bdispaly(uchar ad,uchar sta)uchar *pp;write_com(ad);for(pp=sta;*pp!=0;pp+)write_dat(*pp);#include/=/=DS18b20模块初始化=/=/ sbit DQ = P21;/-delayDs18b20延时函数v

26、oid delayDs18b20(uint i)/延时函数 while(i-);/-18b20初始化函数void Init_DS18B20(void) DQ = 1; /DQ复位 delayDs18b20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delayDs18b20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delayDs18b20(20);/-读一个字节uchar ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉

27、冲信号 if(DQ) dat|=0 x80; delayDs18b20(5); return(dat);/-写一个字节void WriteOneChar(uchar dat) uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delayDs18b20(5); DQ = 1; dat=1; delayDs18b20(5);/-读取温度float ReadTemperature(void)uchar TH=0;uchar TL=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOne

28、Char(0 x44); / 启动温度转换delayDs18b20(200);Init_DS18B20();WriteOneChar(0 xCC); /跳过读序号列号的操作 WriteOneChar(0 xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度TL=ReadOneChar();TH=ReadOneChar();return(TH*256+TL)*0.0625);#include/=/=键盘延时函数=/=/void DelayKeyms(int z) int i,j;for(j=z;j=0;j-)for(i=110;i=0;i-); /=/=键盘扫描函数=/=/sbit

29、 SET=P10;sbit UP=P11;sbit DOWN=P12;sbit OUT=P13;uchar count=1;uchar OutFlag=1;float TempSet=27.0;float temp;/*uchar KeyScan(void)if(Key1=0)DelayKeyms(10);if(Key1=0)while(!Key1);return 1; if(Key2=0)DelayKeyms(10);if(Key2=0)while(!Key2);return 2;if(Key3=0)DelayKeyms(10);if(Key3=0)while(!Key3);return 3

30、;return 0; */void SetKey() /模式选择 if(SET=0) DelayKeyms(10); if(SET=0) count+; if(count2) count=1; while(SET=0); void UpKey() /按键加 if(UP=0) DelayKeyms(10); if(UP=0) switch(count) case 1:temp=TempSet; temp=temp+1; if(temp50.0) temp=20.0; TempSet=temp; break; case 2:temp=TempSet; temp=temp+0.1; if(temp5

31、0.0) temp=20.0; TempSet=temp; break; default:break; while(UP=0); void DownKey() /按键减 if(DOWN=0) DelayKeyms(10); if(DOWN=0) switch(count) case 1:temp=TempSet; temp=temp-1; if(temp20.0) temp=50.0; TempSet=temp; break; case 2:temp=TempSet; temp=temp-0.1; if(temp1) OutFlag=0; while(OUT=0); void keyDone(

32、) /按键功能执行 bdispaly(0 x80,please set Tempset:); dispaly(0 x80+0 x40,Temp_Set:,TempSet,C); SetKey(); switch(count) case 1: UpKey(); DownKey(); dispaly(0 x80+0 x40,Temp_Set:,TempSet,C); break; case 2: UpKey(); DownKey();dispaly(0 x80+0 x40,Temp_Set:,TempSet,C); break; default:break; OutKey(); #includes

33、bit Controlpin=P20;sbit Light=P23;sbit Beep=P22;/=/=延时函数=/=/void Delayms(int z) int i,j;for(j=z;j=0;j-)for(i=110;i=0;i-); /=/=主函数=/=/uchar beepflag=0;uchar Be_LiFlag=0;extern float TempSet;float TempReal=0;uchar ExpectTime=0;void main()/初始化定义/uchar k;float TempNew = 0;/float TempOld1 = 0;/float TempOld2 = 0;init_1602();XInterruptInit();TimerInit();Beep =1;Controlpin=1;EA=0;while(1) /键盘数据处理 /蜂鸣器报警 OutKey(); while(OutFlag=0) keyDone(); Light=1; beepflag=0; if(TempSet=TempReal&!beepflag) Be_LiFlag+; if(Be_LiFlag=6) Be_LiFlag=0; Beep =0; Light=0; Delayms(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论