DS18B20温度传感器完整使用介绍(配合51单片机)

DS18B20是一款由Maxim Integrated(原Dallas Semiconductor)生产的数字温度传感器,以其高精度、低功耗、灵活的接口方式和易于使用的特性,在各种温度监测应用中被广泛采用。

以下是DS18B20的详细介绍:

基本特性

  1. 数字输出:DS18B20直接输出数字信号,与传统的模拟温度传感器相比,它简化了与微控制器的接口设计,减少了对模数转换器(ADC)的需求。

  2. 单总线接口:采用独特的单线(1-Wire)通信协议,仅需一根数据线即可完成与微控制器的双向通信,降低了硬件成本和复杂度。此外,多个DS18B20可以通过这条单线总线连接在一起,每个传感器都有一个唯一的64位序列号,使得系统能够识别并单独寻址每个传感器。

  3. 温度测量范围:DS18B20的测量范围广泛,从-55°C到+125°C(-67°F至+257°F),满足了大多数常规温度测量需求。

  4. 高精度与分辨率:在-10°C到+85°C范围内,其精度通常可达到±0.5°C;分辨率可在9位至12位之间调节,默认为12位,对应分辨率最高达0.0625°C。

  5. 低功耗:工作电压范围为3V至5.5V,静态电流极低,非常适合电池供电的应用。

  6. 多功能性:DS18B20支持多种工作模式,包括温度转换模式、读取温度模式、配置模式等,用户可以根据需要设置不同的工作参数。

  7. 封装形式多样:DS18B20提供了多种封装形式,如TO-92、SOP8、DIP8等,适应不同的安装需求,包括管道式、螺纹式、磁铁吸附式、不锈钢封装式等,适用于各种恶劣或狭小环境的温度测量。

应用场景

DS18B20因其灵活性和可靠性,被广泛应用于多种领域,包括但不限于:

  • 家用电器(如冰箱、空调温度监控)
  • 工业自动化(如设备温度监控、环境温度控制)
  • 农业(如温室大棚温度管理)
  • 数据中心和服务器机房的温度监测
  • 汽车电子(发动机温度监控)
  • 医疗设备温度监控
  • 水族箱和养鱼场的水温控制

使用方法

使用DS18B20通常需要遵循一定的通信协议,包括初始化、搜索传感器、读取或设置寄存器等步骤。在编程时,开发者需编写相应的代码来控制单总线的时序,或者利用已有的库函数(如Arduino、Raspberry Pi等平台上的库)来简化操作。通过简单的函数调用,即可读取到当前的温度值。

原理图

image-20240531153702317

image-20240531153622926image-20240531153636304

实验板上的DS18B20模块接在单片机的P3.7 IO口上,在插入DS18B20芯片时,圆弧朝上插入,具体效果可以看上面图片。

DS18B20的工作原理介绍

DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。

它的一个工作周期可分为两个部分,温度检测和数据处理。

DS18B20内部有三种形态的存储器:

(1) ROM只读存储器:用于存放 DS18B20ID 编码,其前 8 位是单线系列编码(DS18B20 的编码是19H),后面 48 位是芯片唯一的序列号,最后8位是以上56的位的 CRC 码(冗余校验),数据在芯片出厂时设置不可由用户更改。DS18B20 共 64 位 ROM(8+48+8)。

(2) RAM数据暂存器:用于内部计算和数据存取,数据在掉电后丢失,DS18B20 共 9 个字节 RAM,每个字节为 8 位。第 1、 2 个字节是温度转换后的数据值信息,第 3、 4 个字节是用户 EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第 5 个字节则是用户第 3 个 EEPROM的镜像。第 6、 7、 8 个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节为前 8 个字节的 CRC 码。

(3) EEPROM非易失性记忆体:用于存放长期需要保存的数据。比如: 上下限温度报警值和校验数据,DS18B20共有3个字节的EEPROM,并在 RAM 都存在镜像,以方便用户操作。

DS18B20默认工作在12位分辨率模式,转换后得到的12位数据,存储在DS18B20的两个8比特的RAM中(最前面的两个字节),二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

数据提取也可以使用位运算,读取出来的数据是2个字节一共16位(H和L),最低4位是小数位,剩下的是整数位。如果读取的数据是负数,需要-1再取反即可得到真实数据。

例如:

int temp=0;
temp=DS18B20_ReadTemp(); //读取一次DS18B20采集的温度(返回H+L位)
if(temp<0) //如果温度是负数
{temp=temp-1;temp=~temp;printf("DS18b20=-%d.%d\r\n",temp>>4,temp&0xF);
}
else
{
printf("DS18b20=%d.%d\r\n",temp>>4,temp&0xF);
}

读取DS18B20温度示例代码(单只DS18B20情景)

下面代码演示了循环读取DS18B20温度的过程,在主函数里1秒的间隔读取一次温度。

在编写DS18B20时序代码时,要注意时间的把控。

当前实验板的环境:采用STC90C516RD单片机,晶振是12MHZ,工作在12T模式下,代码中执行一条i++语句大概消耗的时间是12us。 程序中的延时时间,都是通过该时间推算的,如果程序要移植到其他单片机上,要注意时间的问题。

(硬件平台说明:CPU是STC90C516RD、晶振频率12MHZ 、工作在12T模式下、一个机器周期为1us时间)

示例代码:

#include <reg51.h>
/*DS18B20硬件接口: P3.7*/
sbit DS18B20_GPIO=P3^7;
int DS18B20_ReadTemp(void);
/*
说明: 在12MHZ晶振下,12T模式下,i++消耗的时间差不多是12us
*/
/*
函数名称:u8 DS18B20_Init(void)
函数功能:向DS18B20发送复位脉冲,并检测应答信号
返 回 值:1表示失败,0表示成功
说明: 51单片机IO口默认输出高电平
*/
u8 DS18B20_ResetSignal(void)
{u8 i=0;//1. 发送复位信号DS18B20_GPIO=0;//将总线拉低480usi=50;   while(i--){}   //延时600us ,最少480usi=0;DS18B20_GPIO=1;//然后释放(拉高)总线,如果DS18B20做出反应会将在15us~60us后总线拉低//2. 等待DS18B20拉低总线while(DS18B20_GPIO){i++;if(i>10)return 1;//失败 ,大概120us}//3. 等待DS18B20释放总线i=0;while(DS18B20_GPIO==0) //60us~240us{i++;if(i>20)return 1;//失败,大概240us}return 0;//初始化成功
}
/*
函数名称:u8 DS18B20_WriteByte(void)
函数功能:向DS18B20写入一个字节的数据
函数形参:写入的字节数据
*/
void DS18B20_WriteByte(u8 byte)
{u16 i=0,j=0;for(j=0;j<8;j++){DS18B20_GPIO=0;//每写入一位数据之前先把总线拉低1usi++; //+1消耗的时间是12usDS18B20_GPIO=byte&0x01;//然后写入一个数据,从最低位开始i=6;while(i--){}//持续时间最少60us,这里大概72usDS18B20_GPIO=1;//然后释放总线byte>>=1;//继续发送}
}
/*
函数名称:u8 DS18B20_ReadByte(void)
函数功能:从DS18B20读取一个字节的数据
返 回 值:读到的数据
*/
u8 DS18B20_ReadByte(void)
{u8 byte=0;u16 i=0,j=0;    for(j=0;j<8;j++){DS18B20_GPIO=0;//先将总线拉低1usi++;//+1消耗的时间是12usDS18B20_GPIO=1;//然后释放总线i++; i++;//至少等待15us的时间,在读取数据byte>>=1; //先从低位开始接收数据if(DS18B20_GPIO)byte|=0x80;                   i=4; //读取完之后等待48us再接着读取下一个数据while(i--){}}               return byte;
}
/*
函数名称:u16 DS18B20_ReadTemp(void)
函数功能:读取一次DS18B20的温度数据
返 回 值:读取的温度值
注意: 返回值要使用有符号的数据类型,因为温度可以返回负数。
*/
int DS18B20_ReadTemp(void)
{int temp=0;//存放温度数据u8 TH,TL;//第一步: 启动温度转换DS18B20_ResetSignal(); //发送复位脉冲并检测应答信号DS18B20_WriteByte(0xcc);//跳过ROM操作命令      DS18B20_WriteByte(0x44);//温度转换命令//第二步: 读取温度DS18B20_ResetSignal();//发送复位脉冲并检测应答信号DS18B20_WriteByte(0xcc);//跳过ROM操作命令DS18B20_WriteByte(0xbe);//发送读取温度命令TL=DS18B20_ReadByte();//读取温度值共16位,先读低字节TH=DS18B20_ReadByte();//再读高字节temp=TH<<8|TL; //合并成16位return temp;
}
int main()
{int temp=0;UART_Init();        //初始化串口波特率为4800while(1){temp=DS18B20_ReadTemp();if(temp<0) //如果温度是负数{temp=temp-1;temp=~temp;printf("DS18b20=-%d.%d\r\n",temp>>4,temp&0xF);}else{printf("DS18b20=%d.%d\r\n",temp>>4,temp&0xF);}DelayMs(1000);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的map

作用&#xff1a; 映射&#xff0c;相当于python的字典&#xff0c;使用一个key来寻找value&#xff0c;m[key]value; 生成&#xff1a; map<int,string> m;//无参生成&#xff0c;key是int类型&#xff0c;value是string类型 map<int,string> m{{1,"hello…

【docker实战】使用Dockerfile的COPY拷贝资源遇到的问题

事情是这样的。 在我负责的golang项目中&#xff0c;使用硬代码验证某块逻辑。比如&#xff1a; 于是&#xff0c;为了解决硬代码的问题&#xff0c;我制作了表格工具&#xff1a;【开源项目】Excel数据表自动生成工具v1.0版 – 经云的清净小站 (skycreator.top)。 使用表格工…

『C++11』基础新特性

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前言 自从C98以来&#xff0c;C11无疑是一个相当成功的版本更新。它引入了许多重要的语言特性和标准…

ADS基础教程21 - 电磁仿真(EM)模型的远场和场可视化

模型的远场和场可视化 一、引言二、操作步骤1.定义参数2.执行远场视图&#xff08;失败案例&#xff09;3.重新仿真提取参数 三、总结 一、引言 本文介绍电磁仿真模型的远场和场可视化。 二、操作步骤 1.定义参数 1&#xff09;在Layout视图&#xff0c;工具栏中点击EM调出…

【递归、搜索与回溯】综合练习二

综合练习二 1.组合2.目标和3.组合总和4.字母大小写全排列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.组合 题目链接&#xff1a;77. 组…

RabbitMQ实践——定制一致性Hash交换器的路由字段

大纲 Property法定制交换器绑定队列测试 Header法定制交换器绑定队列测试 参考资料 在《RabbitMQ实践——利用一致性Hash交换器做负载均衡》一文中&#xff0c;我们熟悉了一致性Hash交换器的使用方法。默认的&#xff0c;它使用Routing key来做Hash的判断源。但是有些时候&…

Maven 快速入门

Maven 简介 Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 依赖管理 方便快捷的管理项目的依赖资源(jar包),避免版本冲突 配置 依赖: 指当前项目运行所需要的(jar包) 在pom.xml 中编写<dependencies> 标签 在<dependencies…

线程池监控是怎么做的?

引言&#xff1a;在现代软件开发中&#xff0c;线程池是一种重要的并发控制机制&#xff0c;它能有效管理和复用线程资源&#xff0c;提升系统的性能和响应速度。然而&#xff0c;随着应用规模的扩大和复杂性的增加&#xff0c;对线程池进行有效监控显得尤为重要。线程池监控不…

bellman-ford——AcWing 853. 有边数限制的最短路99

bellman-ford 定义 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种用于在加权有向图中计算单源最短路径的算法。 运用情况 可以处理存在负权边的图。常用于找出图中从一个特定顶点到其他所有顶点的最短路径。 注意事项 时间复杂度相对较高。如果图中包含从源…

计算机毕业设计Django+Vue.js考研推荐系统 考研分数线预测 中公考研爬虫 混合神经网络推荐算法 考研可视化 机器学习 深度学习 大数据毕业设计

Python数据分析与可视化期末项目报告 项目名称&#xff1a; 考研推荐系统数据分析与可视化 学 号&#xff1a; 姓 名&#xff1a; …

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具。 之前有出过一期基本的介绍&#xff0c;但是后台收到有些小伙伴说&#xff0c;不知道如何使用。 今天我将会手把手的详细介绍…

怎么加密U盘数据?U盘加密软件哪个好?

U盘是我们在生活和工作中最常用的移动存储设备&#xff0c;而为了避免U盘数据泄露&#xff0c;我们需要使用U盘加密软件来加密保护U盘数据。那么&#xff0c;U盘加密软件哪个好呢&#xff1f;下面我们就一起来了解一下吧。 BitLocker加密 BitLocker是Windows系统提供的磁盘加密…

多种传感器在钢铁工业安全风险监测预警中的应用

中国作为钢铁行业的生产与消费大国&#xff0c;其钢铁冶炼流程的复杂性和长周期性使得各环节中频繁出现的有毒有害、易燃易爆气体以及粉尘等危险物质成为行业安全管理的重大挑战。为了保障工作人员的安全&#xff0c;多种传感器在安全风险监测预警中的应用显得尤为重要。 钢铁产…

java从红外图片提取温度,计算超过阈值的温度占总面积的百分比

灰度图是单通道图&#xff0c;像素只有一个值&#xff1a;灰度值。灰度值越高&#xff0c;则图像越亮。 现在我们已经知道我们看到一张灰度图是由许多不同灰度值的像素点构成&#xff0c;而每个像素就是一个越亮的像素&#xff0c;灰度值越高&#xff0c;最高值是255&#xff…

Latex的参考文献中显示三个问号???——解决办法

1、问题描述 在使用spring模板&#xff0c;并引用book时&#xff0c;末尾的引文地方出现三个???由于使用的bibtex是直接从谷歌学术中导出来的&#xff0c;其中仅包含作者&#xff0c;书名&#xff0c;出版社&#xff0c;年份等&#xff0c;缺少了重要的信息。结果导致在出版…

什么!没有Starter的阿里云OSS也能集成到SpringBoot?

实际上&#xff0c;我们在Maven存储库中尝试搜索阿里云OSS。在此过程中&#xff0c;我们会发现阿里云官方未提供一种集成Spring Boot的模式&#xff0c;即xxx-Springboot-Starter&#xff0c;显然&#xff0c;这是一个需要自行定制的组件。然而&#xff0c;如今许多企业在研发过…

LeetCode | 520.检测大写字母

这道题直接分3种情况讨论&#xff1a;1、全部都为大写&#xff1b;2、全部都为小写&#xff1b;3、首字母大写其余小写。这里我借用了一个全是大写字母的串和一个全为小写字母的串进行比较 class Solution(object):def detectCapitalUse(self, word):""":type …

【机器学习】计算机图形和深度学习模型NeRF详解(1)

1.引言 1.1.1. NeRF研究的背景 人们在拍照的时候&#xff0c;往往会中各个角度进行拍摄&#xff0c;以呈现出物体的全貌和美丽。下图的照片&#xff0c;拍摄的是一架楼梯&#xff0c;但是拍摄的角度完全不同&#xff1a; 我们可以看到这些图片都是楼梯的照片&#xff0c;但拍…

Training language models to follow instructions with human feedback 论文阅读

论文原文&#xff1a;https://arxiv.org/pdf/2203.02155 论文简介 语言模型越大并不意味着它能更好的理解用户的意图&#xff0c;因此在这篇论文中&#xff0c;展示了根据人的反馈对模型进行微调&#xff0c;使得语言模型能够在各种人物上更好的理解用户的意图。在评估中&…