温度控制系统设计毕业论文.doc_第1页
温度控制系统设计毕业论文.doc_第2页
温度控制系统设计毕业论文.doc_第3页
温度控制系统设计毕业论文.doc_第4页
温度控制系统设计毕业论文.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计目录前言11 总体方案设计21.1设计要求21.1.1 设计背景21.1.2具体指标21.1.3具体控制要求21.2系统框图和软件流程图21.3元件选择41.3.1温度传感器的选择41.3.2显示电路的选择41.3.3按键选择41.3.4单片机的选择41.3.5上拉电阻的选择51.4工作原理52 设计理论基础62.1 at89c52单片机62.2ds18b2062.2.1特征62.2.2引脚排列72.2.3执行序列72.2.4单总线信号72.3矩阵键盘92.4lcd1602103 系统硬件设计123.1单片机最小系统设计123.2温度传感电路设计123.3温度控制电路设计133.4矩阵键盘电路设计133.5液晶显示电路设计144 系统软件设计154.1 延时函数的设计154.2 ds18b20的初始化与读写设计154.3 lcd的初始化与读写显示设计174.4 矩阵键盘输入设计184.5主程序设计205 结论22致谢23参考文献24附录i元器件清单25附录ii设计原理图26附录iii设计仿真图27前言在化学、化工实验室中实验中,往往需要使用微型加热器对各类反应药品进行加热,如何精确控制微型加热器进行加热,这就需要一种合适的系统对其温度进行精确控制。由于单片机具有低功耗、高性能、可靠性好、易于产品化等特点,因此采用单片机对温度进行控制不仅节约成本,控制方法灵活多样,并且可以达到较高的控制精度,从而能够大大提高产品的质量,因此单片机被广泛应用在中小型控制系统中。本文将设计一个温度控制系统利用温度传感器显示实时温度,能够通过按键给需要加热的实验室药品设定给定温度,微型加热器从室温给药品加热当温度等于给定温度时蜂鸣器响并且微型加热器断电,本设计的主要任务是能对温度进行自动的检测和控制。1 总体方案设计1.1设计要求1.1.1 设计背景温度控制广泛应用于人们的生产和生活中,人们使用温度计来采集温度,通过人工操作加热、通风和降温设备来控制温度,这样不但控制精度低、实时性差,而且操作人员的劳动强度大。在某些行业中对温度的要求较高,由于工作环境温度不合理而引发的事故时有发生。对工业生产可靠进行造成影响,甚至操作人员的安全。为了避免这些缺点,需要在某些特定的环境里安装数字温度测量及控制设备。本设计由于采用了新型单片机对温度进行控制,以其测量精度高,操作简单。可运行性强,价格低廉等优点,特别适用于生活,医疗,工业生产等方面的温度测量及控制。1.1.2具体指标加热器最大温度范围为0oc100oc,能设定加热温度并进行控制,上下波动不超过5%,显示实时温度。1.1.3具体控制要求根据设计的要求,要利用温度传感器显示实时温度。能够通过按键给需要加热的实验室药品设定给定温度,微型加热器从室温给药品加热当温度等于给定温度时蜂鸣器响并且微型加热器断电。毕业设计的主要任务是能对温度进行自动的检测和控制。设计中采用51单片机来控制温度,因此要有温度传感器,键盘,显示电路,温控电路,报警电路等几个部分。1.2系统框图和软件流程图本文所设计温度控制系统主要是通过温度传感器把采集到的温度送到单片机中通过显示电路显示实时温度,目标温度通过键盘送到单片机中控制显示电路显示,当实时温度大于等于目标温度是单片机通过高低电平控制加热器和报警电路。本文所设计的温度控制系统框图如图1所示,整个系统以单片机(at89c52)为核心,包括温度传感器,键盘,显示电路,温控电路,报警电路等几个部分。系统的软件控制流程如图2所示,先进行系统的初始化,温度传感器通过温度测量测出实时温度,并在显示系统中显示,而目标温度则是通过键盘扫描来设定且能通过显示系统显示,当实时温度大于等于目标温度时,加热器断开蜂鸣器响。温度传感器(ds18b20)键盘设定(矩阵键盘)温度控制(加热器)报警电路(蜂鸣器)显示电路(lcd1602) 单片机 (at89c52) 图1系统框图开始系统初始化温度测量键盘扫描 实时温度 目标温度设定 比较若 实=目 显示系统 加热器断开图2 软件设计流程图1.3元件选择1.3.1温度传感器的选择ad590-ds18b20- 需要模拟转数字电路-只需要一个元件 成本低点-成本高点精确度低-精确度高 测温点数量少-单总线可同时连接很多温点 电路繁多-电路简单 对线阻有要求-信号线距离远 可以说ds18b20的优点都是在弥补ad590的缺点的,ds18b20的唯一缺点是就是价格高一点总的来说性价比还是蛮高的。用ad590设计的电子数字温度计是需要加模拟和数字转换电路的,电路设计比较麻烦,而ds18b20在芯片的内部自带模拟和数字转换电路的, 从电路的复杂性和稳定性上来说,选择ds18b20更好。综上所述,采用ds18b20作为本实验的温度传感器。1.3.2显示电路的选择数码管要3ma电流才能发亮单片机io口驱动能力较弱,电流只有几毫安,所以一般要加一个373芯片放大电流,数据输出时一般还需要一个74ls138译码器译码,显示电路若采用数码管显示则至少4个数码管显示,由于每个数码管静态显示每个数码管必须接一个8位数据线来保持显示字型码首先排除静态显示,而数码管动态显示亮度不够稳定,影响因素较多;编程较复杂,占用cpu时间较多。lcd1602采用并口传输,速度比12864串口快只需一个口无需外加电路其内部有显示芯片可以识别英文字母、阿拉伯数字,其控制简单且有带有背光。从电路的复杂性和稳定性上来说采用lcd1602更好。1.3.3按键选择独立按键:一个按键占用单独的一个i/o口。矩阵键盘:为了节省i/o口,矩阵形式的按键排列,在交叉点水平线和垂直线不能连接,一般用一个按键来连接。输入设定温度要用到19,考虑到节省io口采用矩阵键盘更好。1.3.4单片机的选择由于作者是初学者对于c系列单片机较熟悉, at89c51最多支持4kb的程序,at89c52则最多支持8kb的程序。他们是互相兼容的,可以相互替换就是52的ram多点,程序可以大点,还有就是52多个定时器t2都是51内核,封装一致,多是dip40的,管脚顺序一模一样,通属at89c系列单片机唯一不同,rom不同,前者4k,后者8k。本文中ds18b20、lcd1602、矩阵键盘的驱动程序约各为1k再加上主程序1k左右,总共程序大小在4k左右所以本文采用at89c52单片机。1.3.5上拉电阻的选择因为单片机p0口没有上拉电阻为了保护单片机通常要外接上拉电阻,通常在1k 到10k 之间选取。 1.4工作原理该温控系统采用at89c52单片机进行控制。采用4x4矩阵键盘把设定的目标温度存入单片机的数据存储器,。单片机把温度传感器采集的信号与单片机里的数据相比较来控制微型加热器。根据系统的设计要求,选择ds18b20作为本系统的温度传感器,选择单片机at89c52为温控系统的核心来完成数据采集、处理、显示、报警、控制等功能。选用数字温度传感器ds18b20,省却了采样保持电路、运放、数模转换电路以及进行长距离传输时的串并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。该系统的总体设计思路如下:温度传感器ds18b20把所测得的温度发送到at89c52单片机上,经过单片机处理,将把温度在显示电路上显示,本系统显示器为lcd1602液晶。本系统除了显示温度以外还可以设置一个目标温度值,对所测温度进行监控,当温度等于目标温度时,蜂鸣器响微型加热器断电,从而控制温度。 2 设计理论基础2.1 at89c52单片机工作特性:片内flash程序存储器有8kb大小,寿命为可擦写1000次;片内数据存储器ram有256字节大小;可编程i/o口线有32根;可编程定时器有3个;中断系统中、级优先权的中断结构有2个中断源有8个、中断矢量有6个;有一个全双工的可编程串行通信口的串行口;有一个数据指针(dptr);单片机正常工作时,都需要有一个时钟电路和一个复位电路。本设计中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。at89c52有引脚40个,有外部双向io口32个,有外部中断口两个,有定时计数器3个。其将通用的微处理器和flash存储器结合在一起,特别是可反复擦写的flash存储器可有效地降低开发成本。at89c52有pdip、pqfp/tqfp及plcc等三种封装形式,以适应不同产品的需求。2.2ds18b202.2.1特征 仅需一个端口引脚就可以进行通讯的单线接口;每个器件有唯一的64 位的序列号存储在内部存储器中;l 供电范围为3.0v到5.5v;l 测温范围为-55125(67257);l 在1085范围内精确度为5;l 温度计分辨率可以被使用者选择为912位;l 最多在750ms 内将温度转换为12 位数字;l 非易失性温度报警设置用户自己可以定义;l 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统。2.2.2引脚排列图3 ds18b20引脚排列图说明ds18b20数字温度计提供9至12位的摄氏温度测量,并具有易失性的用户可编程触发点的上限和下限报警功能,其引脚排列如图3所示。ds18b20单总线通信按定义只需要一条数据线(和地线)与中央微处理器进行通信。它具有工作温度范围55c + 125c和准确0.5c范围- 10c + 85c.此外,ds18b20可以导出功率直接从数据线(“寄生虫”),消除了外部电源需要。每个ds18b20都有一个唯一的64位串行码,它允许多个ds18b20在同一根总线功能。因此,它是用一个简单的微处理器控制,大面积分布的许多ds18b20s。应用程序可以受益于这个功能包括空调环境控制,建筑物内的温度监控系统,设备,或机械,和过程监控控制系统。2.2.3执行序列通过单线总线端口访问ds18b20的协议如下:步骤1. 初始化;步骤2. rom操作指令;步骤3. ds18b20功能指令;每一次ds18b20的操作都必须满足以上步骤,当顺序混乱或缺少步骤,该器件不会有返回值。例如这样的顺序:发起rom搜索指令f0h和报警搜索指令ech之后,总线控制器必须返回步骤1。2.2.4单总线信号ds18b20需要严格的单总线协议以确保数据的完整性。协议包括集中单总线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。图4初始化时序读/写时序ds18b20的数据读写是通过时序处理位来确认信息交换的。写时序由两种写时序:写1 时序和写0 时序。总线控制器通过写1 时序写逻辑1 到ds18b20,写0 时序写逻辑0 到ds18b20。所有写时序必须最少持续60us,包括两个写周期之间至少1us的恢复时间。当总线控制器把数据线从逻辑高电平拉到低电平的时候,写时序开始(图4)。总线控制器要生产一个写时序,必须把数据线拉到低电平然后释放,在写时序开始后的15us释放总线。当总线被释放的时候,5k的上拉电阻将拉高总线。总控制器要生成一个写0时序。若线上是高电平,就是写1。若线上是低电平,就是写0。读时序当控制器发起读时序,ds18b20只用来给控制器传输数据。所有读时序必须最少60us,包括两个读周期间至少1us的恢复时间。当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放(图5)。在总线控制器发出读时序后,ds18b20 通过拉高或拉低总线上来传输1或0。当传输逻辑0结束后,总线将被释放,通过上拉电阻回到上升沿状态。从ds18b20输出的数据在读时序的下降沿出现后15us 内有效。因此,总线控制器在读时序开始后必须停止把i/o脚驱动为低电平15us,以读取i/o脚状态。图5读/写时序2.3矩阵键盘4 根行线与4 根列线交叉构成4*4矩阵键盘,其16个按键在行列的交叉点上。4*4矩阵键盘的每条行线都和4 条列线相交,该键所在行线与列线的电平受交点按键的按下影响,各按键间将相互影响,键分析时必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。按键的特点与去抖按键在释放和按下时,受机械弹性作用,通常有一定时间的抖动,然后其触点才能逐渐稳定如下图所示。抖动时间的长短和开关机械特性有关系,其时间一般为5 10 ms左右如图6所示。在抖动期间按下或者释放经常被认为是多次操作按键这很明显是错误的,要怎么样才能避免这种错误呢这就必须采用去抖操作通常考虑软件去抖和硬件去抖,硬件去抖通常在按键较少时采用,软件去抖通常在按键较多时采用很明显本设计应该考虑的是软件去抖。图6 按键的去抖2.4lcd1602管脚功能1602采用标准的16脚接口,其中:第1脚:vss是一个电源地引脚;第2脚:vdd引脚应该接+5v电源;第4脚:rs是一个寄存器选择引脚;第5脚:rw是一个读写信号线引脚;第6脚:e是一个使能引脚;第15脚是一个背光正极引脚;第714脚:d0d7是一个8位双向数据引脚。操作控制表1操作控制表操作控制操作读状态写指令读数据写数据输入rs=0rw=1e=1rs=0rw=0d07=指令码e=h脉冲rs=1rw=1e=1rs=1rw=0d07=数据e=h脉冲注:关于e=h脉冲开始时初始化e为0,然后置e为1,再通常推荐的初始化过程:延时15ms写指令38h延时5ms写指令38h延时5ms写指令38h延时5ms(以上都不检测忙信号)(以下都要检测忙信号)写指令38h写指令08h 关闭显示写指令01h 显示清屏写指令06h 光标移动设置写指令0ch 显示开关及光标设置完毕读写操作时序如图所示图7读操作时序图9 写操作时序3 系统硬件设计3.1单片机最小系统设计单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统如下图所示其中xtal1与xtal2 接晶振通过电容接地形成时钟电路给单片机提供时钟脉冲具体如下图10所示。图10单片机最小系统3.2温度传感电路设计如下图11所示ds18b20采用单总线连接只需将dq引脚接到单片机的一个io口上(p2.1)vcc接电gnd接地i/o口线要接5k左右的上拉电阻以保护温度传感器。图11温度传感电路3.3温度控制电路设计如下图12所示温度控制电路采用三极管来控制微型加热器,当温度达到目标温度时单片机io口有高电平变为低电平三极管断开微型加热器不断电从而控制温度。图12温度控制电路3.4矩阵键盘电路设计如下图13所示44 的矩阵式键盘由4 根行线和4 根列线交叉构成,按键位于行列的交叉点上,这样就构成了16 个按键,其中交叉点的行列线是不连接的。图13键盘电路 lcd1602上显示每个按键的“0f”序号,对应的按键的序号排列如图14所示:图 14键的序号排列图 3.5液晶显示电路设计如图15所示po口接d0d7为8位双向数据端,vdd接电vss接地vee通过电阻接地456引脚接单片机的三个io引脚。图15液晶显示电路4 系统软件设计4.1 延时函数的设计在延时头文件中主要制作了50us延时函数和50ms延时函数方便其他函数调用。/*delay.h*/delay头文件#ifndef _ delay _h_#define _ delay _h_/防重复包含指令#define uchar unsigned char#define uint unsigned intvoid delay_50us(uint t);/50us延时函数void delay_50ms(uint t); /50ms延时函数#endif/* delay.c*#include” delay.h” void delay_50us(uint t)uchar j;for(;t0;t-) for(j=19;j0;j-);void delay_50ms(uint t)uint j;for(;t0;t-)for(j=6245;j0;j-);4.2 ds18b20的初始化与读写设计在ds18b20模块中主要是ds18b20的初始化函数,读温度函数以及在lcd1602的显示以方便在主函数当中调用。/*ds18b20.h*#ifndef _ds18b20_h_#define _ds18b20_h_/防重复包含指令#include#define uchar unsigned char#define uint unsigned intsbit dq=p21; /定义p21void init_ds18b20(void);void delay(uint t);void write_byte(uchar dat);uchar read_byte(void);uchar readtemperature(void);void display(void);#endif/*ds18b20.c*#include”ds18b20.h” #include”delay.h”#include”lcd1602.h”#includevoid delay(uint t)while(t-);void init_ds18b20(void) /ds18b20初始化函数uchar n;dq=1;delay(8);dq=0;delay(80);dq=1;delay(8);n=dq;delay(4);void write_byte(uchar dat) /写字节uchar i;for(i=0;i=1;delay(4);uchar read_byte(void) /读字节uchar i,value;for(i=0;i=1;dq=1;if(dq)value|=0x80;delay(4);return value;uchar readtemperature(void) /读温度uchar a,b;init_ds18b20();write_byte(0xcc);/跳过romwrite_byte(0x44);/启动温度测量delay(300);init_ds18b20();write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();b4;return b; void display(void) /lcd1602显示温度 write_data(readtemperature();4.3 lcd的初始化与读写显示设计在lcd1602模块主要是1602的初始化,写命令,写字符函数以方便在主函数当中调用。/*lcd1602.h*#ifndef _lcd1602_h_#define _lcd1602_h_/防重复包含指令#include#define uchar unsigned char#define uint unsigned intsbit rs=p23; /定义接口sbit rw=p24;sbit e=p25;void write_com(uchar com);void write_data(uchar dat);void init(void);#endif/*lcd1602.c*#include”lcd1602.h” #include”delay.h”#includevoid write_com(uchar com) /写命令程序e=0;rs=0;rw=0;p0=com;delay_50us(10);e=1;delay_50us(20);e=0;void write_data(uchar dat) /写字符e=0;rs=1;rw=0;p0=dat;delay_50us(10);e=1;delay_50us(20);e=0;void init(void) /lcd1602初始化函数delay_50us(300);write_com(0x38);delay_50us(100);write_com(0x38);delay_50us(100);write_com(0x38);write_com(0x38);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0c);4.4 矩阵键盘输入设计矩阵模块主要包括键盘扫描和按键的去抖。/* keyscan.h *#ifndef _ keyscan_h_#define _ keyscan_h_/防重复包含指令#includevoid keyscan(void);uint target;#endif/* keyscan.c*#include”keyscan.h” #include”lcd1602.h” #include”delay.h”#include#define uchar unsigned char#define uint unsigned intvoid keyscan(void) /键盘扫描函数uchar key_l,key_h;uchar key;target=0;uint i=0;while(1)p1=0xf0;key_l=p1;key_l=key_l&0xf0;if(key_l!=0xf0) /去抖delay_50us(100);if(key_l!=0xf0)key_l=p1&0xf0; /11100000key_l=key_l|0x0f;/11101111p1=key_l;key_h=p1;key_h=key_h&0x0f;/00001110key_l=key_l&0xf0;/11100000key=key_h+key_l; /11101110switch (key) /显示键值case 0xee: write_data(0x00); target=target*i+0;i+;break;case 0xde: write_data(0x01); target=target*i+1;i+;break;case 0xbe: write_data(0x02); target=target*i+2;i+;break;case 0x7e: write_data(0x03); target=target*i+3;i+;break;case 0xed: write_data(0x04); target=target*i+4;i+;break;case 0xdd: write_data(0x05); target=target*i+5;i+;break;case 0xbd: write_data(0x06) ;target=target*i+6;i+;break;case 0x7d: write_data(0x07); target=target*i+7;i+;break;case 0xeb: write_data(0x08); target=target*i+8;i+;break;case 0xdb: write_data(0x09); target=target*i+9;i+;break;case 0xbb: write_data(0x0a); target=target*i+10;i+;break;case 0x7b: write_data(0x0b); target=target*i+11;i+;break;case 0xe7: write_data(0x0c); target=target*i+12;i+;break;case 0xd7: write_data(0x0d); target=target*i+13;i+;break;case 0xb7: write_data(0x0e); target=target*i+14;i+;break;case 0x77: write_data(0x0f); target=target*i+15;i+;break;4.5主程序设计主程序先把各模块包涵进来即之前制作的头文件,方便函数的调用。主函数当中先进行ds18b20 lcd1602的初始化,加热器工作;通过lcd1602写命令函数把光标指到第一行;调用lcd1602写字符函数显示“target tem:”键盘扫描函数把键值显示到lcd1602即显示目标温度。调用写命令函数把光标指到第二行;调用lcd1602写字符函数显示“get tem:”调用ds18b20的显示函数把实时温度显示到液晶第二行。当时温度大于或等于目标温度时进入while循环蜂鸣器响,加热器断电。#include”ds18b20.h” /头文件#include”lcd1602.h”#include”keyscan.h”#include”delay.h”#includesbit beep =p30; /定义蜂鸣器接口sbit heating =p34; /定义加热器接口#define uchar unsigned char /宏定义#define uint unsigned intvoid main() uchar table1=get tem:; /实时温度 uchar table2=target tem:; /目标温度 uchar j; init_ds18b20(); /ds18b20初始化init(); /lcd1602初始化heating=1; while(1)write_com(

温馨提示

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

评论

0/150

提交评论