at89c51双机串口通信课程设计 yannew_第1页
at89c51双机串口通信课程设计 yannew_第2页
at89c51双机串口通信课程设计 yannew_第3页
at89c51双机串口通信课程设计 yannew_第4页
at89c51双机串口通信课程设计 yannew_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、智能仪表综合课程设计 目录摘要11、原理及总体方案21.1、二极管特性21.2、主要电路方案分析3 1.3、DS18B20介绍41.4.实验原理42、硬件电路设计62.1、电源部分62.2、电桥及放大部分62.3、AD采样.单片机及显示部分83、软件设计流程及描述93.1温度传感器18B20标定温度93.2程序流程图94、实验结果记录115、电路调试与问题分析126.总结137.参考文献1419基于PN结的温度测量系统设计摘要本文给出了一种基于PN结的温度测量系统方案。利用PN结正向压降的温度特性测量环境温度。文章详细介绍了电路中恒流源、放大电路、AD采样电路、LCD液晶的设计方法、硬件连接电

2、路以及软件的编写思路,其中,数据处理部分详细介绍了线性插值的数据处理方法。 关键字:二极管 温度 非线性校正 1、原理与总体方案1.1、二极管(PN结)特性:晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面处两侧形互相抑消作用使载流子的扩散电流增加引起了正向电流,并且和电压成指数关系。1.1.1电流-电压特性:理想PN结的正向电流IF和正向压降VF存在如下关系:IF= Is*exp【-e*Vf/(k*T)】式中,-e为电子电量;k为玻耳兹曼常数;T为绝对温度;Is为反向饱和电流,与PN结材料的禁带宽度及温度有关.在此基础上得出PN结的正向电压Vf与热力学温度T之间的关系,从而证

3、明半导体PN结在某个温度范围内是性能优良的温度传感器。 1.1.2温度特性:半导体二极管的温度特性曲线温度对二极管的性能有较大的影响,温度升高时,反向电流将呈指数规律增加,如硅二极管温度每增加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增加而上升

4、,但在不宽的温度范围内,S近似常数。1.2主要电路方案分析:1.2.1恒流源:为保证整个温度测量范围内PN结的正向电流恒定,PN结的正向偏置采用恒流源驱动。采用三极管的特性和特殊电路,让通过二极管的电流始终在100uA左右。1.2.2电桥的设置:采用电桥连接方式使放大器放大传感器变化电压的差值。电桥通过两个电阻和二极管并联构成,从而向放大器正负两端输入电压。通过理论分析及仿真实验研究选择合适的电桥电路参数。1.2.3放大电路的设置:PN结的结电压变化是一个微弱信号,结电压在温度每变化1度时大约变化2mv左右,所以需要进行放大后才能被后续电路处理。采用三运放高共模抑制比放大电路,放大电桥两端的差

5、模信号。设计中可采用三个独立的运放来构成放大电路,也可采用仪用放大器AD620,根据电路实际情况来设置。(AD620的电源提供范围为正负2.3V到正负18V,低功耗,精确度高)。1.2.4滤波电路:采用一阶无源RC低通滤波器,截至频率为50HZ。1.2.5AD转换:采用8位的AD转换元件AD0809,这样可以使用其8位数据线与CPU进行并口通信。因为AD0809对于本设计来说,精度已经达到,所以未用采用SPI通信的12位AD7841等多位的AD转换器件。1.2.6处理器:采用单片机STC89C52(32个IO口,8KB的Flash等)。而未用本身带有10位AD的ARM处理器,因为其对本设计而言

6、会有很多硬件资源剩余,而且不熟悉其操作更会增加程序设计难度。所以综合考虑,对本设计而言,一般单片机的性价比更高。1.2.7显示部分:采用液晶LCD1602,可设置8位数据端口,2行显示,5*7点阵等。1.3 DS18B20介绍:DS18B20为一款单总线测温器件,它具有线路简单,体积小的特点。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对STC89C51单片机来说,硬件上并不支持单总线协议,因此,必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种

7、信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 1.4实验原理:设计整体思路:当通过PN结(以后用二极管表示)的电流恒定后,二极管两端的电压变化就主要与其感受的环境温度有关,所以以此来研究二极管的电压和温度特性。通过电桥设置,将温度选择一个基准,即电压随温度变化的基准,当温度变化时,电压就会相对基准有个差值。将差值信号放大,滤波,输入单片机处理和采用温度传感器18B20标定温度值,得到一个AD

8、值和温度对应的表,然后用二极管测温度,得到AD值采用查表非线性处理得到温度值,结果和18B20测温结果对比显示在液晶上。非线性处理方法原理:将非线性的图形取一些采样点,通过这些采样点相邻之间直线相连就近似得到该曲线。我们的实验目的之一就是得到二极管电压-温度特性曲线。二极管测温原理:由文献资料我们已知了PN结的温度电压变化特性是指数关系。现假设我们测得N个温度值(可用18b20测得)y1,y2,yn以及的对应的AD采样值x1,x2,xn。在N值足够大的情况下,我们认为相邻两点是线性的关系,因此,具体某测量点对应的温度值可用以下方法获得: 首先,我们需要知道未知值x那两个x值的中间,然

9、后根据我们已知坐标(x0,y0)与(x1,y1),要得到x0,x1区间内某一位置x在直线上的值。根据图中所示,我们得到 假设方程两边的值为,那么这个值就是插值系数从x0到x的距离与从x0到x1距离的比值。由于x值已知,所以可以从公式得到的值。2、硬件电路设计2.1、电源部分 图2.1电源部分电路2.2、电桥及放大部分 图2.2 电桥以及放大部分 2.2.1恒流源分析:为保证整个温度测量范围内二极管的正向电流恒定,其正向偏置采用恒流源驱动。当三极管Q1正常工作时,其Ube=0.7V,通过三极管集电极端的电流I=(VDD-0.7v)/R1,只要VDD和R1恒定,I就一定。那么由Q1和Q2

10、两个三极管参数几乎一样,镜像得到通过二极管D1的电流值就为I,那么就一定了。2.2.2电桥分析:通过R3和R4在R4两端产生一个恒定基准电压(比如15度时VDD减去二极管的电压值),从而当温度变化时,电桥两端就会有一电压差。2.2.3放大分析:采用LM324自己搭建三运放高共模抑制比放大电路。从下表我们可以看出所测电路输出值与输入值的关系,在差值为0.1V到0.50V范围内,输出放大5倍,在差值为0.6V以上就有一些非线性关系。根据电路设计方案,当差值大于0.90V以上时 U值不随U0-U1变化而变化,U最大值为3.23V。能够满足设计要求。从理论上说,我们将0到100对应放大后的值为0.5V

11、到3V,那么所有值都在其线性区域内,由资料介绍二极管的温度特性分析,每变化1就会使差值增加1mv,那么最多变化200mv,这样三运放放大倍数为12.5倍。由差模增益:调节硬件电路得到。 图2.2.3差值与输出的关系图表2.3、AD采样.单片机及显示部分图2.3 仿真元件图 2.3.1AD转换原理:由于采用8位的ADC0809,其参考电压为3v, 理论上输入的电压为0.875v到3v(对应温度为15°100°),根据转换原理可得到AD转换值x=(255*Vin)/3,通过比较取整。3、软件设计流程及描述3.1、温度传感器18B20标定温度:注意:DS18B20完成一个读时序,

12、至少需要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测出的温度值

13、显示18b20测出的温度结 束否是标定温度程序流程图4、实验结果记录所测二极管1N4007电压-温度特性曲线:二极管两端电压温度基本成指数关系:AD值18b20所测温度94150610620.411223.1211624.8112227.6312931.8413833.2714636.2315540.9315942.3816344.74 16846.4317347.2417749.3218150.1218552.518953.1819255.3119457.8719858.2520059.3720359.6120462.920567.820772.620876.920

14、880.6320888.7220995.46 图4.2 AD值与温度的关系图 同环境下1N4007和18b20所测温度比18b20温度()1N4007温度()18.9318.2226.8127.1430.3831.2232.6833.2733.5634.0164.3765.9164.3765.91 图表4.3 1N4007和18b20所测温度图表4.1 AD值与18b20对应数据 5、电路调试与问题分析5.1.电路部分调试:5.1.1模拟部分硬件调试及分析:首先必须保证电路原理正确,然后根据原理检查电路板的接线是否正确,有无虚焊、错焊以及漏焊,各电路是否连接正确。我们在制作电路过程中就有焊错焊

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

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

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

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

19、的,示波器测量其参考电压(我们是用滑动变阻器调节5V电源到3V)纹波较大,接了电容后所测温度比较稳定。另外我们在标定温度是出现温度下降时,AD值成锯齿波下降,我想也是由此影响。5.2程序部分调试:我们采用各个程序模块单独调试,显示、AD转换、18b20程序依次调试,各个部分都正常后,再将其全部合成一起,所以程序并未出现大的问题,只是在标定温度列表后,出现数据存储区溢出情况。 6.总结 通过对电路的实际测试,电路基本上达到了预定要求,能够测得15摄氏度到100摄氏度左右的温度。但由于当温度高于65摄氏度左右时,电压值不会随温度升高而升高. 通过本次课程设计,我们学习了实际问题的处理方法。这次课程

20、设计的实际问题是设计一个测量PN结温度-电压特性曲线和用PN结做一个温度传感器测量温度电路,并通过动手和使用所学知识将其实现。我们在制作过程也得到了一些收获:1.在制作电路前必须把原理搞清楚,确保方案没有错误 ,同时深刻理解,看似简单的事情,要实际动手做好却不是很容易。2.实验也锻炼了我们分析和解决实际问题的能力,比如从设计检测电路的过程中,我们都有步骤并依次一步步进行,确保每一部分正确后在进行下一步。3.我们的基本理论都是采用所学知识,让我们深刻认识理论与实践相结合的重要性以及理论与实践存在的差异性,同时我们也采用其他途径查询所需资料,并认真学习。4. 本次课程设计过后,我们巩固了最电器元件

21、的识别和选择方面的知识,熟悉了各种绘图仿真软件及测试仪器的应用,编程的经验。5.让我们最有收获的是在遇到问题时,能够有步骤的分析,我们感受解决问题后的乐趣。虽然有少数理论问题还没分析清楚,这也跟我们提供了很多继续思考学习的空间。 7.参考文献【1】智能仪器设计基础/史健芳等编著 北京: 电子工业出版社, 2007【2】电路与模拟电子技术/陈士英,郭炯杰编著 北京: 机械工业出版社, 2004【3】单片机接口技术(C51版) 张道德编著 水利水电出版社【4】.单片微型计算机原理及接口技术 杨光友 朱宏辉主编 水利水电出版社【5】液晶显示器件应用技术/李宏,张家田等编著 北京: 机械工业出版社,

22、2004 附:#include <reg51.H>#include "LCD1602.h"sbit 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

23、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; i<5; i+) /转成ASCII码 ai=ai+'0' for(i=0; ai='0' && i<=3; i+); for(j=5-n; j<i; j+) /填充空格 *str=' ' st

24、r+; for(i=0; i<5; i+) *str=ai; str+; /加入有效的数字 *str='0' void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/*18b20采集温度程序*/ /延时函数void delay(unsigned int i) while(i-);/初始化函数void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay(8); /稍做延时 DQ =

25、 0; /单片机将DQ拉低 delay(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay(14); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(20);/读一个字节ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4); return(dat);/写一个字节void WriteOneC

26、har(unsigned char dat) unsigned char i=0; for (i=8; i>0; 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); / 启动温度转换I

27、nit_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;

28、 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;j<=10;j+) if(AD_DATAj>AD_

29、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,

温馨提示

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

评论

0/150

提交评论