基于PN结的温度测量系统.doc_第1页
基于PN结的温度测量系统.doc_第2页
基于PN结的温度测量系统.doc_第3页
基于PN结的温度测量系统.doc_第4页
基于PN结的温度测量系统.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学课程设计专用纸一.设计原理与总体方案1.1二极管(PN结)特性晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面处两侧形互相抑消作用使载流子的扩散电流增加引起了正向电流,并且和电压成指数关系。理想PN结的正向电流IF和正向压降VF存在如下关系:IF= Is*exp【-e*Vf/(k*T)】式中,-e为电子电量;k为玻耳兹曼常数;T为绝对温度;Is为反向饱和电流,与PN结材料的禁带宽度及温度有关.在此基础上得出PN结的正向电压Vf与热力学温度T之间的关系,从而证明半导体PN结在某个温度范围内是性能优良的温度传感器。 半导体二极管的温度特性曲线温度对二极管的性能有较大的影响,温度升高时,反向电流将呈指数规律增加,如硅二极管温度每增加8,反向电流将约增加一倍;锗二极管温度每增加12,反向电流大约增加一倍。另外,温度升高时,二极管的正向压降将减小,每增加1,正向压降VD大约减小2 mV,即具有负的温度系数。这些可以从下图所示二极管的伏安特性曲线上看出。据资料介绍:在恒流模式下,If=If0,1n=If/If0=0,有:S=(Vg0-Vf0)/T0-(kB/q)*(1+1nT/T0).因1nT/T0是T的缓变函数, S的模随着T增加而上升,但在不宽的温度范围内,S近似常数。1.2主要电路方案分析为保证整个温度测量范围内PN结的正向电流恒定,PN结的正向偏置采用恒流源驱动。采用三极管的特性和特殊电路,让通过二极管的电流始终在100uA左右。采用电桥连接方式使放大器放大传感器变化电压的差值。电桥通过两个电阻和二极管并联构成,从而向放大器正负两端输入电压。通过理论分析及仿真实验研究选择合适的电桥电路参数。PN结的结电压变化是一个微弱信号,结电压在温度每变化1度时大约变化2mv左右,所以需要进行放大后才能被后续电路处理。采用三运放高共模抑制比放大电路,放大电桥两端的差模信号。设计中可采用三个独立的运放来构成放大电路,也可采用仪用放大器AD620,根据电路实际情况来设置。(AD620的电源提供范围为正负2.3V到正负18V,低功耗,精确度高)。采用一阶无源RC低通滤波器,截至频率为50HZ。采用8位的AD转换元件AD0809,这样可以使用其8位数据线与CPU进行并口通信。因为AD0809对于本设计来说,精度已经达到,所以未用采用SPI通信的12位AD7841等多位的AD转换器件。采用单片机STC89C52(32个IO口,8KB的Flash等)。而未用本身带有10位AD的ARM处理器,因为其对本设计而言会有很多硬件资源剩余,而且不熟悉其操作更会增加程序设计难度。所以综合考虑,对本设计而言,一般单片机的性价比更高。采用液晶LCD1602,可设置8位数据端口,2行显示,5*7点阵等。1.3 DS18B20介绍DS18B20为一款单总线测温器件,它具有线路简单,体积小的特点。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对STC89C51单片机来说,硬件上并不支持单总线协议,因此,必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 1.4实验原理设计整体思路:当通过PN结(以后用二极管表示)的电流恒定后,二极管两端的电压变化就主要与其感受的环境温度有关,所以以此来研究二极管的电压和温度特性。通过电桥设置,将温度选择一个基准,即电压随温度变化的基准,当温度变化时,电压就会相对基准有个差值。将差值信号放大,滤波,输入单片机处理和采用温度传感器18B20标定温度值,得到一个AD值和温度对应的表,然后用二极管测温度,得到AD值采用查表非线性处理得到温度值,结果和18B20测温结果对比显示在液晶上。非线性处理方法原理:将非线性的图形取一些采样点,通过这些采样点相邻之间直线相连就近似得到该曲线。我们的实验目的之一就是得到二极管电压-温度特性曲线。二极管测温原理:由文献资料我们已知了PN结的温度电压变化特性是指数关系。现假设我们测得N个温度值(可用18b20测得)y1,y2,yn以及的对应的AD采样值x1,x2,xn。在N值足够大的情况下,我们认为相邻两点是线性的关系,因此,具体某测量点对应的温度值可用以下方法获得:首先,我们需要知道未知值x那两个x值的中间,然后根据我们已知坐标(x0,y0)与(x1,y1),要得到x0,x1区间内某一位置x在直线上的值。根据图中所示,我们得到假设方程两边的值为,那么这个值就是插值系数从x0到x的距离与从x0到x1距离的比值。由于x值已知,所以可以从公式得到的值。二.硬件设计2.1电源部分 2.2电桥和放大部分接线图:为保证整个温度测量范围内二极管的正向电流恒定,其正向偏置采用恒流源驱动。当三极管Q1正常工作时,其Ube=0.7V,通过三极管集电极端的电流I=(VDD-0.7v)/R1,只要VDD和R1恒定,I就一定。那么由Q1和Q2两个三极管参数几乎一样,镜像得到通过二极管D1的电流值就为I,那么就一定了。通过R3和R4在R4两端产生一个恒定基准电压(比如15度时VDD减去二极管的电压值),从而当温度变化时,电桥两端就会有一电压差。采用LM324自己搭建三运放高共模抑制比放大电路。从下表我们可以看出所测电路输出值与输入值的关系,在差值为0.1V到0.50V范围内,输出放大5倍,在差值为0.6V以上就有一些非线性关系。根据电路设计方案,当差值大于0.90V以上时 U值不随U0-U1变化而变化,U最大值为3.23V。能够满足设计要求。从理论上说,我们将0到100对应放大后的值为0.5V到3V,那么所有值都在其线性区域内,由资料介绍二极管的温度特性分析,每变化1就会使差值增加1mv,那么最多变化200mv,这样三运放放大倍数为12.5倍。由差模增益:调节硬件电路得到。电路输出值与输入值的关系如下图:2.3 AD采样及显示部分由于采用8位的ADC0809,其参考电压为3v, 理论上输入的电压为0.875v到3v(对应温度为15100),经过单片机由数码管动态显示温度。三.程序设计3.1温度传感器18B20标定温度当DS18B20在完成一个读时序过程,至少需要60us才能完成。写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。3.2流程图及程序代码开 始初始化液晶显示欢迎画面取12次AD采样值进行软件滤波处理显示1N4007测出的温度值初始化18b20读取18b20测出的温度值显示18b20测出的温度结 束温度程序流程图进行线性插值处理开 始初始化液晶显示欢迎画面启动AD转换读取AD的值是否已进行12次AD转换对12次AD采样值进行冒泡法排序去掉最大最小值取10次采样值的平均值显示AD采样值初始化18b20读取18b20测出的温度值显示18b20测出的温度结 束否是标定温度程序流程图程序代码:#include #include LCD1602.hsbit AL=P23;sbit START=P24;sbit EOC=P26;sbit OUTE=P25;sbit AD_CLK=P27;sbit DQ =P30; /定义通信端口unsigned char TempBuffer10; / unsigned char ADBuffer10;/存显示的字符/*T0中断服务程序*/void t0(void) interrupt 1 using 0 AD_CLK=AD_CLK; void IntToT(unsigned int t, unsigned char *str, unsigned char n) unsigned char a5; unsigned char i, j; a0=(t/1000)%10; /取得整数值到数组 a1=(t/100)%10; a2=-2;/ a3=(t/10)%10; a4=(t/1)%10; for(i=0; i5; i+) /转成ASCII码 ai=ai+0; for(i=0; ai=0 & i=3; i+); for(j=5-n; ji; j+) /填充空格 *str= ; str+; for(i=0;i5; i+) *str=ai; str+; /加入有效的数字 *str=0; void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4); return(dat);/写一个字节void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1; /delay(4);/读取温度ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t=8;t=t|a;tt=t*0.0625;t=tt*100; /放大10倍输出并四舍五入-此行没用return(t);/*/unsigned char ADC(void) /AD采样函数 unsigned char temp=0;AL=0;START=0;OUTE=0; AL=1;START=1; AL=0;START=0; while(EOC=0); OUTE=1; temp=P1; OUTE=0; return (temp);unsigned char DATA_GET(void) /AD滤波(均值滤波等) unsigned char AD_DATA12; /存放12次AD采样值 unsigned char getdata,temp; unsigned int R_DATA=0; unsigned char i,j; for(i=0;i=11;i+) AD_DATAi=ADC(); for(i=0;i=11;i+) for(j=0;jAD_DATAj+1) temp=AD_DATAj; AD_DATAj=AD_DATAj+1; AD_DATAj+1=temp; for(i=1;i=10;i+) R_DATA=AD_DATAi+R_DATA; R_DATA=R_DATA/10; getdata=(unsigned char)R_DATA; return getdata; unsigned int xianxing(unsigned char DATA_IN) /*线性校正函数*/ float Y16=15.18,20.40,23.12,27.63,33.27,36.23,40.93,44.74,47.24,50.12,52.5,53.18,55.31,57.87,59.61,65.91; unsigned char X16=94,106,112,122,138,146,155,163,173,181,185,189,192,194,203,208; unsigned char m=0; unsigned int R_DATA=0; float temp=0.0; if(DATA_INX15) DATA_IN=X15; for(m=1;m16;m+) if(DATA_IN=Xm) temp=(float)(DATA_IN-Xm-1)/(Xm-Xm-1)*(Ym-Ym-1)+Ym-1; break; temp*=100;R_DATA=(unsigned int)temp;return (R_DATA);main() unsigned char AD_OUT=0; unsigned int T_OUT=0;unsigned int DATA;EA = 1; /开总中断 TMOD = 0x02; /设定定时器T0工作方式 TH0=216; /利用T0中断产生CLK信号 TL0=216; TR0=1; /启动定时器T0 ET0=1;LCD_Initial();Delay1ms(10);GotoXY(0,0);Print( The temperature );GotoXY(0,1);Print( gather system );while(1)AD_OUT=DATA_GET(); DATA=xianxing(AD_OUT); IntToT(DATA,&ADBuffer0,5);/Delay1ms(1);T_OUT=ReadTemperature(); IntToT(T_OUT,&TempBuffer0,5);GotoXY(0,0); Print( 18b20: C);/Delay1ms(1);GotoXY(8,0);Print(&TempBuffer0);Delay1ms(1);GotoXY(0,1); Print(1N4007: C);Delay1ms(1);GotoXY(8,1);Print(&ADBuffer0);Delay1ms(100);四.实验结果及结论4.1实验结果所测二极管PN结(1N4007)电压-温度特性曲线:二极管两端电压温度基本成指数关系:AD值18b20所测温度94150610620.411223.1211624.8112227.6312931.8413833.2714636.2315540.9315942.3816344.7416846.4317347.2417749.32同环境下1N4007和18b20所测温度比较:18150.1218552.518b20温度()1N4007温度()18953.1818.9318.2219255.3126.8127.1419457.8730.3831.2219858.2532.6833.2720059.3733.5634.0120359.6164.3765.9120462.964.3765.9120567.8在所有电路做好后,我们用PN结(1N4007)测了一组温度数据,其与温度传感器测温相比较如上表所示。两者的差值基本上在1内。20772.620876.92

温馨提示

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

评论

0/150

提交评论