【mcuclub】温度传感器DS18B20

这篇具有很好参考价值的文章主要介绍了【mcuclub】温度传感器DS18B20。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实物图

【mcuclub】温度传感器DS18B20

 

2、原理图

【mcuclub】温度传感器DS18B20

 

VCC:外接供电电源输入端。

DQ: 数字信号输入/输出端。

GND:电源地线

为什么接上拉电阻:

因为DS18B20的数据口是漏极开路,如果不接上拉电阻,则只能输出低电平和高阻态,不能输出高电平,因此需要外接上拉电阻,否则无法输出1。DS18B20的工作电流约为1mA,VCC一般为5V,则电阻R=5V/1mA=5KΩ。一般3.3k~10k都可以。

3、简介

DS18B20数字温度计是DALLAS公司生产的单总线器件,独特的单总线通信协议,简化了分布式温度传感应用,无需外部元件,可用数据总线供电,电压范围为3 ~5.5 V,无需备用电源,测量温度范围为-55℃~+125℃。在-10℃至+85℃范围内精度为±0.5℃。应用领域包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。

4、测温原理

【mcuclub】温度传感器DS18B20

 

DS18B20的内部测温电路框图如上图所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数振荡器产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

5、内部结构

【mcuclub】温度传感器DS18B20

 

DS18B20内部结构如上图所示,主要由4部分组成:64位ROM、温度灵敏元件、非挥发的温度报警触发器TH和TL、配置寄存器。由上图可见,DS18B20只有一个数据输入输出口,属于单总线专用芯片之一。DS18B20工作时被测温度值直接以“单总线”的数字方式传输,大大提高了系统的抗干扰能力。其内部采用在线温度测量技术,测量范围为-55~125℃,在-10~85℃时,精度为±0.5℃。每个DS18B20在出厂时都已具有唯一的64位序列号,因此一条总线上可以同时挂接多个DS18B20,而不会出现混乱现象。另外用户还可自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。DS18B20在完成温度变换后,所测温度值将自动与存储在TH和TL内的触发值相比较,如果测温结果高于TH或低于TL, DS18B20内部的报警标志就会被置位,表示温度值超出了测量范围,同时还有报警搜索命令识别出温度超限的DS18B20。

6、温度读取与计算

DS18B20采用16位补码的形式来存储温度数据,温度是摄氏度。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

高字节的五个S为符号位,温度为正值时S=0,温度为负值时S=1,剩下的11位为温度数据位,对于12位分辨率,所有位全部有效,对于11位分辨率,位0(bit0)无定义,对于10位分辨率,位0和位1无定义,对于9位分辨率,位0,位1,和位2无定义

【mcuclub】温度传感器DS18B20

对应的温度计算:

当五个符号位S=0时,温度为正值,直接将后面的11位二进制转换为十进制,再乘以0.0625(12位分辨率),就可以得到温度值;当五个符号位S=1时,温度为负值,先将后面的11位二进制补码变为原码(符号位不变,数值位取反后加1),再计算十进制值。再乘以0.0625(12位分辨率),就可以得到温度值;

例如:

+125℃的数字输出07D0(00000111 11010000)

转换成10进制是2000,对应摄氏度:0.0625x2000=125℃

-55℃的数字输出为 FC90。

首先取反,然后+1,转换成原码为:11111011 01101111

数值位转换成10进制是870,对应摄氏度:-0.0625x870=-55℃

7、工作步骤

DS18B20的工作步骤可以分为三步:

  • 初始化DS18B20
  • 执行ROM指令
  • 执行DS18B20功能指令

其中第二步执行ROM指令,也就是访问每个DS18B20,搜索64位序列号,读取匹配的序列号值,然后匹配对应的DS18B20,如果我们仅仅使用单个DS18B20,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。

①初始化DS18B20

任何器件想要使用,首先就是需要初始化,对于DS18B20单总线设备,首先初始化单总线为高电平,然后总线开始也需要检测这条总线上是否存在DS18B20这个器件。如果这条总线上存在DS18B20,总线会根据时序要求返回一个低电平脉冲,如果不存在的话,也就不会返回脉冲,即总线保持为高电平。

初始化具体时序步骤如下:

<1>单片机拉低总线至少480us,产生复位脉冲,然后释放总线(拉高电平)。

<2>这时DS8B20检测到请求之后,会拉低信号,大约60~240us表示应答。

<3>DS8B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示初始化成功

<4>DS18B20拉低电平60~240us之后,会释放总线。

【mcuclub】温度传感器DS18B20

 

代码如下:

void Ds18b20_Init(void)

{

   bit q;

   DS18B20_DQ = 1;               //把总线拉高

   Ds18b20_Delay(10);

   DS18B20_DQ = 0;               //给复位脉冲

   Ds18b20_Delay(80);

   DS18B20_DQ = 1;               //把总线拉高,等待

   Ds18b20_Delay(10);

   q = DS18B20_DQ;              //读取ds18b20初始化信号

   Ds18b20_Delay(20);

   DS18B20_DQ = 1;               //把总线拉高,释放总线

}

②写时序

总线控制器通过控制单总线高低电平持续时间从而把逻辑1或0写进DS18B20中,每次只传输1位数据。

单片机想要给DS18B20写入一个0时,需要将单片机引脚拉低,保持低电平时间要在60~120us之间,然后释放总线。

单片机想要给DS18B20写入一个1时,需要将单片机引脚拉低,拉低时间需要大于1us,然后在15us内拉高总线。

在写时序起始后15μs到60μs期间,DS18B20处于采样单总线电平状态。如果在此期间总线为高电平,则向DS18B20写入1;如果总线为低电平,则向DSl8B20写入0。

注意:2次写周期之间至少间隔1us

【mcuclub】温度传感器DS18B20

 

代码如下:

void Ds18b20_Write(uchar dat)

{

   uchar i;

   for(i=0; i<8; i++)               //循环8次,每次写一位,且先写低位再写高位

   {

      DS18B20_DQ = 0;               //把总线拉低,写数据开始

      DS18B20_DQ = dat&0x01;        //写一位数据

      Ds18b20_Delay(5);

      DS18B20_DQ = 1;               //把总线拉高,释放总线

      dat >>= 1;                   //数据右移一位

   }

}

写入的功能命令:

ROM指令:

采用多个DS18B20时,需要写ROM指令来控制总线上的某个DS18B20
如果是单个DS18B20,直接写跳过ROM指令0xCC即可

【mcuclub】温度传感器DS18B20

RAM指令,DS18B20的一些功能指令

常用的是:

温度转换 0x44

开启温度读取转换,读取好的温度会存储在高速暂存器的第0个和第一个字节中

读取温度 0xBE
读取高速暂存器存储的数据

【mcuclub】温度传感器DS18B20

 

③读时序

读时隙由主机拉低总线电平至少1μs然后再释放总线,读取DS18B20发送过来的1或者0

DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。

【mcuclub】温度传感器DS18B20

 

注意:所有读时隙必须至少需要60us,且在两次独立的时隙之间至少需要1us的恢复时间

同时注意:主机只有在发送读暂存器命令(0xBE)或读电源类型命令(0xB4)后,立即生成读时隙指令,DS18B20才能向主机传送数据。 也就是先发读取指令,再发送读时隙。

最后一点:写时序注意是先写命令的低字节,比如写入跳过ROM指令0xCC(11001100),写的顺序是“0、0、1、1、0、0、1、1”,

读时序时是先读低字节,在读高字节,也就是先读取高速暂存器的第0个字节(温度的低8位),再读取高速暂存器的第1个字节(温度的高8位) 我们正常使用DS18B20读取温度读取两个温度字节即可。

代码如下:

uchar Ds18b20_Read(void)

{

   uchar i,value;

   for(i=0; i<8; i++)              //循环8次,每次读取一位,且先读低位再读高位

   {

      DS18B20_DQ = 0;               //把总线拉低,读数据开始

      value >>= 1;                 //数据右移一位

      DS18B20_DQ = 1;               //把总线拉高,释放总线

      if(DS18B20_DQ == 1)           //开始读数据

       value |= 0x80;             //保存数据

      Ds18b20_Delay(5);

   }

   return value;                  //返回数据

}

8、流程设计

首先初始化引脚,然后初始化DS18B20,接着写指令“0xcc”即跳过64位ROM,写指令“0x44” 即启动一次温度转换命令,延时一段时间后,再初始化DS18B20,接着写指令“0xcc”即跳过64位ROM,写指令“0xbe” 即发出读取暂存器命令,开始读取温度低字节和高字节,整合数据,最后通过计算公式计算出温度值。

【mcuclub】温度传感器DS18B20文章来源地址https://www.toymoban.com/news/detail-420958.html

到了这里,关于【mcuclub】温度传感器DS18B20的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32——DS18B20温度传感器

    一、DS18B20介绍 (一)DS18B20技术性能特征 1、独特的单总线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,大大提高了系统的抗干扰性。 2、测温范围  -55°C~+125°C 3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只

    2024年01月19日
    浏览(45)
  • 【单片机】17-温度传感器DS18B20

    (1)测温度的方式:物理(汞柱,气压),电子(金属电性能随温度变化) (2)早期:热敏电阻(模拟接口---》 A/D转换 ) (3)现代:专用sensor(数字接口,如I2C,DS18B20单总线接口等) DS18B20 可编程分辨率单总线 温度传感器 (1)内置集成ADC,外部数字接口 (2) 单总线

    2024年02月04日
    浏览(53)
  • 51单片机温度传感器DS18B20

    实现功能 插上DS18B20温度传感器,数码管显示检测的温度值 单片机型号:STC89C52 DS18B20介绍 1、DS18B20简介 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、 适用电压宽、与微处理

    2024年02月01日
    浏览(52)
  • 温度传感器DS18B20【单总线时序结构】

    DS18B20是一种常见的 数字温度传感器 ,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55°C 到 +125°C 通信接口: 1-Wire(单总线) 其它特征:可形成 总线结构 、内置温度报警功

    2024年02月04日
    浏览(52)
  • 51单片机读取DS18B20温度传感器

    1 .首先我们知道DS18B20是 单总线协议 ,只有一根数据线。所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平。有了这些概念,我们就能进行下一步。                                                图一 (截取

    2024年02月08日
    浏览(41)
  • FPGA—DS18B20数字温度传感器(附代码)

    目录 1.理论学习 DS18B20概述 DS18B20特性 DS18B20内部结构 高速缓存器:  64位光刻ROM: 1-Wire 总线协议: 温度测量原理 DS18B20操作步骤 1-Wire总线时序控制 2.实操 2.1 整体说明 2.2 DS18B20控制模块 2.2.1 模块框图和流程图 2.2.2 状态图 2.2.3 波形图         2.2.4 RTL代码 2.3 顶层模块 2.3.1

    2024年02月04日
    浏览(47)
  • 基于FPGA的ds18b20温度传感器使用

    ds18b20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 1.特点 ds18b20单线数字温度传感器具有独特的优点: ( 1 )采用单总线的接口方式,与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干

    2023年04月08日
    浏览(47)
  • 51单片机(十三)DS18B20温度传感器

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月11日
    浏览(44)
  • 毕业设计常用温度测量模块之DS18B20温度传感器介绍

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

    2024年02月08日
    浏览(44)
  • 单片机第二季:温度传感器DS18B20

    目录 1,DS18B20介绍 2,DS18B20数据手册  2.1,初始化时序  2.2,读写时序  3,DS18B20工作流程 4,代码   DS18B20的基本特征: (1)内置集成ADC,外部数字接口,也就是可以直接与单片机的数字接口连接,DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包