DS18B20数字温度传感器

2023-11-02

DS18B20是一种数字温度传感器,由美国达拉斯半导体公司生产。

具有以下特征:

1. 单线传输:DS18B20使用单线传输协议(1-Wire)进行通信,只需要一个数据线就可以实现数据传输和电源供应。

2. 高精度:DS18B20可以测量范围为-55°C至+125°C的温度,精度为±0.5°C(在-10°C至+85°C范围内)。

3. 数字输出:DS18B20输出数字温度值,可以直接与数字系统集成,不需要进行模拟信号转换。

4. 多点测量:通过1-Wire总线,可以连接多个DS18B20传感器,实现多点温度测量。

5. 低功耗:DS18B20具有低功耗特性,工作时只需要极低的能量,可以通过1-Wire总线实现供电。

6. 内部存储:DS18B20具有内部存储器,可以存储自身序列号和温度校准系数等信息,方便管理和配置。

管脚描述

VDD 引脚。当采用“寄生电源”供 电时,VDD 必须连接到地 VDD
数据输入/输出。1-Wire 漏极开路接口引脚。当采用“寄生电源”供电方式时,同时向设备提供电源。 DQ
GND

内部结构框图

寄生电源电路 控制寄生电源供电或者VDD供电
64位Bit ROM 作为器件地址,用于总线通信的地址
内存控制逻辑单元 控制Read or Write
暂存器 用于总线的数据交互(RAM)

供电方式


单总线电路规范

  • 设备的DQ均要配置成开漏输出模式
  • DQ添加一个4.7KΩ的上拉电阻
  • 若总线的从机采取寄生供电,则主机还应该配置一个强上拉输出

DS18B20操作流程

  1. 初始化:从机复位,主机判断从机是否相应
  2. ROM操作:ROM指令+本指令需要的读写操作
  3. 功能操作:功能指令+本指令需要的读写操作

ROM指令

搜索ROM[F0h] 匹配ROM[55h]
读取ROM[33h] 跳过ROM[CCh]
警报搜索[ECh]

 

 

功能指令

温度转换[44h] 写入暂存寄存器[4Eh]
读取暂存寄存器[BEh] 拷贝暂存寄存器[48h]
召回 EEPROM[B8h] 读取供电模式[B4h]

 

单总线时序结构

初始化

在初始化序列期间,总线上的主设备通过拉低 1-Wire 总线超过 480us 来发送(TX)复位脉冲。 之后主设备释放总线而进入接收模式(RX)。当总线释放后,5kΩ左右的上拉电阻将 1-Wire 总线 拉至高电平。当 DS18B20 检测到该上升边沿信号后,其等待 15us 至 60us 后通过将 1-Wire 总线拉 低 60us 至 240us 来实现发送一个存在脉冲。

 

写入一位

写时段有两种情况:“写 1”时段和“写 0”时段。
为了形成写 1 时段,在将 1-Wire 总线拉低后,主设备必须在 15us 之内释放总线。当总线释放后,5kΩ的上拉电阻将总线拉至高。
为了形成写 0 时段,在将 1-Wire 总线拉低后,在整个时段 期间主设备必须一直拉低总线(至少 60us)
在主设备初始化写时段后,DS18B20 将会在 15us 至 60us 的时间窗口内对总线进行采样。如果总线在采样窗口期间是高电平,则逻辑 1 被写入 DS18B20;若总线是低电平,则逻辑 0 被写入 DS18B20。

 

 

读出一位

主设备在执行完读暂存寄存器[BEh] 或读取供电模式[B4h]后,必须及时地生成读时段,这样 DS18B20 才能提供所需的数据。
每个读时段最小必须有 60us 的持续时间且独立的写时段间至少有 1us 的恢复时间。
读时段通 过主设备将总线拉低超过 1us 再释放总线来实现初始化。当主设备初始化完读时段后, DS18B20 将会向总线发送 0 或者 1。
从 DS18B20 中输出的数据在初始化读时序后仅有 15us 的有效时间。因此,主设备 在开始读时段后的 15us 之内必须释放总线,并且对总线进行采样。

 

写入一个字节

写入一位×8

读出一个字节

读出一位×8

温度存储格式

温度是以一个Byte的LSB和MSB共同存储。
其中MSBtye的前5位是符号位,都为0则为正,都为1则为负;LSByte的后四位为小数位。
所以要读取到完整的温度,先将LSByte和MSByte合并(MSB左移八位, | 上LSByte存储到int类型的变量中),但又因为LSB后四位为小数位,和正常的八位二进制相对比,等于将2的零次方向左移动了四位,扩大了16倍,所以要将int类型的变量除以16,但为保持精度(小数位),应除以16.0.

代码(不同模块)
使用STC89C52RC

/*
    读写一位和一个字节模块
*/

#include <REGX52.H>

sbit OneWire_DQ = P3^7;

/**
  * @brief 初始化
  * @param 无
  * @retval AckBit 1为从机不存在 0为从机存在(发送了一个存在脉冲)
  */
unsigned char OneWire_Init(void)
{	
	unsigned char i;
	unsigned char AckBit;
	OneWire_DQ = 1;
	OneWire_DQ = 0;

	//Delay 500us
	i = 247;while (--i);
	
	OneWire_DQ = 1;

	//Delay 70us
	i = 32;while (--i);
	
	AckBit = OneWire_DQ;

	//Delay 500us
	i = 247;while (--i);
	
	return AckBit;
}

/**
  * @brief 写入一位数据
  * @param Bit 要写入的一位数据
  * @retval 无
  */
void OneWire_SendBit(unsigned char Bit)
{
	unsigned char i;
	OneWire_DQ = 0;
	
	i = 4;while (--i);	 //Delay 10us
	
	OneWire_DQ = Bit;
	
	i = 24;while (--i);	 //Delay 50us
	
	OneWire_DQ = 1;
}

/**
  * @brief 接收一位数据
  * @param 无
  * @retval Bit 接收的一位数据
  */
unsigned char OneWire_ReceiveBit(void)
{
	unsigned char i;	
	unsigned char Bit;
	OneWire_DQ = 0;
	i = 2;while (--i);	 //Delay 5us
	OneWire_DQ = 1;
	i = 2;while (--i);	 //Delay 5us
	Bit = OneWire_DQ;
	i = 24;while (--i);	 //Delay 50us	
	return Bit;
}

/**
  * @brief 发送一个字节的数据
  * @param 要发送的一个字节的数据
  * @retval 无
  */
void OneWire_SendByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0; i<8; i++)
	{
		//低位在前
		OneWire_SendBit(Byte & (0x01 << i));
	}
	
}

/**
  * @brief 接收一个字节的数据
  * @param 无
  * @retval Byte 接收的一个字节的数据
  */
unsigned char OneWire_ReceiveByte(void)
{
	unsigned char i;
	unsigned char Byte = 0x00;
	for(i=0; i<8; i++)
	{
		if(OneWire_ReceiveBit())
		{
			//低位在前
			Byte |= 0x01 << i;
		}	
	}
	return Byte;
}
/*
    DS18B20温度变换与温度读取
*/

#include <REGX52.H>
#include "OneWire.h"

#define DS18B02_SKIP_ROM          0xCC
#define DS18B02_CONVERT_T         0x44
#define DS18B02_READ_SCRATCHPAD   0xBE

/**
  * @brief 温度转换
  * @param 无
  * @retval 无
  */
void DS18B20_ConvertT(void)
{
	OneWire_Init();
	OneWire_SendByte(DS18B02_SKIP_ROM);
	OneWire_SendByte(DS18B02_CONVERT_T);
}

/**
  * @brief 读出暂存寄存器
  * @param 无
  * @retval T 温度寄存器中的数据
  */
float DS18B20_ReadT(void)
{
	unsigned char TLSB, TMSB;
	int Temp;
	float T;
	OneWire_Init();
	OneWire_SendByte(DS18B02_SKIP_ROM);
	OneWire_SendByte(DS18B02_READ_SCRATCHPAD);
	TLSB = OneWire_ReceiveByte();
	TMSB = OneWire_ReceiveByte();
	Temp = (TMSB << 8) | TLSB;
	T = Temp / 16.0;
	return T;
}
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "OneWire.h"
#include "DS18B20.h"

float T;

void main()
{
	DS18B20_ConvertT();
	Delay(1000);
	LCD_Init();
	while(1)
	{
		KeyNum = Key();
		DS18B20_ConvertT();
		T = DS18B20_ReadT();
		if(T<0)
		{
			LCD_ShowChar(2,1,'-');
			T = -T;
		}
		else
		{
			LCD_ShowChar(2,1,'+');
		}
		LCD_ShowNum(2,2,T,3);
		LCD_ShowChar(2,5,'.');
		LCD_ShowNum(2,6,(unsigned long)(TShow*10000)%10000,4);//取出小数点后四位
	}
}

使用DS18B20的核心就是掌握时序的Delay以实现不同功能。

菜鸡扩展:如果1-Write上有多个DS18B20,则不能直接跳过ROM,要先搜索ROM(使得主设备确定总线上所有的从设备(好像要用到二叉搜索树算法)),再通过ROM编码去匹配ROM匹配不同的从机(发送64位的ROM编码,去匹配特定的从机),使得能让特定的从机执行特定的功能。
该文只是基于一个DS18B20,所以可以直接跳过ROM,或者能去直接读取ROM。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DS18B20数字温度传感器 的相关文章

  • iview表格单元格动态绑定class/style,不刷新表格本身.

    对订单表格的时间列 动态检验时间是否过期并用颜色标记 关键点是在render中的渲染函数动态绑定class style 小问题是表格数据本身是确定的不再变化 我们又需要跟随时间变化 所以首选需要一个定时器 定时器不能放在表格里会导致计时器不
  • 我的第一个小爬虫程序-python

    爬什么 爬代理服务器网站的服务器 端口 代理种类 所在地区 更新日期 今日评分 总的评分 可用 速度测评信息 这样的网页有七八个 好在网址明名很规则 具体说就是爬很多的这样的html代码里的信息 span class tbBottomLin

随机推荐

  • 【论文】AMC:AutoML用于移动设备上的模型压缩和加速

    摘要 模型压缩是在计算资源有限且功率预算紧张的移动设备上高效部署神经网络模型的有效技术 传统的模型压缩技术依赖于手工制作的特性 需要领域专家在模型大小 速度和精度之间进行权衡 以探索大的设计空间 这通常是次优和耗时的 在本文中 我们提出了用
  • 不想安装环境,我如何与前端工程师远程协作开发?

    最近我的一名前端工程师朋友Wendy正基于自己的想法开发一个开源项目 为了让用户了解并试用项目 她准备用Nextjs这个前端框架搭建一个用户使用手册网站 写文档的时候 她想到了我这个产品经理朋友 希望我能够帮助她一起开发这个网站 提供更好的
  • 【Qt/C++异常笔记】“QHostInfo”: 不是类或命名空间名称

    文章目录 异常描述 异常原因 解决方法 开发环境 异常描述 在读取主机名称时 需要用到 QHostInfo localHostName 但是使用了之后一直报错 QHostInfo 不是类或命名空间名称 头文件中引用 include
  • 《数据结构与算法》实验:图结构的建立与搜索

    数据结构与算法 实验和课程Github资源 数据结构与算法 实验 线性结构及其应用 算术表达式求值 数据结构与算法 实验 树型结构的建立与遍历 数据结构与算法 实验 图结构的建立与搜索 数据结构与算法 实验 查找结构的实验比较 二叉查找树B
  • 图的m着色问题(第十二次实验)

    图的m着色问题 问题 图的m着色问题 给定无向连通图G和m种颜色 用这些颜色给图的顶点着色 每个顶点一种颜色 如果要求G的每条边的两个顶点着不同颜色 给出所有可能的着色方案 如果不存在 则回答 NO 解析 图着色问题描述为 给定无向连通图G
  • Qt开发之QTableWidget

    QTableWidget从继承QTableView 实质属于模型 视图范畴之内 只是带了默认模型 model 基于项目 item 的表格视图控件 我们不需要实现model内的数据加工 QTableWidget为应用程序提供了标准的表显示工具
  • 【MybBatis高级篇】MyBatis 拦截器

    MybBatis高级篇 MyBatis 拦截器 拦截器介绍 实现拦截器 注册拦截器 应用 yml DynamicSql Dao 层代码 xml 启动类 拦截器核心代码 代码测试 拦截器应用场景 MyBatis 是一个流行的 Java 持久层
  • python数据分析与可视化——第二章实训

    1 读取数据 import csv f open F 专业课程作业 python时空数据分析与可视化 white wine csv r 定义读取器 reader csv reader f data 定义列表存储读取的数据 for row i
  • UML 建模步骤 用例图 类图 对象图 包图 顺序图/时序图 状态图 活动图 协作图

    统一建模语言 Unified Modeling Language UML 是一种为面向对象系统的产品进行说明 可视化和编制文档的一种标准语言 是非专利的第三代建模和规约语言 UML是面向对象设计的建模工具 独立于任何具体程序设计语言 1 U
  • C基础day3(2023.7.3)

    一 Xmind整理 二 作业 1 include
  • Ubuntu下muduo库安装和配置到系统环境

    1 本次安装通过源码安装 在安装之前必须要安装git 系统是Ubuntu muduo库源码github仓库地址 https github com chenshuo muduo 2 git 安装 sudo apt get install gi
  • [架构之路-192]-《软考-系统分析师》-8-软件工程 - 14种UML图快速概览

    目录 第1章 UML概述 1 1 什么是UML 1 2 为什么要用UML 1 3 UML图有哪些 1 4 UML图概览 第2章 UML图示 2 1 静态图 结构图 什么是类图 泛化 Generalization 实现 Realization
  • 投资人热捧的创业大赛,有哪些AI原生应用值得关注?

    绝对远超全球同类产品 一位大模型创业者对百度文心一言的表现不吝夸奖 这是一家生产效率工具创业公司的负责人 今年5月百度发起大模型领域创业比赛 文心杯 他率先报名参赛并入选决赛文心创业营 目前与其他30多家入围企业一起 正基于百度文心大模型构
  • linux中init.d文件夹的说明

    一 简单说明 etc init d 是 etc rc d init d 的软链接 soft link 可以通过 ll 命令查看 ls ld etc init d lrwxrwxrwx 1 root root 11 Aug 30 2015 e
  • window.open()的替代方法

    window open 是被很多杀毒软件禁止的弹出框方式 所以可以采用form post的方式来打开 function OpenWindByPost window top location ctx page confirm confirmT
  • File类

    一 概述 1 File在包java io File下 代表系统的文件对象 文件 文件夹 File提供了诸如 定位文件获取文件本身的信息 删除文件 创建文件 文件夹 等功能 File创建对象有三种方法 第一种最为方便 其他两种只要没点大病都不
  • LeetCode 451. Sort Characters By Frequency

    原题网址 https leetcode com problems sort characters by frequency Given a string sort it in decreasing order based on the fr
  • Midjourney API 接口调试

    最近写了一个Midjourney API的接口 可以通过调用接口实现AI绘画 本地服务使用了 Midjourney 最近关注AI比较多 自己实现了一个AI绘画 Midjourney的接口 通过发送关键词就能实现绘画 发现需要的人也挺多的 准
  • JDK8主要新特性介绍(一)

    1 语言新特性1 1接口新增默认方法与静态方法 1 1 1 Interface Default Method For creating a default method in java interface we need to use de
  • DS18B20数字温度传感器

    DS18B20是一种数字温度传感器 由美国达拉斯半导体公司生产 具有以下特征 1 单线传输 DS18B20使用单线传输协议 1 Wire 进行通信 只需要一个数据线就可以实现数据传输和电源供应 2 高精度 DS18B20可以测量范围为 55