目录引言…………………………………………………………… 2第1章 技术指标…………………………………………… 3 整体功能要求………………………………………… 系统功能要求………………………………………… 电压指标……………………………………………… 设计条件……………………………………………… 3第2章 整体方案设计……………………………………… 5 数据处理流程分析…………………………………… 5 整体方案……………………………………………… 5 方案一………………………………………… 5 方案二………………………………………… 6 方案比较……………………………………… 14第3章 单元电路设计………………………………………… 16 温度数据采集电路…………………………………… 16 单片机电路设计……………………………………… 整体电路……………………………………………… 整机元件清单………………………………………… 18第4章 测试与调整…………………………………………… 19 温度采集电路测试……………………………… … 19 模数转换电路测试…………………………………… 20 单片机电路测试……………………………………… 21 整体指标测试………………………………………… 23第5章 设计小节 ……………………………………………… 24 设计任务完成情况…………………………………… 24 问题及改进…………………………………………… 24 心得体会……………………………………………… 25附录一:实物图………………………………………………… 28附录二:原理图………………………………………………… 29附录三:原理图草图…………………………………………… 31致谢:…………………………………………………………… 33引言 在日常的生活生产中,我们有时候要知道现场的温度,或是某单元位置的温度。但是普通的温度计多为长条的,需要读刻度的,不利于我们对温度的监控。如果有一个单元的温度对整个的系统很重要,我们就要关注它的工作状况,以便使系统工作在一个良好的环境中。一但高于某个温度将会对我们的系统不利,我们如何知道到达了一个很高的温度呢?很显然,我们要通过观察温度的数值,生活中常用的那种温度计不利于这样的操作及控制。这样就诞生了我们要做一个温度测量仪,它可以实时的显示现场的温度,并能在超过我们设置温度的时候给以报警。第1章 技术指标 整体功能要求 设计的温度测量仪器能够测量和显示测量的温度,当温度超过设定值后,发出超温指示或报警。报警温度的设定可以根据需要自定。 系统结构要求 温度测量仪的整体框图如图 1-1 所示。图 电压指标 温度测量范围:0 ~99 。 显示精度:1 。 测温灵敏度:20mV/ 。 显示采用四位数码管。 温度报警采用LED发光二极管或蜂鸣器。 报警温度可以任意的设定。 设计条件 电源条件:稳压电源0V~15V可调。 参考器件:表1-1型号 名称及功能 数量LM35 温度传感器 1TL084 运算放大器 1ADC0804 八路A/D转换器 128C64B EEPROM存储器 1 其他器件可适当选取。 表1-1第2章 整体方案设计数据处理流程分析 数据处理流程分析如图2-1所示。 图 整体方案 方案一 如图2-2 用组合逻辑电路来实现。设计原理此电路通过LM35采集外界温度,10mV/ ,采集的数据通过TL084进行两倍的放大,以来适应ADC0804的转换。ADC0804将接收到的模拟数据用逐次逼近的方法转换成数字量,但此时的数据量是二进制码,不能和译码电路的4511相吻合,于是我们将二进制进一步的转换成BCD码。转化的方案是将0~99以十六进制码的形式写入EEPROM,通过ADC0804的二进制量来进行寻址,如果 图2-2二进制码为0010 0010B,转换成十进制就是34D,我们在EEPROM的地址为0010 0010B的位置存储0x34,这样EEPROM的输出将是0011 1000B,前面的四位给译码显示电路的高位刚好是3的BCD码,后面的四位给译码显示的低位,刚好是4的BCD码,从而完成了将二进制转换成十进制的任务。同时将转换后的BCD码安高地位传向两片比较芯片7485,用来与温度设置电路设置好的BCD码进行大小的比较,比较后的逻辑通过7400的组合来驱动发光二极管。当温度达到或高于预设温度的时候发光二极管将亮,其余的情况发光二极管熄灭,从而达到报警的效果。 方案二 如图2-3所示用单片机加模数转换的外围电路实现。图2-3设计原理 此电路通过LM35采集外界温度,10mV/ ,采集的数据通过TL084进行两倍的放大,以来适应ADC0804的转换。ADC0804将接收到的模拟数据用逐次逼近的方法转换成数字量,数字量通过单片机的P1口传入单片机,S1,S2是用来设置报警温度的。S1设置高位,循环步进,从0~9循环。S2用来设置地位,和S1一样循环的步进,从0~9循环。单片机把接受的数据来和收到的P1口接到的实时温度数据进行比较,以控制发光二极管的报警。同时单片机把P1口的数据和设置的报警温度数据通过P0口送给四位数码管。程序流程图如图2-4-1、图2-4-2所示。图2-4-1图2-4-2程序代码#include <>#define uint unsigned int#define uchar unsigned charuchar code table[]={ //数字0~90xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code clc[]={0x7f,0xbf,0xdf,0xef};sbit p3_2=P3^2;sbit p3_6=P3^6;sbit p3_7=P3^7;uchar data1,data2,h,l,num,h1,l1,h12,flag;void init(); //初始函数void delay(uint z); //延时函数void main(){ init(); while(1) { P1=0xff; data1=P1; data2=data1; h=data2/10; l=data2%10; h12=h1*10+l1; if(data2>=h12) { flag=1; } else { flag=0; } }}void init() //初始函数{ TMOD=0x01;//设置计数器工作方式 TH0=(65536-5000)/256;//装初值 TL0=(65536-5000)%256; EA=1;//开总的中断 IE0=0; EX0=1;//开外部中断0 PT0=1;//设置外部0的中断为高优先级 IT0=1;//下降沿有效 ET0=1;//开计数器0的中断 TR0=1;//启动计数器0 h=0; l=0; P0=0; P2=0xf8; num=0; h1=2; l1=0; }void timer0() interrupt 1 using 1//计数中断子程序{ //显示刷新程序 TH0=(65536-5000)/256; TL0=(65536-5000)%256; if(num==3) { P0=~table[l1]; P2=clc[num]; } if(num==2) { P0=~table[h1]; P2=clc[num]; } if(num==1) { P0=~table[l]; P2=clc[num]; } if(num==0) { P0=~table[h]; P2=clc[num]; } num++; if(num==4) { num=0; } if(flag==1) { p2_3=0; } else { p2_3=1; }}void INTSP(void)interrupt 0 using 1//外部中断子程序{ EX0=0; P3=0xff; delay(50); p3_2=1; if(~p3_6&&p3_7) { h1++; if(h1==10) { h1=0; } } else if(~p3_7&&p3_6) { l1++; } if(l1>=10) l1=0; while(~p3_2) {;} EX0=1;}void delay(uint z)//延时函数 大约为1ms{ uint i,j; for(i=z;i>0;i--) { for(j=110;j>0;j--); }} 方案比较 方案一:组合逻辑电路,原理简单、思路清晰。但所用芯片比较多,连线不方便。因本次设计电路用面包板做,一旦电路出现故障检查起来很麻烦。 方案二:用单片微型计算机即单片机做,外围电路简单,连线方便,而且用单片机可以把方案一中的,控制用的两片芯7485和译码的两片芯片4511以及B/D转化的EEPROM都可以集成到单片机里面。我们只用给单片机编写简单的代码就可以来实现以上组合逻辑的功能。第3章 单元电路设计 温度数据采集电路 温度数据采集电路如图3-1所示。 图 单片机电路设计 单片机电路设计如图3-2所示。 图 整体电路整体电路图如图3-3所示。(详图见附录二) 图 整机元件清单元件型号 名称及功能 数量LM35 温度传感器 1TL084 运算放大器 12K电阻 410K电阻 21K电阻 1自复开关 3ADC0804 模数转换器 1101电容 1103电容 110uF电容 1STC89C52RC 单片机 晶振 130pF电容 27400 四输入与非门 1四位数码管 1排阻1K*8 1发光二极管 1导线 若干面包板 1第4章 测试与调整 温度采集电路测试 温度采集电路测试方法如图4-1所示。 图4-1 测试方法:将数字万用表的黑表笔放到电源的地,将红表笔放到红表笔1的位置,看数字万用表上显示的毫伏数值上是不是现场温度的10倍左右。因LM35的温度灵敏度是10mV/ ,所以电压和温度在数值上应有上述关系。如LM35是完好的,在电源连接正确的前提下,我们在红表笔1的位置测的的数据都是正确的。再将手或者高于现场温度的东西给LM35加热,看万用表显示的度数是否缓慢的上升,并和现场温度程线性关系。再把红表笔放到红表笔2的位置,测量此处的电压,看是否是红表笔1位置电压的两倍,因我在在设计运算放大器的时候就是为了让红表笔2位置的电压是红表笔1位置电压的两倍,以便于和ADC0804连接。 可能出现的问题及解决:在红表笔2的位置测的电压和红表笔1位置的电压不是两倍关系。这个问题可能是由于放大器用损坏或做同向比例放大器的两个电阻有问题,或者运算放大器的正负电源没有连接正确。可以仔细的检查电源,如连接正确可以用电压跟随器的方法看放大器是否完好。如果以上都可以正常的工作,愿意可能就出在两个电阻上,用万用表测量,看两个电阻是不是一样大。通过上诉方法可以将问题解决。 模数转换电路测试。 模数转换电路测试方法如图4-2所示。 图4-2测试方法:如图4-2将示波器黑表笔和万用表黑表笔放好,将示波器的红表笔和万用表红表笔放好。打开示波器,看有无波形,如图4-3 如图4-3如没有看到波形,那就是R C振荡电路出了问题,将无法给ADC0804提供时钟。在时钟正常的情况下,用万用表测试ADC0804的数字输出端是否有数据输出,可能会遇见全高或全低的情况,可以按一下自复开关S1启动ADC0804的转换。用万用表测试输出脚的高低电平并转化成十进制看是否和输入的小电压信号温和。如输入的电压是500mV,那么数字量输出的就应该是50的二进制。如有少量的偏差,可以用万用表量一下VREF/2即9号管脚的电压是不是。如不是,可以微调电源,是它在左右。如在电压固定的情况下可以改变分压电阻R2的值以获得合适的电压。 单片机电路测试 单片机电路测试如图4-4所示。图4-4测试方法:给单片机上电,在已经下载过程序的情况下数码管的后两位已经可以正确的显示预设的温度20了。前两位的数字可能是乱码,因为在P1口没有数据的时候默认的数据都是高,即为1111 1111B为255。这个数据已经溢出了,所以是乱码。在后两位正确显示的情况下按动自复开关S1会看到后两位数码管的十位会以步进长1步进,到达9后,再步进就会从0开始,从而达到调整预设温度十位的任务。按动自复开关S1会看到后两位数码管的个位会以步进长1步进,到达9后,再步进就会从0开始,从而达到调整预设温度个位的任务。通过单片机的处理这两位的数据会被整合到一起作为报警信号产生的依据。在测试的同时,你会发现报警的发光二极管是一直亮的,这就是刚才说的数据溢出造成的,当全1的时候,数据肯定的大于预设的数据。在测试正常的情况下可以将固定的数据(二进制)通过阴线的方式接到单片机的P1口,看数码管的前两位显示的数据是不是你输入的数据,这样适当的调整输入数据,观察显示就可确定单片机是否能正确的接收外界传入的数据并进行数据处理了。同时设置一个报警温度,看是否当输入的数据等于或高于这个值得时候报警。从而完成对单片机的调试。如果发现不是外围电路的问题,而是单片机内部的逻辑出现了问题,可以在编程的时候用单步跟踪的方法进行软件上的调试,发现并改正错误,一般来说都是很简单的。 整体指标测试 测试数据如表4-1。温度显示 28 35 40 45 50 55 60 65传感器电压 mV 277 343 389 452 493 566 617 656温度显示 70 75 80 传感器电压 mV 689 756 809 表4-1测试方法:在各部分电路都已经检查正确的前提下,搭好全部的电路。启动ADC0804模数转换器,此时将会发现数码管已经可正确的显示我的预设温度和显示处理过的外界时候温度。此时用加热装置(这里用的电烙铁)给温度传感器升温,此时会看到数码管的前两位连续的变化,当到达或超过我们的预设温度的时候报警灯就会亮。可以达到我们的功能要求:设计的温度测量仪器能够测量和显示测量的温度,当温度超过设定值后,发出超温指示或报警。报警温度的设定可以根据需要自定。第5章 设计小节 设计任务完成情况 温度测量仪设计的要求:设计的温度测量仪器能够测量和显示测量的温度,当温度超过设定值后,发出超温指示或报警,报警温度的设定可以根据需要自定。经过整体电路的测试及调整,此次设计的电路已经达到了设计的要求,并且电路的运行稳定,对外部的温度实时处理显示,操作简单方便,显示准确,一目了然。电路的设计布局合理(见附录一)。 问题及改进 由于是初次使用单片机,对单片机及其外围电路的设计都不熟悉,难免有想不到的地方。后经过研究和老师的指导,发现电路可以进一步的改进。主要改进的方面有两处:(1).单片机对ADC0804的控制。在原电路的设计中,我们用ADC0804自行触发的方式使其正常工作,但工作性能不可靠,偶尔会出现死机的情况这样将会给我带来不必要的麻烦。改进的地方是通过ADC0804和单片机的通信使得ADC0804工作稳定。在ADC0804准备好的情况下将向单片机提出中断,单片机在处理中断请求的中断服务子程序里控制ADC0804开始转换(如图5-1)。(2).在本次的实验中,我是用单片机直接的对要显示的数据直接的译码,这样虽然也易于实现,但占用了单片机太多的资源,对大的电路设计不方便。虽然这次的电路简单,无需做这样的改进,但为了珍惜并合理运用单片机有限的资源,要养成好的习惯,改进电路如图5-1。将数码管的数据通过P0口的低四位给4511,P0口的高四位用来控制哪位数码管亮。 心得体会 首先,这次课程设计给我提供了一次很好的锻炼机会,提高了我动手动脑的能力,让我明白了“纸上得来总觉浅,绝知此事要躬行”的道理。这次的课程设计让我在设计方法上学会了自顶向下逐步求精的设计思想,我将电路的要求划分为以下模块:温度采集、放大、译码、比较、控制、报警六个方面。按照数据流向,从温度采集出发,设计个模块的电路图,设计所用电压、器件及其型号,搭起各自的电路,没搭好一个模块的电路就进行正确性测试,确保每一个模块都能正确的工作,这样才能确保系统能正确的工作。 其次,这次的实验让我感觉到单片机处理数据的优越性。例如: 图5-1在我的方案一中,将ADC0804转换过来的二进制转换成十进制的方案是,将0~0x99的数据写入EEPROM里面,在加上用ADC0804转换过来的二进制进行寻址,这样才可以完成转化。这样不仅要加一片芯片还要对它的100个地址写数据,是一个比较繁琐的工作。当我用第二种方案单片机实现的时候,我只要在单片机中写以下语句: H=data/10; L=data%10;其中的H,L,data分别定义的是转换成十进制的十位、个位以及从P1口读进的外界实时数据。这样的工作量进行比较,不难发现用单片机省去了不少的芯片和连线。再如在译码显示电路中,单片机只要写一个译码表就可以实现译码。uchar code table[]={ //数字0~90xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};而在方案一的组合逻辑电路中要用四片4511或者7448,这样更突出了单片机的优越性,用软件的方式集成了好多的芯片,减少了连线数,从而也为电路的安全性提供了保障,线少使出错的机会减少。一但出错,检查电路也容易检查,为系统的安全提供了保障,增强了系统的稳定性和抗干扰能力。 再次,电路的设计也让我体会到了很多的做人的道理。我生活在集体的大家庭里面,我就是大家庭的一个小小的器件,虽小但不能自暴自弃,因为集体的运行需要我的100%的努力。在实验期间我曾帮组一位同学检查故障。故障的现象是他的现场温度只能显示偶数,不能显示奇数。我逐步的排查,最后的结果是我在他的面包板上发现了一个坏的插孔,使得他的一根线和地短路。问题解决后我就想,他的板子上是好几十条线,一个地方出问题都不行,这说明没一根线的存在都有他存在的道理。这也正像我的存在,我的存在自有我存在的道理。我所要起得作用要做的事情是没有人能代替的,我的努力也是集体存在的前提。只有处理还个体,集体的关系才能使得系统工作稳定、和谐。 最后,这次课程设计让我感到很充实,很有成就感。在过去的实验中我完成的都是模块化的小电路,这次终于使得那些积累的知识得以集中体现。使我信心倍增,激励我像更高的成就攀登!附件一:实物图附件二:附录三: