DS18B20传感器温度设计_第1页
DS18B20传感器温度设计_第2页
DS18B20传感器温度设计_第3页
DS18B20传感器温度设计_第4页
DS18B20传感器温度设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、 传感器课程设计与制作说明书设计题目:DS18B20数字温度计的设计专业班级: * 组 员: * 组 员: * 组 员: * 指导教师: * 2012年 11 月 20 日 一、设计方案较 方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。方案二:考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串

2、行数字信号给单片机处理,即可实现温度显示。另外DS18B20具有3引脚的小体积封装,测温范围为-55+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。 以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二。二、 设计原理2.1.1芯片介绍AT89C51是一种低电压、高性能CMOS 8位微处理器,它自带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory),俗称单片机。单片机的可擦除只读存

3、储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪存存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器。AT89C系列单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。它的部分引脚功能介绍如下。 AT89C52单片机的外形及引脚排列如上图:2.1.2 DS18B20简介 DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传

4、感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”数字化温度传感器 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C+125°C,在-10+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V

5、的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定912位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总

6、线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。 DS18B20中的温度传感器对温度的测量 DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘

7、于0.0625即可得到实际温度。DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。1) 64位的ROM 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作

8、用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。2) DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。DS18B20的时序 由

9、于DS18B20采用的是单总线协议方式,即在一根数据线实现数据的双向传输,而对89C51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

10、数据和命令的传输都是低位在先。DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被

11、拉低之后,在15us之内就得释放单总线。DS1820使用中注意事项 DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: 1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。 2) 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单

12、总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 3) 连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。 4) 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的

13、返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。2. 1.3 LED显示模块本课题的LED显示模块是由一个四联共阴七段数码管组成。七段数码管是由若干发光二极管组合而成的,一般的“8”字形显示块由“a、b、c、d、e、f、g、h”8发光二极管组成。四个七段数码管分别与P0口相连,通过对单片机输入程序达到控制显示输出的目的。四个七段数码管由单片机的P1.0P1.3控制亮灭,P1.0P1.3分别对应S1S3,当P1.0P1.3其中之一置低电平,对应的三级管导通,段码管亮,置高电平,

14、对应的三级管截止,段码管灭。2.2.1系统框架设计如下图所示:温度测量模块LED显示模块 控 制 器 模 块电源模块温度测量模块我们采用DS18B201.下图为温度测量的原理图:2.2.2 控制器模块本课题的控制器模块式采用AT89C51单片机作为MCU,如图AT89C51。AT89C51的 P0.0P0.7作为四联七段数码管总线; P1.0P1.3控制四个七段数码管的亮灭。实物图2.3.1程序的调试#include<at89x51.h>#include<intrins.h> /_nop_();延时函数用 #define a P0 /段码输出口 #define ucha

15、r unsigned char#define uint unsigned intsbit DQ=P32; /温度输入口 sbit s0=P10; /数码管1sbit s1=P11; /数码管2sbit s2=P12; /数码管3sbit s3=P13; /数码管4int temp1=0; /显示当前温度和设置温度的标志位为0时显示当前温度 uint h; uint temp; uchar r; uchar high=35,low=20; /*温度小数部分用查表法*/ Uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,

16、0x06,0x06,0x07,0x08,0x08,0x09,0x09; /小数断码表 uchar code table_a12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40; /共阴LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9""不亮""-"

17、; uchar table_a1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /个位带小数点的断码表 uchar data temp_data2=0x00,0x00; /读出温度暂放 uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运算暂用 /*11us延时函数*/ void delay(uint t) for( ;t>0;t-); void scan() int j ; for(j=0;j<4;j+) switch(j) case 0: a=tab

18、le_adisplay0;s0=0;delay(50);s0=1;/小数 case 1: a=table_a1display1;s1=0;delay(50);s1=1;/个位 case 2: a=table_adisplay2;s2=0;delay(50);s2=1;/十位 case 3: a=table_adisplay3;s3=0;delay(50);s3=1;/百位 /*DS18B20复位函数*/ ow_reset(void) har presence=1; while(presence) while(presence) DQ=1;_nop_();_nop_();/从高拉倒低 DQ=0;

19、 delay(50); /550us DQ=1; delay(6); /66us presence=DQ; /presence=0 复位成功,继续下一步 delay(45); /延时500us presence=DQ; DQ=1; /拉高电平 /*DS18B20写命令函数*/ /向1-WIRE 总线上写1个字节 void write_byte(uchar val) uchar i; for(i=8;i>0;i-) DQ=1;_nop_();_nop_(); /从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); /5us DQ=val&0x01;

20、 /最低位移出 delay(6); /66us val=val/2; / 右移1 位 DQ=1; delay(1); /*DS18B20读1字节函数*/ / 1 从总线上取 个字节 uchar read_byte(void) uchar i; uchar value=0; for(i=8;i>0;i-) DQ=1;_nop_();_nop_(); value>>=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); /4us DQ=1;_nop_();_nop_();_nop_();_nop_(); /4us if(DQ)value|=0x80;

21、delay(6); /66us DQ=1; return(value); /*读出温度函数*/ read_temp() ow_reset(); /总线复位 delay(200); write_byte(0xcc); /发命令 write_byte(0x44); /发转换命令 ow_reset(); delay(1); write_byte(0xcc); /发命令 write_byte(0xbe); temp_data0=read_byte(); / 读温度值的第字节 temp_data1=read_byte(); /读温度值的高字节 temp=temp_data1; temp<<=

22、8; temp=temp|temp_data0; / 两字节合成一个整型变量。 return temp; /返回温度值 /*温度数据处理函数*/ /二进制高字节的低半字节和低字节的高半字节组成一字节,这个 /字节的二进制转换为十进制后就是温度值的百、十、个位值而剩, , /下的低字节的低半字节转化成十进制后,就是温度值的小数部分 /*/ work_temp(uint tem) uchar n=0; if(tem>6348) / 温度值正负判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem&0x0f; / 取小数部分的值 displa

23、y0=ditabdisplay4; / 存入小数部分显示值 display4=tem>>4; / 取中间八位,即整数部分的值 display3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10; / 取十位数据暂存 display1=display1%10; /个位数据 r=display1+display2*10+display3*100; /正负显示判断/ if(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) disp

24、lay2=0x0a; /次高位为0时不显示 if(n)display3=0x0b; /负温度时最高位显示"-" /*设置温度显示转换*/ void xs(int horl) int n=0; if(horl>128) horl=256-horl;n=1; display3=horl/100; display3=display3&0x0f; display2=horl%100/10; display1=horl%10; display0=0; if(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) displa

25、y2=0x0a; /次高位为0时不显示 if(n) display3=0x0b;/负温度时最高位显示"-" /*主函数*/ void main() a=0x00; /初始化端口 s0=0; s1=0; s2=0; s3=0; for(h=0;h<4;h+) /开机显示"0000" displayh=0; ow_reset(); /开机先转换一次 write_byte(0xcc); /SkipROM write_byte(0x44); /发转换命令 for(h=0;h<100;h+) /开机显示"0000" scan(); while(1) if(temp1=0) work_temp(read_temp(); /处理温度数据 scan(); /显示温度值 /*结束*/三、调试小结3.1系统的调试1. 使用专业软件进行电路图的绘制2. 在绘图完成

温馨提示

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

评论

0/150

提交评论