1、 嵌入式设计基于热敏电阻的数字温度计设计 院(系) 专 业 班 级 指导老师 学生姓名 成 绩 2015 年 7 月 10 日目 录第一章 绪论 .1第二章 设计要求及构思 .12.1 设计要求 12.2 设计构思 2第三章 总体程序流程图 .3第四章 原理框图 44.1PT100 铂热电阻: 44.2 信号放大电路 44.4 主芯片电路图 64.5 四位数码管 7第五章 仿真电路图 8第六章 心得体会 .10参考文献 11附录 程序代码 120第一章 绪论随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一
2、。随着工业的不断发展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。目前温度计按测使用的温度计种类繁多,应用范围也比较广泛,大致可以包括以下几种方法:1,利用物体热胀冷缩原理制成的温度计 2,利用热电效应技术制成的温度检测元件 3,利用热阻效应技术制成的温度计 4,利用热辐射原理制成的高温计 5,利用声学原理进行温度测量本系统的温度测量采用的就是热阻效应。温度测量模块主要为温度测量电桥,当温度发生变化时,电桥失去平衡,从而在电桥输出端有电压输出,但该电压很小。将输出的微弱电压信号通过 OP07 放
3、大,将放大后的信号输入 AD 转换芯片,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。1第二章 设计要求及构思2.1 设计要求1.系统硬件设计(1)使用热敏电阻 PT100;(2)单片机采用 MCS51 系列;(3)LED 数码管显示温度。2.系统软件设计(1)温度可以通过 PT100 热敏电阻实调程序;(2)AD 转换芯片检测温度的模拟量程序;(3)LED 显示程序;3.系统功能 (1)测量温度范围50110;(2)精度误差小于 0.5;(3)LED 数码管显示。 2.2 设计构思(1)本题目使用铂热敏电阻 PT100,其阻值会随着温度的变化而改
4、变,PT100 后的 100 即表示它在 0时阻值为 100 欧姆,在 110时它的阻值约为142.29 欧姆,在-50它的电阻值为 80.31 欧姆。厂家提供有 PT100 在各温度下电阻值值的分度表,在 0到 110电阻的变化率为(142.29-100)/110 0.3845/, 在-50 到 0电阻的变化率为(100-80.31)/50=0.3938/。向PT100 输入稳恒电流,使 PT100 输出的电压与其内部电阻成线性关系变化。(2)其输出的的电压是模拟信号,需要进行模数转换后才能被有效显示。查找相关模数转换元器件后暂选 ADC0808 进行模数转换,其有效电压为 05V。向 PT
5、100 输入稳恒电流,再通过 A/D 转换后测 PT100 两端电压,即得到 PT100 的电阻值,进而算出当前的温度值。(3)由于 0.385 相对于 100 多欧姆的电阻来说很小,即温度变化 1时输出的电压变化量很小,这么小的电压不能改变 ADC0808 输出的一个数字信号。所以要对 PT100 输出的电压进行放大。放大倍数是根据最大测量温度确定的,即110时输出的电压不能超过+5V,否则测量不到 110 的温度,最终经调试后取放大倍数为 36。再将放大后的电压输入 ADC0808 模数转换器。(4)综上所述。采用 2.49V 的电压与运算放大器搭建成的恒流源对 PT100进行供电,然后用
6、运算放大器 OP07 搭建的同相放大电路将其电压信号放大 36 倍后输入到 ADC0808 中。ADC0808 根据输入 0 到 5V 的电压,转换成对应的十进制 02到 255 数字。再利用电阻变化率的特性,计算出当前温度值,数码管直接显示温度。由于本设计要求测量的最大温度为 110,所以本人设计时使+5V 的电压对应温度 110。通过电压变化量求出电阻的变化量,再通过电阻变化率的特性求出温度的变化量,然后用 110 与温度变化量相比较即可求得当前的温度。3第三章 总体程序流程图0.2ms开始定时器初始化Pt100 检测温度ANCEWENDU给 ADC0808 一个时钟脉冲0.2msPt10
7、0 电阻变化电压变化仪表放大器放大电压ADC0808 模数转换0+5V取出模数转换后的值数码管显示温度0255计算温度4第四章 原理框图4.1PT100 铂热电阻:E-S-S+E+8.0E+S+S-E-RT1RTD-PT10 图 4-1 PT100 铂热电阻pt100 是铂热电阻,它的阻值会随着温度的变化而改变。PT 后的 100 即表示它在 0时阻值为 100 欧姆,在 100时它的阻值约为 138.5 欧姆。4.2 信号放大电路:IN0E+ E-S+S-XTAL218XTAL119ALE30E31PSN29RST9P0./AD0390.1/ 138P0.2/AD2370.3/ 336P0.
8、4/AD4350.5/ 534P0.6/AD630.7/ 732P1.0/T211./T2EX2P1.2/CI31.3/EX04P1.4/C151.5/EX26P1.6/C371.7/EX48P3.0/RXD103.1/T 1P3.2/INT0123./IT113P3.4/T014P3.7/RD173.6/W163.5/T115P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427U18051+8.8VoltsR22.5k+12V-12VR310k R410k R510k32 67481U5OP0732 67481
9、U6OP0732 67481U7OP07R610k 32 67481U8OP07R71kR81k R912kR1012k+12-12V+12V-12V+12V-2V+5V+2.49V+8.8Volts+8.8Volts图 4-2 放大电路图采用 OP07 搭建成仪表运算放大器,Vout=(V2-V1)x(1+2R5/R4 x(R9/R7) ,其中R5=R6,R7=R8,R9=R10。本设计的放大倍数为 36。4.3A/D 转换电路V1V25A7A6A5A4A3A2A1A0D3D1D2D1IN0D4OUT1 21AD B24 AD A25 AD C23VREF(+)12 VREF(-)16IN3
10、1 IN42 IN53IN64 IN75START6OUT5 8EOC7OE9CLOCK10OUT2 20OUT7 14OUT6 15OUT8 17OUT4 18OUT3 19IN228 IN127 IN026ALE2U2ADC0808图 4-3 ADC0808 电路图ADC0808 是采样分辨率为 8 位的、以逐次逼近原理进行模/数转换的器件。其内部有一个 8 通道多路开关,它可以根据地址码锁存译码后的信号,只选通 8 路模拟输入信号中的一个进行 A/D 转换。模拟信号输入 0 到 5V 电压,8 位数字输出端口输出二进制 00000000 到 11111111,即十进制 0 到 255,所
11、以分辨率为5V/2550.0196V。例如输入的信号为+5V 电压时,其输出为数字 255。ADC0808 芯片有 28 条引脚,采用双列直插式封装,如图 4-3 所示。各引脚功能如下:15 和 2628(IN0IN7):8 路模拟量输入端。8、14、15 和 1721:8 位数字量输出端。22(ALE):地址锁存允许信号,输入,高电平有效。6(START): A/D 转换启动脉冲输入端,输入一个正脉冲(至少 100ns 宽)使其启动(脉冲上升沿使 0809 复位,下降沿启动 A/D 转换)。7(EOC): A/D 转换结束信号,输出,当 A/D 转换结束时,此端输出一个高电平(转换期间一直为
12、低电平)。9(OE):数据输出允许信号,输入,高电平有效。当 A/D 转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。10(CLK): 时钟脉冲输入端。要求时钟频率不高于 640KHZ。12(VREF(+)和 16(VREF(-):参考电压输入端11(Vcc):主电源输入端。13(GND):地。2325(ADDA、ADDB、ADDC):3 位地址输入线,用于选通 8 路模拟输入中的一路ADC0 808/0809 工作时序图如下:6图 4-4 ADC0808 转换时序示意图当 START 上收到一个启动转换命令(正脉冲)后,8 位 A/D 转换器开始对输入端的信号进行转换,100
13、us 后转换结束,转换结果 D(028-1)存入三态输出锁存缓冲器,转换结束信号 EOC 由低电平变为高电平,通知 CPU 可以读结果。CPU 可用查询方式(将 EOC 信号接至一条 I/O 线上)或中断方式( EOC 信号作为中断请求信号导入中断逻辑)了解 A/D 转换过程是否结束。4.4 主芯片电路图A0A1A2A3A4A5A6A7D1D2D3D4XTAL218XTAL119ALE30EA31PSEN29RST9P0./AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P1.0/T21P1./
14、T2EX2P1.2/ECI3P1.3/CEX04P1.4/CEX15P1.5/CEX26P1.6/CEX37P1.7/CEX48P3.0/RXD10P3.1/TXD1P3.2/INT012P3./INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A1 24P2.4/A1225P2.5/A1326P2.6/A1427U18051C110uR110k2p X1CRYSTAL2p图 4-5 8051 电路图采用 8051 单片机作为主芯片,由于 P0 口内部没有上拉电阻,所以 P0 口
15、作为输出要接上拉电阻。74.5 四位数码管图 4-6 七段四位数码管图本设计最大显示为三位小数和一位小数,所以采用七段四位共阴数码管,其中段接 8051 的P0 口,位接 8051 的 P2.0P2.3 口。8第五章 仿真电路图 图 5-1 温度为 110显示的温度图 5-2 温度为 112显示的温度本设计测量的最大温度为 110,当温度大于 110时依然显示为 110。这是因为温度为 110时输入 ADC0808 的电压为最大值,即+5V,当温度大于 110时,输入 ADC0808 的有效电压依然为+5V。图 5-3 温度为 91 度时显示的温度随机选择-50110 的一个温度,实际为 91
16、 的温度,测量值为 91.1,符合要求的 0.5 度的范围内。图 5-4 温度为 0 时显示的温度温度为 0 时,检测的温度为-0.2。线性关系好,符合设计要求。9图 5-5 -26 度时所显示的温度实际温度为-26 度时,测量的温度为-25.8 度,符合设计要求。图 5-6 温度为-50时所显示的温度图 5-7 温度为-51所显示的温度本设计测量的最小温度为-50,当温度低于-50时,输出数码管的值无效,显示为 0。10第六章 心得体会11参考文献1黄勤,单片机原理及应用,北京,清华大学出版社,2006 年。2郭天祥,51 单片机 C 语言教程,北京,电子工业出版社,2012 年。12附录
17、程序代码#include#include #define uchar unsigned char sbit STAR=P24; sbit EOC=P26; sbit CLOCK=P25; sbit OE =P27; sbit P20=P20;sbit P21=P21; sbit P22=P22; sbit P23=P23; uchar getdata; double change;long int temp;uchar dispbuf6; uchar code table1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/无小数点
18、 “09“,“-“uchar code table2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /带小数点“09“;/*定时器初始化程序*/void TimeInitial() TMOD=0x10; /定时器 1 选择 216TH1=(65536-200)/256; /赋初值,定时 0.2 毫秒TL1=(65536-200)%256; EA=1; /开中断允许ET1=1; TR1=1; /开定时器 1/*延时程序*/ void Delay(uchar i) 13 unsigned int j;for(;i0;i-) for(j=0;j
19、2.82) /计算并显示-500 的温度 aveT=(100.0-80.31)/50.0; /PR=100.0-aR;aT=10*(PR/aveT);temp=(long int)aT;dispbuf0=temp%10; /计算小数位dispbuf1=temp/10%10; /计算个位dispbuf2=temp/100%10; /计算十位dispbuf3=10; /使显示-号/ if(temp%2=0)15/ temp=temp-5;else /计算并显示 0110 的温度 dispbuf0=temp%10; dispbuf1=temp/10%10; dispbuf2=temp/100%10; dispbuf3=temp/1000; /显示百位Display(); /调用显示函数 /*主函数*/void main() TimeInitial(); while(1) STAR=0;/关闭转换OE=0;/关闭输出STAR=1;/开启转换STAR=0;/关闭转换while(EOC=0) OE=1;/开启数据输出允许Delay(10); /延时getdata=P1; /模数转换后的值赋给 getdataOE=0;PT100( ); /调用温度计算函数