基于STC89C52单片机的温度控制电路设计说明_第1页
基于STC89C52单片机的温度控制电路设计说明_第2页
基于STC89C52单片机的温度控制电路设计说明_第3页
基于STC89C52单片机的温度控制电路设计说明_第4页
基于STC89C52单片机的温度控制电路设计说明_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

./基于温度传感器的单片机温控电路设计设计分析在各行业中广泛应用的温度控制器及仪器仪表主要具有如下的特点:一是在复杂的温度控制系统中能够适应于大惯性、大滞后的控制;二是在受控系统数学模型难以建立的情况下,得到控制;三是在受控系统中,能够被控制过程很复杂且参数时变的温度控制系统控制;五是温度控制系统普遍具有参数自检功能,借助计算机技术,能控制对象和参数,并且具有特性进行自动调整的功能等特点[1]。本次电子工艺实训旨在练习实用单片机系统的设计与安装,掌握典型51系列单片机最小系统及外围电路设计、常用电子元器件的识别、万用板焊接电路的方法、巩固常用电子仪表测量与调试电路参数的方法,培养创新实践动手能力,为下学期单片机、电子系统设计等课程奠定理论和实践基础。具体要求如下:自行设计以STC89C52RC40单片机为控制核心的实用单片机控制系统的硬件电路,实现至少一个环境参量信息采集、数值显示、报警功能。根据设计,利用万用板焊接硬件电路,并做简单调试。要求模块化设计,单片机最小系统模块、显示模块、信息采集报警模块、键盘模块,主要贵重器件用排座插接,电阻、电容、按键等元器件要求布局合理、排列整齐,无虚焊。设计方案本文设计是以单片机为核心,实现温度实时测控和显示。确定电路中的一些主要参数,了解温度控制电路的结构,工作原理,对该控制电路性能进行测试。具体设计方案:<1>本设计是用来测控温度的,可以利用热敏电阻的感温效应,将被测温度变化的模拟信号,电压或电流的采集过来,首先进行放大和滤波后,再通过A/D转换,将得到的数字量送往单片机中去处理,用数码管将被测得的温度值显示出来。但是这种电路的设计需要用到放大滤波电路,A/D转换电路,感温电路等一系列模拟电路,设计起来较麻烦[2]。<2>本设计采用单片机做处理器,可以考虑使用温度传感器,采用由达拉斯公司研制的DS18B20型温度传感器,此传感器可以将被测的温度直接读取出来,并进行转换,这样就很容易满足设计要求。从上面的两种方案,可以很容易看出来,虽然方案<2>软件部分设计复杂点,但是电路比较简单且精度高,故采用方案<2>。单单片机最小系统显示模块显示模块设置模块设置模块采集模块采集模块图1.总体方框图系统硬件设计据设计的需求,分析单片机的工作原理,可以大体得出来温度控制电路设计的总体方框图,主处理器采用单片机STC89C52RC40,温度采集部分采用温度传感器,用4位LED显示数码管作为显示部分,用来将温度显示出来。系统硬件电路部分由四大模块组成:温度采集模块、温度显示模块、报警模块、键盘模块和单片机最小系统模块[3]。〔一单片机最小系统模块在课题设计的温度控制系统设计中,控制核心是STC89C52单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片含4KFLASH工艺的程序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12MHz,一个指令周期为1μS。使用该单片机完全可以完成设计任务,其最小系统主要包括:复位电路、震荡电路以及存储器选择模式〔EA脚的高低电平选择,电路如下图3.1所示:图2.最小系统本课题设计的温度控制系统主控制芯片选型为STC89C52单片机,其特点如下:STC89C52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。下面按引脚功能分为4个部分叙述个引脚的功能。〔1电源引脚Vcc和VssVcc〔40脚:接+5V电源正端Vss〔20脚:接+5V电源正端。〔2外接晶振引脚XTAL1和XTAL2XTAL1〔19脚:接外部石英晶体的一端。在单片机部,它是一个反相放大器的输入端,这个放大器构成采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHOMS单片机,该引脚作为外部振荡信号的输入端。XTAL2〔18脚:接外部晶体的另一端。在单片机部,接至片振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端。对于CHMOS芯片,该引脚悬空不接。〔3控制信号或与其它电源复用引脚控制信号或与其它电源复用引脚有RST/VPD、ALE/P、PSEN和EA/VPP等4种形式。〔A.RST/VPD〔9脚:RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机复位到初始状态。当VCC发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源VPD〔+5V为部RAM供电,以保证RAM中的数据不丢失。〔B.ALE/P〔30脚:当访问外部存储器时,ALE〔允许地址锁存信号以每机器周期两次的信号输出,用于锁存出现在P0口的低〔C.PSEN<29脚>:片外程序存储器读选通输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期PESN两次有效,以通过数据总线口读回指令或常数。当访问外部数据存储器期间,PESN信号将不出现。〔D.EA/Vpp〔31脚:EA为访问外部程序储器控制信号,低电平有效。当EA端保持高电平时,单片机访问片程序存储器4KB〔MS—52子系列为8KB。若超出该围时,自动转去执行外部程序存储器的程序。当EA端保持低电平时,无论片有无程序存储器,均只访问外部程序存储器。对于片含有EPROM的单片机,在EPROM编程期间,该引脚用于接21V的编程电源Vpp。〔4输入/输出〔I/O引脚P0口、P1口、P2口及P3口<A>.P0口〔39脚~22脚:P0.0~P0.7统称为P0口。当不接外部存储器与不扩展I/O接口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展I/O口时,P0口为地址/数据分时复用口。它分时提供8位双向数据总线。对于片含有EPROM的单片机,当EPROM编程时,从P0口输入指令字节,而当检验程序时,则输出指令字节。<B>.P1口〔1脚~8脚:P1.0~P1.7统称为P1口,可作为准双向I/O接口使用。对于MCS—52子系列单片机,P1.0和P1.1还有第2功能:P1.0口用作定时器/计数器2的计数脉冲输入端T2;P1.1用作定时器/计数器2的外部控制端T2EX。对于EPROM编程和进行程序校验时,P0口接收输入的低8位地址。<C>.P2口〔21脚~28脚:P2.0~P2.7统称为P2口,一般可作为准双向I/O接口。当接有外部程序存储器或扩展I/O接口且寻址围超过256个字节时,P2口用于高8位地址总线送出高8位地址。对于EPROM编程和进行程序校验时,P2口接收输入的8位地址。<D>.P3口〔10脚~17脚:P3.0~P3.7统称为P3口。它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。P3口的第2功能见下表:引脚第2功能P3.0RXD〔串行口输入端0P3.1TXD〔串行口输出端P3.2INT0〔部中断0请求输入端,低电平有效P3.3INT1〔中断1请求输入端,低电平有效P3.4T0〔时器/计数器0计数脉冲端P3.5T1〔时器/计数器1数脉冲端P3.6WR〔部数据存储器写选通信号输出端,低电平有效P3.7RD〔部数据存储器读选通信号输出端,低电平有效表1单片机P3.0管脚含义<二>温度采集模块DS18B20温度传感器是美国达拉斯<DALLAS>半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,主要有以下几方面的原因:〔1系统的特性:测温围为-55℃~+125℃,测温精度为士0.5℃;温度转换精度9~12位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式。〔2系统成本:由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低。〔3系统复杂度:由于DS18B20是单总线器件,微处理器与其接口时仅需占用1个I/O端口且一条总线上可以挂接几十个DS18B20,测温时无需任何外部元件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量。〔4系统的调试和维护:由于引线的减少,使得系统接口大为简化,给系统的调试带来方便。同时因为DS18B20是全数字元器件,故障率很低,抗干扰性强,因此,减少了系统的日常维护工作。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ,外供电源线VDD,共用地线GND。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD接地,它是通过部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另一种是外部供电方式<VDD接+5V>,相应的完成温度测量的时间较短。〔三报警模块设计中的报警装置电路用到了发光二级管、三极管、10K的电阻。将发光二级管的一端接地,另一端接三极管的发射极,三极管的基极通过电阻接在三极管上,三极管的集电极电源。图5.报警器〔四键盘模块键盘实际是就是很多案件的一种组合,按键的按下与否形成一个高低电平,主控芯片CPU通过高低电平来识别所需信号,进而使程序进行下一步的操作。键盘操作的软硬件的设计有以下几个方面的问题:对于此设计来说我们要准确的显示我们所要对应的信息,每按一次按键要显示所要显示的信息。这按键是主要用来控制温度而设计的。这样比键盘操作方便,也比较实惠。按键电路采用中断模式。图6.键盘输入〔五显示、指示模块本模块用的是0.56英寸2位数码管红色共阳数码管5261BS,一般正向压降的都是1.5~2V,额定电流为10mA,通过最大的电流为40mA。根据各种不同管接线的方式,可将数码管分成共阴极型和共阳极型。图7.数码管〔六系统总电路图系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主控电路等,通过AltiumDesigner可画出如图所示的电路图[4][5][6]图8.系统总电路图系统硬件制作〔一硬件电路制作方法1.按照电路图插接面包板,连接线路。2.电路焊接,将各元件焊接到面包板上。硬件电路制作过程1.准备好各类器件以及工具。2.按电路图插接好面包板,先焊接小器件及简单电路.3.用电线连接距离较远的器件,进行焊接.4.焊接完成后用万用表进行电路测试,确保没有短路。五、系统软件设计软件设计思路及流程图主控制程序的主要是用来实时控制当前所要测控的环境温度,并读出由DS18B20测量的经过处理的当前环境的温度值,同时检查温度是否在限度之,否则报警,同时调整温度值。其主控制程序流程图如9所示。开始STC89C52开始STC89C52初始化DS18B20初始化温度是否到达设定限度温度显示结束红灯亮温度在显示范围内YNYNY发温度转换命令发DS18B20复位命令发跳过读序列号命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY图9主程序流程图图10读温度流程图1.读温度子程序读温度子程序的功能主要是用来将随机存储器中的9个字节读出,在读出字节时侯,需要进行冗余码校验。在校验到有错误的时侯,所测得的温度数据就会不进行改写。其读温度子程序流程图如10所示。2.温度转换子程序温度转换命令子程序的功能主要是用来发送温度开始转换命令,让温度转换自动进行,其温度转换命令子程序流程图如11所示。发DS18B20复位命令发DS18B20复位命令发跳过读序列号命令发温度转换开始命令结束图11温度转换流程图3.计算温度子程序计算温度子程序的功能主要将随机存储器中的温度数值读取出来,将取得的温度数值的每一位经过计算分别取出来,放入指定的字节中,并进行温度值数正负的判定。计算温度子程序流程图如12所示。开始开始温度零下?温度值取补码置"—"标志取出小数位的温度值取出整数位的温度值结束置"+"标志NY图12.计算温度流程图图12.计算温度流程图图3-4计算温度流程图4.温度显示子程序温度显示子程序的功能主要是对显示数据寄存器中的数据反复进行刷新操作。如果最高位显示是0时的时候,就将符号显示位立即移入下一位字节中。温度显示子程序流程图如13所示。温度数据移入显示寄存器温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据〔不显示符号结束NNYY图13.温度显示数据刷新流程图图13.温度显示数据刷新流程图〔二程序源代码#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitp34=P2^4;sbitp35=P2^5;sbitp36=P2^6;sbitdp=P0^7;sbitp37=P2^7;sbitDQ=P2^2;//定义DS18B20总线I/OsbitSET=P3^1;//定义选择报调整警温度上限和下限〔1为上限,0为下限sbitLING=P2^0;//定义闪烁signedcharm;//温度值全局变量bitsign=0;//外部中断状态标志signedcharshangxian=38;//上限报警温度,默认值为38signedcharxiaxian=5;//下限报警温度,默认值为5ucharcodeLEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};/*****延时子程序*****/voidDelay<uinti>{while<i-->;}/*****初始化DS18B20*****/voidInit_DS18B20<void>{unsignedcharx=0;DQ=1;Delay<8>;//稍做延时DQ=0;//单片机将DQ拉低Delay<80>;//精确延时,大于480usDQ=1;//拉高总线Delay<14>;x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay<20>;}/*****读一个字节*****/unsignedcharReadOneChar<void>{unsignedchari=0;unsignedchardat=0;for<i=8;i>0;i-->{DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if<DQ>dat|=0x80;Delay<4>;}return<dat>;}/*****写一个字节*****/voidWriteOneChar<unsignedchardat>{unsignedchari=0;for<i=8;i>0;i-->{DQ=0;DQ=dat&0x01;Delay<5>;DQ=1;dat>>=1;}}voidTmpchange<void>//发送温度转换命令{Init_DS18B20<>;WriteOneChar<0xCC>;//跳过读序号列号的操作WriteOneChar<0x44>;//启动温度转换}/*****读取温度*****/unsignedintReadTemperature<void>{unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Tmpchange<>;Init_DS18B20<>;WriteOneChar<0xCC>;//跳过读序号列号的操作WriteOneChar<0xBE>;//读取温度寄存器a=ReadOneChar<>;//读低8位b=ReadOneChar<>;//读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*100+0.5;//放大100倍输出并四舍五入return<t>;}/*****显示开机初始化等待画面*****/Disp_init<>{P0=0x80;//显示-p34=1;p35=0;p36=0;p37=0;Delay<200>;P0=0x80;p34=0;p35=1;p36=0;p37=0;Delay<200>;P0=0x80;p34=0;p35=0;p36=1;p37=0;Delay<200>;P0=0x80;p34=0;p35=0;p36=0;p37=1;Delay<200>;P0=0x80;}/*****显示温度子程序*****/Disp_Temperature<>//显示温度{uinta,b,c,d,e;e=ReadTemperature<>;//获取温度值a=e/1000;//计算得到十位数字b=e/100-a*10;//计算得到个位数字d=e%10;//计算得到小数点后两位c=<e%100>/10;//计算得到小数点后一位m=e/100;if<m>shangxian||m<xiaxian>LING=1;//温度不在围报警elseLING=0;p34=0;p35=0;p36=0;p37=0;P0=LEDData[d];//显示小数点后两位p34=1;p35=0;p36=0;p37=0;Delay<300>;p34=0;p35=0;p36=0;p37=0;P0=LEDData[c];//显示小数点后一位p34=0;p35=1;p36=0;p37=0;Delay<300>;p34=0;p35=0;p36=0;p37=0;P0=LEDData[b];//显示个位dp=0;p34=0;p35=0;p36=1;p37=0;Delay<300>;p34=0;p35=0;p36=0;p37=0;P0=LEDData[a];//显示十位p34=0;p35=0;p36=0;p37=1;Delay<300>;p34=0;p35=0;p36=0;p37=0;//关闭显示}disptiaozheng<>{ucharf,g,j,k;f=shangxian/10;g=shangxian%10;j=xiaxian/10;k=xiaxian%10;p34=0;p35=0;p36=0;p37=0;P0=0xc0;//显示0p34=1;p35=0;p36=0;p37=0;Delay<200>;p34=0;p35=0;p36=0;p37=0;P0=0xc0;//显示0p34=0;p35=1;p36=0;p37=0;Delay<200>;p34=0;p35=0;p36=0;p37=0;if<SET==1>{P0=LEDData[g];dp=0;//显示上限温度个位}else{ P0=LEDData[k];dp=0;}p34=0;p35=0;p36=1;p37=0;Delay<200>;p34=0;p35=0;p36=0;p37=0;if<SET==1>P0=LEDData[f];//显示上限温度十位else{if<f==0>P0=0x00;//不显示下限温度十位elseP0=LEDData[j];//显示下限温度十位}p34=0;p35=0;p36=0;p37=1;Delay<200>;p34=0;p35=0;p36=0;p37=0;//关闭显示Delay<20>;}/*****外部中断0服务程序*****/voidint0<void>interrupt0{EX0=0;//关外部中断0sign=1;if<SET==1>shangxian++;elsexiaxian++;Delay<500>;EX0=1;}/*****外部中断1服务程序*****/voidint1<void>interrupt2{EX1=0;//关外部中断0sign=1;if<SET==1>shangxian--;elsexiaxian--;Delay<500>;EX1=1;}/*****主函数*****/voidmain<void>{uintz;IT0=1;IT1=1;EX0=1;EX1=1;EA=1;ReadTemperature<>;LING=0;for<z=0;z<100;z++>{Disp_init<>;}while<1>{Disp_Temperature<>; if<sign==1> { for<z=0;z<300;z++> disptiaozheng<>; sign=0; }}}六、系统调试〔一调试方法单片机应用系统样机组装好以后,便可进入系统的在线〔联仿真器调试,其主要任务是排除样机硬件故障,并完善其硬件结构,试运行所设计的程序,排除程序错误,优化程序结构,使系统达到期望的功能,进而固化软件,使其产品化。单片机应用系统的硬件和软件调试是交叉进行的,但通常是先排除样机中明显的硬件故障,尤其是电源故障,才能安全地和仿真器相连,进行综合调试。本设计调试过程中所用的调试方法有:静态测试、联仿真器在线调试等。软件调试所使用的方法有:计算程序的调试方法、I/O处理程序的调试法、综合调试法等。〔二调试过程及现象计算程序的错误是一种静态的固定的错误,因此主要用单拍或断点运行方式来调试。根据计算程序的功能,事先准备好一组测试数据。调试时,用防真器的写命令,将数据写入计算程序的参数缓冲单元,然后从计算程序开始运行到结束,运行的结果和正确数据比较,如果对有的测试数据进行测试,都没有发生错误,则该计算程序调试成功;如果发现结果不正确,改用单步运行方式,即可检查出错误所在。计算程序的修改视错误性质而定。若是算法错误,那是根本性错误,应重新设计该程序;若是局部的指令有错,修改即可。如果用于测试的数据

温馨提示

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

评论

0/150

提交评论