精华内容
下载资源
问答
  • 本文详细描述了DS18B20的工作原理,并且有C语言和汇编语言代码,稍作修改就可以应用到工程中。(上传的是word文档格式) DS18B20数字温度传感器是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的...
  • DS18B20的工作原理及调试

    千次阅读 2020-07-05 20:58:37
    概述 在基于51单片机的温度报警系统的学习中,我用到了DS18B20这款温度传感器。...1.DS18B20的引脚分布图 DS18B20采用1-wire Bus所有数据都在一条线上传输,因此单总线协议对时序要求非常严格以确保数据的完整性。 单

    概述

    在基于51单片机的温度报警系统的学习中,我用到了DS18B20这款温度传感器。DS18B20是一种单总线数字温度传感器,测试温度范围-55℃-125℃,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。单总线,意味着没有时钟线,只有一根通信线。单总线读写数据是靠控制起始时间和采样时间来完成,所以时序要求很严格,这也是DS18B20驱动编程的难点。

    1.DS18B20的引脚分布图

    在这里插入图片描述
    DS18B20采用1-wire Bus所有数据都在一条线上传输,因此单总线协议对时序要求非常严格以确保数据的完整性。
    单总线信号类型:复位脉冲、存在脉冲、写0、写1、读0、读1。所有这些信号除存在脉冲由DS18B20发出的以外其他信号都由总线控制器发出。
    需要注意的是: 数据传输总是从最低有效位开始。

    2.字节暂存器结构图

    在这里插入图片描述
    以上是内部9 个字节的暂存单元(包括EEPROM)。
    字节0~1 是温度存储器,用来存储转换好的温度。
    字节2~3 是用户用来设置最高报警和最低报警值。这个可以用软件来实现。
    字节4 是配置寄存器,用来配置转换精度,让它工作在9~12 位。
    字节5~7 保留位。
    字节8 CRC校验位。是64位ROM中的前56位编码的校验码。由CRC发生器产生。

    3.配置寄存器

    在这里插入图片描述

    4.DS18B20初始化程序

    1.初始化时序里面包含了复位DS18B20和接收DS18B20返回的存在信号。
    主机和DS18B20做任何通讯前都需要对其初始化。初始化期间,总线控制器拉低总线并保持480us以上挂在总线上的器件将被复位,然后释放总线,等到15-60us,此时18B20将返回一个60-240us之间的低电平存在信号。
    在这里插入图片描述

    bit ds_init()
    {
    	bit i;
    	DS = 1;
    	_nop_();
    	DS = 0;
    	Delay500us(); 
    	DS = 1; 
    	Delay40us(); 
    	i = DS;
    	Delay140us();
    	DS = 1;
    	_nop_();
    	return (i);
    }
    

    2.写时序分为写0时序和写1时序。
    总线控制器通过控制单总线高低电平持续时间从而把逻辑1或0写DS18B20中。
    总线控制器要产生一个写时序,必须将总线拉低最少1us,产生写0时序时总线必须保持低电平60~120us之间,然后释放总线,产生写1时序时在总线产生写时序后的15us内允许把总线拉高。注意:2次写周期之间至少间隔1us
    在这里插入图片描述

    void write_byte(uchar dat)
    {
    	uchar i;
    	for(i=0;i<8;i++)
    	{
    		DS = 0;
    		_nop_();
    		DS = dat & 0x01;
    	Delay75us();//76.95us
    		DS = 1; 
    		_nop_();
    		dat >>= 1;
    	}
    }
    

    3.读时序
    读时序分为读0时序和读1时序
    总线控制器通过读取由DS18B20控制的总线高低电平接收DS18B20数据。
    总线控制器要产生一个读时序,必须将总线拉低至少1us,然后释放总线,在读信号开始后15us内总线控制器采样总线数据,读一位数据至少保持在60us以上。注意:2次读周期之间至少间隔1us。
    在这里插入图片描述

    uchar read_byte()
    {
    	uchar i, j, dat;
    	for(i=0;i<8;i++)
    	{
    		DS = 0;
    		_nop_();
    		DS = 1;
    		_nop_();
    		j = DS;
    		Delay75us();//75us
    		DS = 1;
    		_nop_();
    		dat = (j<<7)|(dat>>1);	
    	}
    	return (dat);
    }
    

    接下来我们就可以在main函数中进行读写操作了。

    展开全文
  • DS18B20工作原理

    2014-11-26 16:47:33
    DS18B20工作原理 是个测温系统设计1602液晶显示器采用金鹏电子有限公司生产OCM2×16A。字符点阵系列模块是一类专门用于显示字母、数字、符号等点阵型液晶显示模块,分4位和8位数据传输方式,提供5×7点阵+光标...
  • ds18b20工作原理和测温原理介绍

    万次阅读 多人点赞 2018-07-30 23:09:30
    DS18B20是美国DALLAS半导体公司继...可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可...

    DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。

      DS18B20的主要特性

      1)适应电压范围3.0V~5.5V,在寄生电源方式下可由数据线供电。

      2)DS18B20与微处理器之间仅需要—条口线即可双向通讯。

      3)支持多点组网功能,多个DS18B20可以并联在唯—的三线上,实现组网多点测温。

      4)不需要任何外围元件,全部传感元件及转换电路集成在外形如一只三极管的电路内。

      5)测温范围-55℃~+125℃,在-lO℃~+85℃时精度为±0.5℃。

      6)可编程的分辨率为9位~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

      7)在9位分辨率时,最多93.75ms便可把温度转换为数字,12位分辨率时最多750ms便可把温度值转换为数字。

      8)直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

      9)电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

      DS18B20遵循单总线协议,每次测温时必须有初始化、传送ROM命令、传送RAM命令、数据交换等4个过程。

      ds18b20工作原理介绍

      DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

      计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

      ds18b20工作原理和测温原理介绍

      图二

      ds18b20测温原理介绍

      DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。

      计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 ℃ 所对应的一个基数值。

      减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

      图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

      另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS1820相同。

      推荐阅读:利用DS18B20做一个温控器(DS18B20引脚图_工作原理及应用电路)

    展开全文
  • DS18B20原理及应用

    2012-01-10 16:53:34
    DS18B20原理及应用,数字温度传感器DS18B20的工作原理及在变电站测温的应用
  • DS18B20是DALLAS公司生产一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展16位数字量方式串行...
  • arduino与DS18B20工作原理

    千次阅读 2019-05-07 21:48:20
    该模块与Arduino连接时采用单总线连接方式,且需接一个4.7K上拉电阻才能使用 在这条单线上最多可以拥有多达127个设备...序列号前一部分定义了一个设备序列,比如,0x10代表DS18S20,而对于DS18B20来说则为0...

    该模块与Arduino连接时采用单总线的连接方式,且需接一个4.7K的上拉电阻才能使用
    连接图
    在这条单线上最多可以拥有多达127个设备,当我们需要使用其中之一时,主设备就会启动复位脉冲,并且开始从从设备接收应答脉冲。然后便开始搜索ROMs(每个生产的设备都拥有一个独特的64位ROM代码,比如说序列号。序列号的前一部分定义了一个设备的序列,比如,0x10代表DS18S20,而对于DS18B20来说则为0x28,当然所有序列号剩余的部分也都是唯一的序号。)最后,主设备就会匹配ROM命令,从而来选择必要的从设备。并且所有单线的总线上的数据传输都是以字节的形式进行的,这主要是因为,当该模块与Arduino连接后,是Arduino中的OneWire库来负责所有的底层操作,我们只需要发送和接收字节。
    所有的数据和命令都必须首先通过单总线来传输最低有效位。当我们需要获取温度的测量值时,需要发出convert命令。当传感器接收到这个命令时,将会启动数据转换的过程-通过测量产生两个字节。这是一个相对比较缓慢的过程,大约需要750毫秒左右,所以需要的发出命令之后等待一段时间。最终,所有的采集的数据都存储在暂存器(传感器的RAM)中。我们可以读取它,从而获取温度数据,也可以写入它,来设置警报阈值,指定传感器的分辨率。
    想要读取暂存器,首先我们需要发出一个read convert命令,之后我们就会接收到九个字节的数据,如图所示在温度数据字节这里插入图片描述

    接着就需要通过下面这个公式来转换得到温度数据
    Temp = ((HighByte << 8) + LowByte ) *0.0625

    展开全文
  • DS18B20的硬件原理 通过编程,DS18B20可实现最高12位的温度存储器。以补码的格式存储在寄存器中。 如上图所示,DS18B20温度存储器一共有两个字节。LSB低字节,MSB高字节。Msb字节高位,Lsb字节低位。DS18B20的温度...

    DS18B20的硬件原理——温度存储器

    DS18B20的温度测量范围:-55~+125°C。
    在这里插入图片描述
    如上图所示,DS18B20温度存储器一共有两个字节。LSB低字节,MSB高字节。Msb字节高位,Lsb字节低位。图中的S表示的是符号位。
    通过编程,DS18B20可实现最高12位的温度存储器。以补码的格式存储在寄存器中。

    结合下面寄存器温度对应存储数值的表格,理解DS18B20温度存储器。
    在这里插入图片描述
    ps:二进制数最低位变化1,代表温度变化0.0625°C。

    DS18B20与单片机通信

    单片机可通过1-Wire协议与DS18B20通信,读取温度

    1-Wire总线的硬件接口简单,时序复杂。

    下面可根据DS18B20工作协议过程,了解其工作时序。

    1)初始化

    类似于I2C寻址。开始时,1-Wire总线也需检测总线上是否存在DS18B20器件。若存在,则总线根据时序要求返回一个低电平脉冲,若不存在,则无返回脉冲,即总线保持高电平。习惯上将这个动作称为检测存在脉冲。该动作除了有检测DS18B20器件的功能外,还有通知DS18B20做准备的作用。

    下图是关于存在脉冲检测的时序图,以便直观感受时间与脉冲变化的关系。
    在这里插入图片描述
    图中可以看到,首先单片机拉低引脚,持续480 ~ 960μs。然后,单片机释放总线,即给总线高电平。DS18B20等待15 ~ 60μs,主动拉低这个引脚。60 ~ 240μ后,DS18B20主动释放总线。之后IO口被上拉电阻拉高。

    2)ROM操作指令

    类似于I2C,1-Wire总线也可挂多个器件。

    该操作应用于一个总线上挂多个器件的情况下,对不同器件进行区分。

    每个DS18B20内部都有一个唯一的64位长的序列号。序列号值存在于DS18B20内部的ROM中。其首8位是产品类型编码,末8位是CRC效验码,中间48位是每个器件的唯一序号。单片机可通过与DS18B20的通信,获取数据发送指令。这些指令相对复杂。应用不多。这里不介绍这部分,需要时可查看手册。

    下面只介绍一个总线接一个器件的指令和程序。

    Skip ROM:0XCC。当总线上只有一个器件时,可跳过ROM,不进行ROM检测。

    3)RAM存储器操作指令。

    这里介绍两条,其他有需要再查资料。

    Read Scratchpad(读暂存寄存器):0XBE。

    注意:DS18B20温度数据有两个字节。读取数据时,每个字节从低位读起,先读低字节再读高字节。

    Convert Temperature(启动温度转换):0X44。

    发送指令后,开始温度转换。这个过程需要一定时间,时长取决于DS18B20精度。温度数据用到的位数越高,精度越高,速度越慢。例子:9位模式与12位模式的最低变化值分别为0.5和0.0625,9位的转换速度更快。

    下图为9位模式下的DS18B20温度转换时间表

    在这里插入图片描述
    其中寄存器R1和R0决定了转换的位数。他们的出厂设置默认值为11。即12位表示温度,最大转换时间750μs。启动转换后,至少要再等750μs才能读取温度。否则就有可能读错。

    4)DS18B20的位写时序

    下面是一张DS18B20写入操作的时序图:
    在这里插入图片描述
    当要给DS18B20写入0时,单片机拉低引脚。持续时间在60~120μs之间。

    图中可见,单片机先拉低15μs之后,DS18B20会在15~60μs这个时间段读取这一位,典型值是在30μs时刻读取。持续时间超过60μs,DS18B20必定读取完毕。

    当要给DS18B20写入1时,单片机拉低引脚。拉低时间>1μs,紧接着马上释放总线,即拉高引脚,持续时间>60μs。

    ps:DS18B20时序较严格,写的过程中最好不要有中断,但是两个位之间的间隔处是例外,可以开启中断。

    5)DS18B20的位读时序

    在这里插入图片描述
    当读取DS18B20数据时,单片机拉低引脚,至少保持1μs,然后释放引脚,释放完毕后要尽快读取。从拉低引脚到读取引脚状态不可超过15μs。

    下面是DS18B20的操作代码(读写,检测脉冲,温度转换)

    #include <reg52.h>
    #include <intrins.h>
    
    sbit IO_18B20 = P3^5;	//DS18B20通信引脚
    
    //软件延时函数,延时(t*10)μs
    void Delay(unsigned char t)
    {
    	do{
    		_nop_();
    		_nop_();
    		_nop_();
    		_nop_();
    		_nop_();
    		_nop_();
    		_nop_();
    		_nop_();
    	}while(--t);
    }
    
    //复位总线,获取存在脉冲,准备启动一次读写操作
    bit Get18B20Ack()
    {
    	bit ack;
    	EA = 0;				//禁止中断
    	IO_18B20 = 0;		//产生500微秒复位脉冲
    	Delay(50);
    	IO_18B20 = 1;
    	Deylay(60);
    	ack = IO_18B20;		//读取存在脉冲
    	while(!IO_18B20);	//等待存在脉冲结束
    	EA = 1;				//重新使能总中断
    
    	return ack;
    }
    
    //向DS18B20写入一个字节,dat为待写入字节
    void Write18B20(unsigned char dat)
    {
    	unsigned char mask;
    
    	EA = 0;				//禁止中断
    	for(mask = 0X01;mask!=0;mask<<=1)	//低位在前,依次移出8个bit
    	{	
    		IO_18B20 = 0;					//产生2微秒低电平脉冲
    		_nop_();
    		_nop_();
    		if((mask&dat) == 0)				//输出该bit值
    			IO_18B20 = 0;
    		else
    			IO_18B20 = 1;
    		Delay(6);						//延时60微秒
    		IO_18B20 = 1;					//拉高通信引脚
    	}
    	EA  = 1;							//重新使能总中断
    }
    
    //从DS18B2读取一个字节,返回值为读到的字节
    unsigned char Read18B20()
    {
    	unsigned char dat;
    	unsigned char mask;
    
    	EA = 0;			//禁止总中断
    	for(mask = 0X01;mask != 0;mask <<= 1)//低位在先,依次采集8个bit
    	{
    		IO_18B20 = 0;					//产生2微秒低电平脉冲
    		_nop_();	
    		_nop_();
    		IO_18B20 = 1;		   			//结束低电平脉冲,等待18B20输出数据
    		_nop_();			  			//延时2微秒
    		_nop_();
    		if(!IO_18B20)		   			//读取通信引脚上的值
    			dat &= ~mask;
    		else		
    			dat |= mask;
    		Delay(60);			  			//再延时60微秒
    	}
    	EA = 1;			//重新使能总中断
    
    	return dat;
    }
    
    //启动一次18B20温度转换,返回值为表示是否启动成功
    bit Start18B20()
    {
    	bit ack;
    
    	ack = Get18B20Ack();	//执行总线,获取18B20应答
    	if(ack == 0)			//若18B20正确应答,则启动一次转换
    	{
    		Write18B20(0XCC);	//跳过ROM操作
    		Write18B20(0X44);	//启动一次温度转换
    	}
    
    	return ~ack;			//ack=0表示操作成功,故取反返回值
    }
    
    //读取DS18B20转换的温度值,返回值为是否读取成功
    bit Get18B20Temp(int *temp)
    {
    	bit ack;
    	unsigned char LSB,MSB;	//16bit温度值的高低字节
    
    	ack = Get18B20Ack();	//执行总线,获取18B20应答
    	if(ack == 0)			//若18B20正确应答,则启动一次转换
    	{
    		Write18B20(0XCC);	//跳过ROM操作
    		Write18B20(0XBE);	//发送读命令
    		LSB = Read18B20();	//读温度值的低字节
    		MSB = Read18B20();	//读温度值的高字节
    		*temp = ((int)MSB<<8)+LSB;//合并成为16bit整型数	
    	}
    	return ~ack;//ack=0表示操作成功,故取反返回值
    }
    
    展开全文
  • PPT来的,讲得还算详细,可以简单看一下,对于理解温度传感器的工作有帮助
  • DS18B20实验

    2013-05-05 14:54:08
    1.介绍单片机与温度传感器模块配合使用的方法。 2.介绍温度传感器DS18B20的工作原理及使用方法。 3.介绍DS18B20读写时序及其编程方法。 4.如何提高单片机综合应用和开发的能力。
  • 智能温度传感器DS18B20的原理与应用

    千次阅读 2014-04-22 08:36:34
    文章详细的介绍了单线数字温度传感器DS18B20的测量原理、特性以及在温度测量中的硬件和软件设计,具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。  关键词:DS18B20;单线制;温度传感器;单片机  ...
  • 1、查阅相关pdf,了解DS18B20的工作原理; 2、用Proteus仿真实现单片机对DS18B20的控制,并且用数码管显示温度值; • 用Keil C51编程实现上述功能 • 用Keil与Proteus联调 二、Proteus 8 电路原理图 附加器件列表 ...
  • 2.了解DS18B20的工作原理、内部寄存器及接口时序; 与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字...
  • DS18B20中文文档

    2009-07-03 11:51:41
    详细介绍了数字化温度传感器DS18B20的工作原理,操作过程等.
  • 摘 要:介绍单线数字温度传感器DS1820特性及工作原理,给出了DS1820与89C51单片机接口应用实例,以及由DS1820组成温度检测系统方法,并给出了对DS1820进行各种操作软件流程图。关键词:单线制(1-Wire)时隙...
  • 传感器Ds18b20的资料

    2011-05-16 21:39:56
    传感器Ds18b20的资料 主要介绍DS18b20的用法以及工作原理方式
  • 介绍DS18B20的结构和工作原理,以及单总线工作原理,给出了由Mega8单片机和DS18B20构成的单总线温度测量仪的硬件电路及软件流程图。经试验基于单总线器件DS18B20的温度测量仪,具有测量准确、测温范围宽、体积小、...
  • 传感器学习——DS18B20

    2021-01-06 13:04:07
    DS18B20的结构和工作原理 DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C范围内,精度为 ± 0.5°C DS18B20的外部结构如图1所示。其中,VDD为电源输入端,DQ为数字信号输入/输出端,GND为电源地 第0和第...
  • DS18B20

    千次阅读 2017-03-14 09:29:14
    DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生...
  • 简要介绍了单总线数字温度传感器DS18B20的特性及工作原理,并给出了DS18B20与TMS320LF2407A接口设计电路以及相应的软件
  • 基于DS18B20的多点温度监测系统设计,胡媛媛,,介绍了1-WIRE数字式温度传感器DS18B20的结构、特点和工作原理,设计了一种基于DS18B20和AT89S52单片机的多点实时温度监测系统,,并给出了
  • 基于DS18B20数字温度传感器温度计设计 本报告为哈尔滨工业大学电子与信息工程学院大二学期微机原理课程课设报告。请注意,本文所述代码均在Quartus II 13.0程序内使用汇编语言运行。 一、课程设计任务要求 利用...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 156
精华内容 62
关键字:

ds18b20的工作原理