ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:267.16KB ,
资源ID:4579264      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4579264.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于PN结的温度测量系统设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于PN结的温度测量系统设计.docx

1、基于PN结的温度测量系统设计基于PN结的温度测量系统设计摘要: 本文给出了一种基于PN结的温度测量系统方案。利用PN结正向压降的温度特性测量环境温度。文章详细介绍了电路中恒流源、放大电路、AD采样电路、LCD液晶的设计方法、硬件连接电路以及软件的编写思路,其中,数据处理部分详细介绍了线性插值的数据处理方法。关键字:二极管 温度 非线性校正 正文:一、原理与总体方案1.1、二极管(PN结)特性:晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面处两侧形互相抑消作用使载流子的扩散电流增加引起了正向电流,并且和电压成指数关系。1.1.1电流-电压特性:理想PN结的正向电流IF和正向压降

2、VF存在如下关系:IF= Is*exp【-e*Vf/(k*T)】式中,-e为电子电量;k为玻耳兹曼常数;T为绝对温度;Is为反向饱和电流,与PN结材料的禁带宽度及温度有关.在此基础上得出PN结的正向电压Vf与热力学温度T之间的关系,从而证明半导体PN结在某个温度范围内是性能优良的温度传感器。1.1.2温度特性:半导体二极管的温度特性曲线温度对二极管的性能有较大的影响,温度升高时,反向电流将呈指数规律增加,如硅二极管温度每增加8,反向电流将约增加一倍;锗二极管温度每增加12,反向电流大约增加一倍。另外,温度升高时,二极管的正向压降将减小,每增加1,正向压降VD大约减小2 mV,即具有负的温度系数

3、。这些可以从下图所示二极管的伏安特性曲线上看出。据资料介绍:在恒流模式下,If=If0,1n=If/If0=0,有:S=(Vg0-Vf0)/T0-(kB/q)*(1+1nT/T0).因1nT/T0是T的缓变函数, S的模随着T增加而上升,但在不宽的温度范围内,S近似常数。1.2主要电路方案分析:1.2.1恒流源:为保证整个温度测量范围内PN结的正向电流恒定,PN结的正向偏置采用恒流源驱动。采用三极管的特性和特殊电路,让通过二极管的电流始终在100uA左右。1.2.2电桥的设置:采用电桥连接方式使放大器放大传感器变化电压的差值。电桥通过两个电阻和二极管并联构成,从而向放大器正负两端输入电压。通过

4、理论分析及仿真实验研究选择合适的电桥电路参数。1.2.3放大电路的设置:PN结的结电压变化是一个微弱信号,结电压在温度每变化1度时大约变化2mv左右,所以需要进行放大后才能被后续电路处理。采用三运放高共模抑制比放大电路,放大电桥两端的差模信号。设计中可采用三个独立的运放来构成放大电路,也可采用仪用放大器AD620,根据电路实际情况来设置。(AD620的电源提供范围为正负2.3V到正负18V,低功耗,精确度高)。1.2.4滤波电路:采用一阶无源RC低通滤波器,截至频率为50HZ。1.2.5AD转换:采用8位的AD转换元件AD0809,这样可以使用其8位数据线与CPU进行并口通信。因为AD0809

5、对于本设计来说,精度已经达到,所以未用采用SPI通信的12位AD7841等多位的AD转换器件。1.2.6处理器:采用单片机STC89C52(32个IO口,8KB的Flash等)。而未用本身带有10位AD的ARM处理器,因为其对本设计而言会有很多硬件资源剩余,而且不熟悉其操作更会增加程序设计难度。所以综合考虑,对本设计而言,一般单片机的性价比更高。1.2.7显示部分:采用液晶LCD1602,可设置8位数据端口,2行显示,5*7点阵等。1.3 DS18B20介绍:DS18B20为一款单总线测温器件,它具有线路简单,体积小的特点。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数

6、据的双向传输,而对STC89C51单片机来说,硬件上并不支持单总线协议,因此,必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 1.4实验原理:设计整体思路:当通过PN结(以后用二极管表示)的电流恒定后,二极管两端的电压变化就主要与其感受的

7、环境温度有关,所以以此来研究二极管的电压和温度特性。通过电桥设置,将温度选择一个基准,即电压随温度变化的基准,当温度变化时,电压就会相对基准有个差值。将差值信号放大,滤波,输入单片机处理和采用温度传感器18B20标定温度值,得到一个AD值和温度对应的表,然后用二极管测温度,得到AD值采用查表非线性处理得到温度值,结果和18B20测温结果对比显示在液晶上。非线性处理方法原理:将非线性的图形取一些采样点,通过这些采样点相邻之间直线相连就近似得到该曲线。我们的实验目的之一就是得到二极管电压-温度特性曲线。二极管测温原理:由文献资料我们已知了PN结的温度电压变化特性是指数关系。现假设我们测得N个温度值

8、(可用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电桥和放大部分2.2.1恒流源分析:为保证整个温度测量范围内二极管的正向电流恒定,其正向偏置采用恒

9、流源驱动。当三极管Q1正常工作时,其Ube=0.7V,通过三极管集电极端的电流I=(VDD-0.7v)/R1,只要VDD和R1恒定,I就一定。那么由Q1和Q2两个三极管参数几乎一样,镜像得到通过二极管D1的电流值就为I,那么就一定了。2.2.2电桥分析:通过R3和R4在R4两端产生一个恒定基准电压(比如15度时VDD减去二极管的电压值),从而当温度变化时,电桥两端就会有一电压差。2.2.3放大分析:采用LM324自己搭建三运放高共模抑制比放大电路。从下表我们可以看出所测电路输出值与输入值的关系,在差值为0.1V到0.50V范围内,输出放大5倍,在差值为0.6V以上就有一些非线性关系。根据电路设

10、计方案,当差值大于0.90V以上时 U值不随U0-U1变化而变化,U最大值为3.23V。能够满足设计要求。从理论上说,我们将0到100对应放大后的值为0.5V到3V,那么所有值都在其线性区域内,由资料介绍二极管的温度特性分析,每变化1就会使差值增加1mv,那么最多变化200mv,这样三运放放大倍数为12.5倍。由差模增益:调节硬件电路得到。2.3AD采样、单片机及显示部分 2.3.1AD转换原理:由于采用8位的ADC0809,其参考电压为3v, 理论上输入的电压为0.875v到3v(对应温度为15100),根据转换原理可得到AD转换值x=(255*Vin)/3,通过比较取整。三、程序设计:3.

11、1温度传感器18B20标定温度:注意:DS18B20在完成一个读时序过程,至少需要60us才能完成。写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线3.2程序流程图程序代码:#include #include LCD1602.hsbit AL=P23;sbit START=P24;sbit EOC=P26;sbit OUTE=P25;sbit AD_CLK=P27;sbit DQ =P30; /定义通信端口unsigned

12、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

13、; 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); retu

14、rn(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

15、); / 启动温度转换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;STA

16、RT=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_DAT

17、Aj=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;

18、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; ret

19、urn (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_OU

20、T=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); Del

21、ay1ms(100); 四、实验结果记录:所测二极管1N4007电压-温度特性曲线:二极管两端电压温度基本成指数关系:AD值18b20所测温度9415.18961610016.0610620.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.383

22、1.2219858.2532.6833.2720059.3733.5634.0120359.6164.3765.9120462.964.3765.9120567.8在所有电路做好后,我们用1N4007测了一组温度数据,其与温度传感器测温相比较如上表所示。两者的差值基本上在1内。20772.620876.920880.6320888.7220995.46五、电路调试与问题分析5.1.电路部分调试:5.1.1模拟部分硬件调试及分析:首先必须保证电路原理正确,然后根据原理检查电路板的接线是否正确,有无虚焊、错焊以及漏焊,各电路是否连接正确。我们在制作电路过程中就有焊错焊漏的现象,比如7805输入输出

23、脚接反,导致电源输出为7V以上。通过对关键点的测试以及各电路的特点,最终很不容易完成电路板。但是只要细心一点,还是不会出什么错的。在确保电路连接无误后,我们开始模拟部分调试。调节滑动变阻器设定AD620的放大倍数到设定值。然后输入一较小电压差,但是输出值确是4V以上,调节滑动变阻器就是下不来。反复分析电路连接,输入电压差值,以及滤波电路都查不出问题所在。所以我们将问题集中在AD620上,但是Proteus和multisim软件仿真都没有错啊。查看资料和询问老师后,单电源其线性工作区大楷在-Vs+1.6v和+Vs-1.6v,可能是输入的共模电压值太大,或是采用单电源的原因。二极管电桥输出电压高于

24、3.5v,于是我们串联了一个30欧/2W的电阻欲将其共模降下来,但是连上电路后居然降低到1.5v左右了,但是另一个电桥输出最低在2.3V左右,这样无法调零。怀疑是不是电阻的功率太大了,我们把电阻值换后,而且电阻小于30欧都使其值在原来位置。最后我们考虑将另外一电桥的电阻比例换了,使其输出电压调节能力更大。这样我们就将共模电压降了下来,输入AD620后,其输出值有一点变化,但是调节滑动变阻器还是不能得到理想值,甚至调而无用,输入电压为0v时输出超过了1.5v, 所以我们认为其放大后没在线性区工作所致。后来我们将单电源改为正负10v的双电源调试,输入100mv的差值,输出确达到8V以上,调节放大倍

25、数也无济于事。最终考虑换为用LM324自己搭建一个三运放高共模抑制比放大电路。通过对所连放大电路的测量,知道其工作线性区大概在0.5V到3V,计算调节好放大倍数后,输入电压差值(共模电压在2.5v左右),能够看到输出值,也能够调节放大倍数,但是但是输出值不稳定。是否是干扰太大了?通过老师指导测量,我们发现恒流源也有一定问题,恒流源的值不稳定,可能是三极管没有工作。再通过查资料,发现恒流源的电流应该在几百UA左右(以前是0到300mA)。于是将以前的30欧/2w的电阻改为40K,而接二极管一端电桥串联上20K分压电阻,最终测量恒流源在100UA左右,比较稳定。但是输入的电压差还是不是很稳定,采用

26、仪器测量二极管的电压和电源纹波较大,采用470uf和0.1uf并联接地后,输出值终于稳定下来。但是纹波还是存在,并且只要动了电路板都会出现其变大的情况,但通过LM324后,其值还是很稳定的,可能刚才的纹波就是电源电压的,因此通过放大器被差掉了,得到了理想的值。调节数字部分电路时,刚开始ADC0809一直不正常工作,反复检查电路连接和程序都没多大问题,最终检查电路原理图时,发现单片机的EA脚没接电源。因为其控制是否访问外部存储器,接电源表示从程序从内部存储器开始工作,接好后,ADC0809正常工作。在测量温度时,发现IN4007所测温度不稳定,而AD输入值还是较稳定的,示波器测量其参考电压(我们

27、是用滑动变阻器调节5V电源到3V)纹波较大,接了电容后所测温度比较稳定。另外我们在标定温度是出现温度下降时,AD值成锯齿波下降,我想也是由此影响。5.2程序部分调试:我们采用各个程序模块单独调试,显示、AD转换、18b20程序依次调试,各个部分都正常后,再将其全部合成一起,所以程序并未出现大的问题,只是在标定温度列表后,出现数据存储区溢出情况。六、总结 通过对电路的实际测试,电路基本上达到了预定要求,能够测得15摄氏度到100摄氏度左右的温度。但由于当温度高于65摄氏度左右时,电压值不会随温度升高而升高. 通过本次课程设计,我们学习了实际问题的处理方法。本次课程设计过后,我们巩固了最电器元件的识别和选择方面的知识,熟悉了各种绘图仿真软件及测试仪器的应用,编程的经验。让我们最有收获的是在遇到问题时,能够有步骤的分析,我们感受解决问题后的乐趣。虽然有少数理论问题还没分析清楚,这也跟我们提供了很多继续思考学习的空间。参

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1