题目:基于热敏电阻的数字温度计 专业:新能源科学与工程 班级: 成员:
1 设计任务及要求 设计任务:使用热敏电阻类的温度传感器件利用其感温效应,将随被测温度变化的电压或电流用单片机采集下来,将被测温度在显示器上显示出来。 要求:(1)测量温度范围?50℃~110℃。(2)精度误差小于0.5℃。(3)LED数码直读显示。 本题目使用铂热电阻PT100,其阻值会随着温度的变化而改变。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。厂家提供有PT100在各温度下电阻值值的分度表,在此可以近似取电阻变化率为 0.385Ω/℃。向PT100输入稳恒电流,再通过A/D转换后测PT100两端电压,即得到PT100的电阻值,进而算出当前的温度值。 采用2.55mA的电流源对PT100进行供电,然后用运算放大器LM324搭建的同相放大电路将其电压信号放大10倍后输入到AD0808中。利用电阻变化率0.385Ω/℃的特性,计算出当前温度值。 我们也考虑到当测量温度低于(或高于)所测温度时会对该测量装置造成损坏,所以可以添加一个温度报警装置,因为该课程并无严格要求,所以在下面我们会简单带过。
2 方案设计与论证 2.1温度传感器的选择 方案一: 采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(热电偶的构成如图 2-1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。 图 2-1热电偶电路图 系统主要包括对A/D0808的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。还有复位电路,晶振电路,启动电路等。故现场输入硬件有手动复位键、A/D 转换芯片,处理芯片为51 芯片,执行机构有4 位数码管、报警器等。系统框图如 2-1-2所示: 图 2-1-2热电偶温差电路测温系统框图 方案二 我们用铂电阻PT100作为传感器。热电阻PT100是最常用的温度传感器之一,与其他热敏电阻相比,它的主要优点是测量精度高(可精确到0.1摄氏度),线性度好,测量范围广(-200℃~650℃),性能稳定,使用方便,完全满足设计要求,所以我最终选择铂电阻PT100采用热敏电阻PT-100测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1 摄氏度。当PT100在0摄氏度的时候他的阻值为100欧姆,它的阻值会随着温度上升而成近似匀速的增长。,测温系统的结构就比较简单,体积也不大。采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。 该系统利用AT89C51芯片控制温度传感器数码显示器进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间。系统框图如图 2-1-3所示: 图2-1-3温度测温系统框图 从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。 2.2微处理器ADC0808 ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件(如图2-2)。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。 ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。各引脚功能如下: 1~5和26~28(IN0~IN7):8路模拟量输入端。 8、14、15和17~21:8位数字量输出端。 22(ALE):地址锁存允许信号,输入,高电平有效。 6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。 12(VREF(+))和16(VREF(-)):参考电压输入端 11(Vcc):主电源输入端。 13(GND):地。 23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路 图2-2微处理器ADC0808 3系统硬件电路设计 3.1 系统时钟电路设计
系统时钟电路的设计如图3-1。对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10 PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。实验表明,这2个电容元件对闹钟的±走时误差有较大关系。 3.2系统复位电路 智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:1)RC复位电路;2)专用μP监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。 专用μP监控电路又称电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能。按有效电平分,有高电平输出、低电平输出两种;按功能分,有简单的电源监视复位电路、带“看门狗”定时器(WATCH DOG,又简称“WDT”)的监控电路、和WDT+EEPROM的监控电路等多种类型。比较常见的生MAX813L、MAX809、X25043/5等。
本系统采用的是这种复位方式。RC复位电路的实质是一阶充放电电路,现结合图说明这种复位电路的特点。系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。理论上说,51系列单片机复位引脚只要外加2个机器周期的有效信号即可复位,即只要保证t=RC>2M(机器周期)便可,但实际设计中,通常取C1为10μF以上,R1通常取10K左右。实践发现R1如果取值太小,例如1K,则会导致RST信号驱动能力变差而无法使系统可靠复位。另外,从图3-2-2的复位信号波形图可以明显看出,图3-2-1中的虚线所接的续流二极管D1对于改善复位性能,起到了重要作用,它的作用是在电源电压瞬间下降时使电容迅速放电,因此一定宽度的电源毛刺(如波形中A点)也可令系统可靠复位。图3-2-2为未加二极管和加二极管的复位信号特性对比。 图3-2-2 加二极管前后的复位信号特性对比 3.3 基于热敏电阻的温度计电路设计 测量部分可以采用热敏电阻,热电偶及温度传感器。由于精度要求不高,故我们通过热敏电阻实现温度的测量功能,同时也是为了按照课题要求采用热敏电阻。信号放大部分为使信号不失真,就得保证电路的对称性,所以我们采用单端输入双端输出的差动放大电路进行信号的变换,同时用高精度,低漂移的运放来代替晶体三极管。 A/D转换部分CPU8051通过P0口P0.0-P0.2向A/D发送模拟的地址编码信息,并通过地址线P2.0和写控制线 控制地址编码信号的锁存。选通相应的模拟输入通道,然后启动A/D转换。当转换结束后,A/D经过EOC发出标志信号,经反相后送入8051向8051发出中断请求,当8051响应请求后,通过P2.0的读控制端 使A/D的OE端变为高电平,从而控制转换器的三态数据输出,锁存器通过P0口P0.0-P0.7向8051输出。 我们控制器使用单片机AT89C51,温度计数码显示部分用74LS164驱动显示。,另外我们用一个PNP型的三极管来控制数码管的电源,是因为164没有数据锁存端,数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,在数据传送过程中,关闭三极管使数码管没电不显示,数据传送完后立刻使三极管导通,这样就实现锁存功能。 3.4基于热敏电阻的温度计系统仿真测试 确定好方案后,用Protues软件搭建好系统电路,将写好的程序添加进仿真图中,仿真结果如图3-4所示: 图3-4热敏电阻温度计的仿真图
3.5参数计算与元器件清单 表3-5热敏温度计整机元器件清单 | | | | | | | | 使其正常工作和采集模数转换后的数字信号,使用软件滤除干扰,并对数字信号进行计算,然后输出显示。 | | | | | 采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。 | | | | | | | | | |
| | | | | | | | | | 是低成本的四路运算放大器,具有真正的差分输入。该四路放大器可以工作于低至3.0 V或高达32 V的电源电压。 | | | | | | | | | | 当温度变化时,电桥处于不平衡状态,从而输出不平衡电压,为测温的基础。 | |
4 软件设计 4.1 主程序流程图
图 4-1主程序流程图 4.2基于热敏电阻温度计的简单报警器框图 图 4-2 报警模块子程序流程图 4.3 C语言实现 - #include<reg52.h>
- #include<math.h>
- #define uchar unsigned char
- sbit STAR=P2^4;
- sbit EOC=P2^6;
- sbit CLOCK=P2^5;
- sbit OE =P2^7;
- sbit P20=P2^0;
- sbit P21=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- uchar dispbuf[6];
- uchar code
- table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code
- table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xdf};
- void TimeInitial()
- {
- TMOD=0x10;
- TH1=(65536-200)/256;
- TL1=(65536-200)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
- void Delay(uchar i)
- {
- unsigned int j;
- for(;i>0;i--)
- {
- for(j=0;j<125;j++) {;}
- } }
- void t1(void) interrupt 3 using 0
- {
- TH1=(65536-200)/256;
- TL1=(65536-200)%256;
- CLOCK=~CLOCK;
- }
- void Display()//
- {
- P0=table1[dispbuf[1]];
- P20=0;
- P21=1;
- P22=1;
- P23=1;
- Delay(10);
- P0=0x00;
- P0=table2[dispbuf[2]];
- P20=1;
- P21=0;
- P22=1;
- P23=1;
- Delay(10);
- P0=0x00;
- P0=table1[dispbuf[1]];
- P20=1;
- P21=1;
- P22=0;
- P23=1;
- Delay(10);
- P0=0x00;
- P0=table1[dispbuf[0]];
- P20=1;
- P21=1;
- P22=1;
- P23=0;
- Delay(10);
- P0=0x00;
- }
- void main()//主函数
- {
- uchar getdata,temp;
- uchar count=0;
- uchar i=0;
- TimeInitial();
- while(1)
- {
- STAR=0;//关闭转换
- OE=0;//关闭输出
- STAR=1;//开启转换
- STAR=0;//关闭转换
- while(EOC==0)
- {
- OE=1;//开启数据输出允许
- Delay(10);
- getdata=P1;
- OE=0;
- temp=getdata*1.0/255*500;
- dispbuf[0]=temp%10;
- dispbuf[1]=temp/10%10;
- dispbuf[2]=temp/100%10;
- Display();
- }
- } }
复制代码
5 组装调试 5.1 单片机测试 判断单片机芯片及时钟系统是否正常工作有一个简单的办法,就是用万用表测量单片机晶振引脚(18、19脚)的对地电压,以正常工作的单片机用数字万用表测量为例:18脚对地约2.24V,19脚对地约2.09V。对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9脚对地电压为零,可以用导线短时间和+5V连接一下,模拟一下上电复位,如果单片机能正常工作了,说明这个复位电路有问题。 5.2硬件及软件调试 硬件调试:第一步是目测,在印好电路板之后,先检查印制线是否有断线、是否有毛刺、是否与其它线或焊盘粘连、焊盘是否有脱落、过孔是否有未金属化现象。而在目测的过程中,我们发现有一条印制线断开,因此我们用焊锡使这条断线连在一起。第二步是用万用表测量。在目测完之后,利用万用表来测量连线和接点,检查它们的通断状态是否和设计一样。再检查各种电源线和地线是否有短路现象,在检查的过程中,发现不管是连线还是接点都符合设计规定,电源和地线也没有短路现象。第三步是加电检查。给印制板加电时,我们检查到的器件的电源端符合要求的电压值+5V,同时接地端的电压为0。第四步是联机检查。利用系统和单片机开发系统用仿真电缆连接起来,发现联机检查完后以上是连接都正确、畅通、可靠。 软件调试:第一步是在具有汇编软件的主机上和用户系统连接起来,进行调试准备。第二步是单步运行。第三步是系统连调,即进行软件和硬件联合调试。经调试,软件运行良好。 5.3整机的调试与测试 首先是测试显示电路的正确性,根据硬件写好一段显示程序,写入单片机中。安装好硬件,上电,显示正常,达到预期效果。证明显示电路正常。按下复位按键,LED无显示,松开,显示正常,证明复位电路正常。 然后测试得到温度程序,将初始化程序,热敏电阻正常工作的初始化程序、写热敏电阻程序、读热敏电阻程序,得到温度子程序,温度转换子程序,数据转换子程序,显示子程序正确编排后写入单片机中,上电,显示不正常。重新读取源程序,经检查后发现问题在于热敏电阻初始化程序有错,修改后重新编译并写入单片机。上电后,显示当前温度。证明温度传感器热敏电阻工作正常,各部分子程序运行正常。 最后是按键子程序及报警子程序的调试,将按键子程序及报警子程序及上述程序正确编排后,写入单片机中,上电后,各个部分工作正常,在测得当前温度超出设定温度上下限后,蜂鸣器发出报警声,调试基本成功。但后来发现,按键要在按下1S后才反应,再次研读程序发现原因在于按键程序采用扫描方式,程序每执行一遍才扫描按键一次。进而到考虑采用中断方式解决此问题,但因为热敏电阻正常工作有严格的时序限制,否则不能正常工作,而中断则在很大可能上会影响到热敏电阻正常工作。在尝试并采用中断方式却失败后,决定仍采用扫描方式。后来仔细排查发现按键反应迟缓是由于显示程序占用时间过长造成的,修改显示程序并且在主程序和按键子程序中增加调用显示程序的次数,问题得以解决。至此,此次设计的调试部分完成。设计的所有功能全部得以实现 6 结论与心得 本设计利用AT89C51 芯片控制温度传感器热敏电阻,再辅之以部分外围电路实现对环境温度的测控,性能稳定,精度教高,而且扩展性能很强大。可以加入1302 时钟芯片实现对时间进行显示,加之AT89C51存储芯片来实现对时间和温度数据的记录,利用MAX232芯片和计算机实现串口通讯,这样就可以方便的统计出特定时间内的需要的时间和温度数据。由于测量精度只有±1 度,往往很多场合需要更加精确的温度,在所测温度精度不变的基础上必须对数据进行校正。不过,其误差在时间和外部环境变化的条件下,保持相当高的稳定性。针对这一特性,基于线性插补的数学思想,利用DSP技术,对其进行误差校正补偿.这种误差校正的补偿方法,不需增加硬件电路,计算方法简单,软件费用也很小,既提高了测量精度,又不需增加成本。它充分利用监控计算机上用线性插补的数学方法对其进行误差校正补偿,能轻易地将其提高其精度。 经过将近三周的单片机课程设计,终于完成了我们的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀! 在本次设计的过程中,我们发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我们长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我们觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我们用的都是BCD码,这一次,我们全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
完整的Word格式文档51黑下载地址:
|