基于PT100温度监测的设计.doc_第1页
基于PT100温度监测的设计.doc_第2页
基于PT100温度监测的设计.doc_第3页
基于PT100温度监测的设计.doc_第4页
基于PT100温度监测的设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

温度监测的设计电信科技08-2 韦一、课程设计内容(1)实时检测温度50C180C环境温度范围:室温20C60C;测量精度:2.5%1字;(2)用LCD1602显示其温度(小数点保留两位);(3)将温度上传到上位PC机显示。二、系统方案 2.1基本原理根据检测温度范围的要求,本设计采用铂热敏电阻PT100作为温度传感器,温度测量范围在-200850之内。热敏电阻的电阻值随着环境温度的变化而变化,其电阻值与环境温度有某种关系。本设计使用的电阻温度的关系如下:在负温区(-2000C)范围: Rt=R0(1+At+Bt2+C(t-100)T2)在正温区(0850C)范围内: Rt=R0(1+At+Bt2)式中:Rt温度t时刻铂热敏电阻的电阻值; R0温度0C的铂热敏电阻的电阻值; t介质的温度; A、B、C有关的常数,其值如下: A=3.90 502*10-3 B= -5.80195*e-7 C=-4.2735*e-12铂热敏电阻的允许误差如下:电阻温度的关系如下表:利用电桥平衡原理,已知另外三个电阻的阻值和电桥的供电电压,再测出电的桥两端的电压差,就可计算出连入电桥中的铂热敏电阻的电阻值。电桥两端电压差通过放大电路后,经过A/D转换,利用单片机读取A/D的数据,便可得到放大后的电压值,通过放大电路输入和输出的关系,可得到电桥两端的电压差,这样就可计算出铂热敏电阻的电阻值。通过铂热敏电阻阻值与环境温度有某种关系,可将电阻值转换为温度,这一系列的计算,可由单片机完成,最后将温度值送到显示电路显示,或者作为后期的数据处理。显示部分2.2原理框图如图2.2所示: 含有铂热敏电阻PT100的电桥单片机A/D转换器放大电路送到PC机 图2.2三、硬件电路原理图(1)电桥和放大电路部分如图3.1所示,U7是TL431稳压管,为电桥提供稳定的电压,供电电压为+5V,由直流激励源U7(k)提供。电阻R3、R2、R4、RV和热敏电阻TR2构成电桥,RV为电位器,主要用于校正温度,各电阻的取值如图3.1所示。热敏电阻TR2的接法由二线制、三线制、四线制,三线制和四线制常用于远程测量,可有效地减小图3.1甚至消除导线电阻带来的误差,本次设计不做实物,所以采用二线制接法。U6为集成运放,本设计采用OP275,OP275是高精度集成运放,可有效的减小放大误差,其供电电压最大可达正负22V,而电阻R6、R7决定了放大电路的放大倍数。 由电阻分压知, VRT2=5*R3/(R3+ RT2)=5* R3/(1300+ RT2)(1)由虚短知,U6A第2、3脚电压和VR4电压相等,V2=V3=VTR2(2)由虚断知,U6B第6脚没有电流流过,则流过R6和R7上的电流相等 (V6-VR6)/R6=(V7-VR7)/R7 (3) 由虚断知,U6B第5脚没有电流流过, V5=VR4 (4) 电阻R4两端电压 VR4=5*R2/(R4+R2+RV1)=5*170/1470(5) 由虚短知,U6B第3脚和第2脚电压相等, V1=V2 (6) 由(1)(2)(3)(4)(5)(6)得, (V7-VR7)/100=(VR7-V1)/3.3 最后化简得: RT2=1300(5*170/1470-3.3(V7-5*170/1470)/100)/(5+3.3(V7-5*170/1470)/100)-5*170/1470) (7)可见测测出R7,就可得出RT2的值。(2)A/D转换器A/D的选择:由于测量精度为2.5%1字,检测温度范围是50C180C,则(180+50)/0.025=9200,而212=4096,214=16384,所以应选择14位以上的A/D可满足精度要求。如图3.2所示,这部分是A/D芯片与周围的元件。由于proteus仿真库找不到14位的A/D,所以选择16位的A/D芯片ADS7825。找到ADS7825的使用手册,可知ADS7825有两种工作模式,即平行和串行模式(见附录B:ADS7825部分使用手册),为了节约单片机的I/O口,本次设计采用串行模式,串行模式如图3.2所示的接法, 图3.2(3)单片机及显示部分如图3.3所示,此部分包含了时钟电路、复位电路和LCD显示电路,时钟源采用12MHz的晶振,显示电路采用LCD1602。 图3.3(4)发送数据部分及程序下载接口如图3.4所示,通过串口与PC机进行数据传输,串口连接所使用的芯片是MAX232。程序下载接口采用ISP专用下载接口,使用专用下载器对芯片进行烧录。 图3.5(5)电源部分电源部分采用正负15V、5V、10V的稳压芯片,正负15V用于供给运放芯片,5V用于供给单片机和电桥,而10V作为AD芯片的参考电压,使用的稳压芯片有LM7805、LM7810、LM7815、LM7915.四、软件设计(1)流程图LCD写命令流程图如图4.1所示: LCD数据写入流程图如图4.2所示:开始开始关读信号,开写信号,使能端置1关闭读、写信号,使能端置1送数据送命令延迟5us延迟5us使能端置0使能端置0结束结束 图4.1 图4.2LCD清屏流程图如图4.3所示: LCD单字符写入流程图如图4.4所示:开始开始写入第几行?写命令:0x01 第一行 第二行延迟5ms写命令:0xc0+偏移量写命令:0x80 +偏移量结束写数据 图4.3结束 图4.4 LCD字符串写入流程图如图4.5所示:开始写入第几行?第一行 第二行写命令:0xc0+偏移量写命令:0x80 +偏移量写字符串结束 图4.5LCD初始化流程图如图4.6所示: ADS7825初始化流程图如图4.7所示:开始开始显示模式设置初始化T0启动数据转换显示关闭结束 显示清屏显示光标移动设置 图4.7 T0中断服务程序流程图如图4.8所示:开始延迟5ms为ADS7825提供时钟显示开及光标设置返回结束 图4.6 图4.8读ADS7825流程图如图4.9所示: 电压转换为温度流程图如图4.10所示:开始开始根据电压值计算电阻值数据是否转换完成? 否结束 利用公式将电阻值转换为温度值是关闭T0结束 准备读数据 图4.10数据同步信号为0? 数据送到PC机流程图如图4.11所示:开始 为1初始化T1 为0设置串口通信模式读16为数据释放各控制、数据端口发送数据结束 结束 图4.9 图4.11显示函数流程图如图4.12所示: 主函数流程图如图4.13所示:开始开始调用LCD初始化函数提取各位的数值调用串口通信初始化函数各位的数值送到LCD调用显示函数和数据送到PC机函数结束 图4.12 图4.13(2)程序源代码见附录A。(3)程序说明LCD程序:LCD1602是常用的显示模块,其使用方法和程序在这里就不多说明。ADS7825的读取ADS7825的数据读取程序设计主要的根据芯片手册上提供的相关内容(更多详细信息请参考ADS7825芯片手册)编写的,具体程序代码见附录A程序代码中的read_ad()函数,只要程序符合相关芯片的时序要求(ADS7825相关时序图见附录B),就能正确的读取数据。相关公式利用电压计算铂热敏电阻的电阻值的公式在硬件原理图说明里已经给出。由于供给A/D转换器的参考电压为10V,其转换关系如下: 实际电压值=读取数据*10/65535热敏电阻电阻值温度公式在系统方案中给出,由于温度与电阻值是平方关系,需要解二次方程才能得到温度值,为了避免计算平方根,不能用求根公式,用换元法虽然可行,但算法比较复杂,相比之下,迭代法的算法比较简单,虽然计算大,却有很好的效果。为了避免大量计算,减轻CPU的负担,采用牛顿迭代法,迭代公式如下: X0=x-f(x)/df(x)式中X0为所求的温度值, x为温度的初始值,f(x)为温度的函数,df(x)为函数f(x)的导函数。如图4-15所示,在PC机上运行迭代算法,r为扩大100倍后电阻测量值,x的初始值取50,温度为180度时最大迭代次数也只有4次。详细的算法代码见附录A中程序代码的iteration和voltage_to_temperature函数。更多说明见附录A中程序代码的注释。五、系统调试与仿真系统调试与仿真,采用软件仿真工具proteus。 图4-15确保系统能正常显示温度值后,把热敏电阻的温度调到0度,然后在LCD显示热敏电阻的电阻值,理论上对应的电阻值应是100,此时显示的不是100,调节电位器RV1和稍微改动R2的电阻值,使显示的电阻值为100。由热敏电阻电阻值与温度的关系知,温度大于0度时,Rt=R0(1+At+Bt2) 使用时,将系数A和B扩大100倍。经测量,温度测量值和标准值如下表:(部分) 表5.1温度测量值(C)温度标准值(C)绝对误差相对误差-49.91-500.091.80e-3-42.03-42.110.081.90e-3-36.93-37.010.082.16e-3-25.22-25.280.062.38e-3-7.40-7.430.034.05e-30.730.73约为0约为08.388.38约为0约为020.0620.110.052.49e-334.3334.390.061.74e-339.9140.000.092.25e-343.6843.770.092.06e-364.5464.680.142.17e-392.5492.730.192.05e-3107.32107.520.32.79e-3133.77134.040.272.02e-3157.70158.010.311.96e-3179.62180.000.382.11e-3从上表看出,对于负温度,上式也适用,所以正负温度计算公式均采用上式。从40度以上有些温度值绝对误差超过0.1,我们要求绝对误差小于0.1,故使用软件修正的方法进行修正。这里通简单的修改热敏电阻电阻值与温度的关系公式中A的值,对40度以上的温度修正,修正后的40度以上温度测量值和标准值如下表:(部分,A= 3.90822e-3) 表5.2温度测量值(C)温度标准值(C)绝对误差相对误差40.0840.060.024.99e-461.5261.500.023.25e-488.6888.630.055.64e-4100.02100.000.022.00e-4121.81121.760.054.10e-4136.49136.440.053.66e-4152.87152.820.053.27e-4166.45166.370.084.08e-4180.06180.000.063.33e-4表5.2表明,修正后的误差已符合我们的要求。一下是测量一些结果图T=180.01度时,显示如图5.1所示。 图5.1 图5.2 图5.3 图5.4(上) 图5.5(下)(40C以上A= 38.97352) 图5.6(40C以上A= 38.97352)由于本次设计未做实物,故不做更精细的修正,最终采用:A1=39.0 502 (40度一下)A2=38.97352(40度以上)六、结论 七、总结通过对单片机原理课程的学习,对本次设计有很大的帮助,而通过本次设计,让我们牢牢地掌握单片机的应用。不仅如此,我们还学到了温度测量的基本原理、软硬件之间的兼容、系统的调试和仿真方法、EDA工具的使用和A/D转换器ADS7825芯片的使用等。遗憾的是本次设计未做实物,系统的调试甚至系统的方案还只是纸上谈兵,而实际当中会和理论上有很大的区别。本次设计只是用EDA工具仿真,虽然到比较满意的结果,但这成为本次设计最大的缺点。从仿真结果来看,本次设计的结果与理论上有较好的对应,但本次设计也忽略了许多因素:1.不计铂热敏电阻的线电阻,不适于远程温度测量;2.电桥电路部分只通过一个电位器调整,虽然还有软件补偿,但这是远远不够的,实际上还采用合适的补偿电路,放大电路主要采用运算放大器,放大倍数会有一定的误差,因此也要加补偿电路;3.此次设计不考虑系统的功耗和成本,所选的元件很随意。不太符合实际;4.从软件设计上看,对温度的校正校简单,若采用PID算法,会得到很好的效果;5.实际测量时,数据存在抖动,而硬件和程序中都没有相关的处理。总地来说,本次设计展示了用模拟温度传感器来测量温度及显示,其精度完全可与数字温度传感器相媲美,而用模拟温度传感器的系统,温度校正可以通过硬件校正和软件校正,对于采用模拟温度传感器的系统,只能用软件校正的方法。另外选择高精度的A/D转换器,可得到更高精度的温度值。附录A:程序源代码#include #include #define uint unsigned int#define uchar unsigned char#define ulong unsigned long/-/*定义ADC控制端口*/sbit RC = P23; sbit CS = P24;sbit BUSY = P25;sbit SYNC = P26;sbit CLK = P13;sbit SDATA = P12;/-/*定义LCD控制端口*/sbit lcd_rs_port = P20;sbit lcd_rw_port = P21;sbit lcd_en_port = P22;#define lcd_data_port P0/-/*公式数据定义*/#define R2 1300.0#define R3 1300.0#define R4 170.0 /把R4和RV1和并为R4#define R6 3.3#define R7 100.0#definebridge_voltage 5.0 /-float A; /电阻温度公式中的系数A/- /*延时1us函数*/void delay_us(uint n) if (n = 0) return ; while (-n);/*延时1ms函数*/void delay_ms(uchar i) uchar a, b; for (a = 1; a i; a+) for (b = 1; b; b+) ; /- /*显示屏命令写入函数*/void LCD_write_com(uchar com) lcd_rs_port=0; lcd_rw_port=0; lcd_en_port=1; lcd_data_port = com; delay_us(5); lcd_en_port=0;/- /*显示屏数据写入函数*/void LCD_write_data(uchar lcd_data) lcd_rs_port=1; lcd_rw_port=0; lcd_en_port=1; lcd_data_port = lcd_data; delay_us(5); lcd_en_port=0;/- /*显示屏清空显示*/void LCD_clear(void) LCD_write_com(0x01); delay_ms(5);/- /*显示屏字符串写入函数*/void LCD_write_str(uchar x,uchar y,uchar *s) if (y = 0) LCD_write_com(0x80 + x); /写第一行 else LCD_write_com(0xC0 + x); /写第二行 while (*s) LCD_write_data( *s); s +; /- /*显示屏单字符写入函数*/void LCD_write_char(uchar x,uchar y,uchar lcd_data) if (y = 0) LCD_write_com(0x80 + x); else LCD_write_com(0xC0 + x); LCD_write_data(lcd_data); /- /*显示屏初始化函数*/void LCD_init(void) delay_us(100); LCD_write_com(0x38); /显示模式设置* LCD_write_com(0x08); /显示关闭 LCD_write_com(0x01); /显示清屏 LCD_write_com(0x06); /显示光标移动设置 delay_ms(5); LCD_write_com(0x0C); /显示开及光标设置/-/*ADS7825初始化*/void ad_init()TMOD = 0x22; /读AD数据前利用T0产生AD时钟TH0 = 0xf7; /频率约为100KHz-300KHzTL0 = 0xf7;EA = 1;ET0 = 1;TR0 = 1;CS = 1;RC = 0;delay_us(30);CS = 0; /启动转换delay_us(10);CS = 1; /-/*读AD数据*/long read_ad()uchar i,j=1;long int ad_data;ad_init();RC = 0;if(BUSY=1) /判断数据转换是否完成TR0 = 0; /关闭T0,往后的时钟由程序控制CLK = 0;delay_us(1);CS = 0;RC = 1;delay_us(1);CLK = 1;delay_us(1);CLK = 0;delay_us(1);CLK = 1;delay_us(5);while(j) /等待数据同步信号if(SYNC=0)ad_data = 0;for(i=1;i=18;i+) /16位数据在低16位ad_data = ad_data=8036&Rx11549&Rx=8036&Rxtemp)d=x0-temp;elsed=temp-x0;x0=temp;while(d=e); /满足精度时退出循环temp=100.0*temp+5000; /把温度范围变为023000return temp;else temp=24000;return temp; /温度超出范围/-/*串口初始化*/void s_init()TMOD = 0x22;TL1 = 0xf3;TH1 = 0xf3;TR1 = 1;SCON = 0x40;TI = 0;/-/*发送一个数据*/void send_data(uchar sda) TI=0;SBUF = sda; while(!TI);TI=0;/-/*发送字符串*/void send_str(uchar *str) while(*str!=0)send_data(*str);str+;/-void show_and_send()long i;uchar da1,da2,da3,da4,da5,j;i = voltage_to_temperature(); /取温度值LCD_clear();if(i=0)i = 5000-i;j = 1; /判断是否为负值else if(i5000)&(i=23500)i = i-5000;j = 0; /判断是否为正值else if(i=24000) /判断是否超出范围j=2;LCD_write_str(0,1,More than range!); /显示超出范围send_str(The current temperature more than range!);send_str(rn); da1 = 0+i/10000; /提取各位数的数值da2 = 0+i%10000/1000;da3 = 0+i%10000%1000/100;da4 = 0+i%10000%1000%100/10;da5 = 0+i%10000%1000%100%10; LCD_write_str(2,0,T

温馨提示

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

评论

0/150

提交评论