FPGA—DS18B20数字温度传感器(附代码)

本文详细介绍了DS18B20数字温度传感器的工作原理、特性、内部结构,包括1-Wire总线协议、温度测量原理和操作步骤。并讨论了如何使用FPGA控制DS18B20进行实时温度转换,并在数码管上显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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 模块框图

2.3.2 代码编写

3.上板验证

4.总结

1.理论学习

DS18B20概述

         DS18B20是DALLAS半导体公司出产的单总线数字温度传感器,其输出为数字信号,具有体积小、功耗低、抗干扰能力强、精度高等特点。本文学习DS18B20的工作原理以及如何使用单总线去控制其进行温度测量

       DS18B20 数字温度传感器提供 9-Bit 至 12-Bit(可配置)温度读数和一个用户可编程的非易失性且具有高温和低温触发报警的报警功能。 DS18B20 采用 1-Wire 通信即仅采用一根数据线与微控制器进行通信。该传感器的温度检测范围为-55℃至+125℃,在范围-10℃至+85℃之间具有± 0.5℃的精度。此外读取、写入和执行温度转换的电源可以从数据线本身获得,而不需要外部电源,当然使用外部电源供电也行。每个 DS18B20 都有一个独一无二的 64 位序列号,所以可以在一根总线上连接多个DS18B20 设备。

DS18B20特性

      1.采用单总线的接口方式。

      2.测温范围宽、精度高。

      3.无需外围电路。

      4.支持多点组网功能,可实现多个点测温。加下图

      5.可进行温度报警设计。

      6.供电方式灵活,寄生电源或外部电源。见下图

      7.温度采集精度可调节,精度转换时间短。

      8.具有掉电保护功能,可保存报警阈值以及采集精度位宽。

      9.负压特性,防止因接反导致烧毁传感器。

DS18B20内部结构

 DS18B20 内部结构图

高速缓存器:

        高速缓存器包含存储有数字温度结果的 2 个字节宽度的温度寄存器。另外,还提供了一个字节的高温(TH)和一个字节的低温(TL)温度报警寄存器和一个字节的配置寄存器。配置寄存器允许用户自定义温度转换精度 ( 9 位, 10 位 , 11 位 , 12 位) 。高温和低温温度报警器寄存器是非易失性的(EEPROM),其可以在断电的情况下保存。下面是高速缓存器的内部数据结构图。

配置寄存器:

       高速缓存器中第四个字节即为配置寄存器,如下图示。用户通过改变 R1 和 R0 的值来配置 DS18B20 的分辨率。上电默认为 R1=1 以及 R0=1(12 位分辨率)。需要注意的是转换时间与分辨率时间是有关系的,如下表所示。另外寄存器中最高位和低 5 位作为内部使用而保留使用,不可被写入。

 64位光刻ROM:

       每个 DS18B20 的片内 ROM 都存有一个独一无二的 64 位编码,如下图所示。在该ROM 编码的低 8 位保存有 DS18B20 的分类编码: 28h。中间的 48 位是独一无二的序列号。最高 8 位是前面 56 位的 CRC 循环冗余校验码( CRC=X8+X5+X4+1)。因为每个DS18B20 的序列号都不一样,所以一条总线上可以控制多个 DS18B20。

1-Wire 总线协议:

       总线协议仅需一个控制信号进行通信。在该总线系统中,微控制器(主设备)通过设备的 64 位序列号来识别该总线上的设备。 DS18B20 可以无需外部电源供电,当数据线 DQ 为高时由数据线为设备供电。当总线拉高时给内部电容( Cpp)充电,当总线拉低时由该电容给设备供电。这种由总线给设备供电的方式称为“寄生电源”。这种供电方式接线简单,但对于多点测温需要数据线上的更大的电流功能。这里使用的还是外部电源供电。

温度测量原理

       DS18B20中的温度传感器可以完成对温度的测量。其温度转换可由用户自定义(改变配置寄存器中R0与R1的值)为 9、 10、11、 12 位,精度分别为 0.5℃、 0.25℃、 0.125℃、 0.0625℃分辨率,若不设置则默认为 12位的转换精度。符号标志位(S)温度的正负极性:若 S=0,则为正数;若 S=1,则为负数。

       若要测量温度,主设备必须向 DS18B20 发送温度转换命令[44h]才能开始温度转换。温度转换后,转换的温度值将会保存在高速缓存器的温度寄存器中。只有通过读高速缓存器命令[BEh]才能将数据读出,数据通过 1-Wire 总线传输,传输顺序为低位到高位依次传输。如果 DS18B20 被定义为 12 位的转换精度,温度寄存器中所有位都将包含有效数据。若定义为 11 位转换精度,则 bit 0(最低位)为未定义的。若定义为 10 位转换精度,则 bit 0 和 bit 1 为未定义的。若定义 9 位转换精度,则 bit 0、 bit 1 和 bit 2 为未定义的。

 温度寄存器格式

 温度/数据对应关系

       待输出的数据是以二进制补码的形式存储在温度寄存器中的,所以要求温度值先得求原码再转化为十进制后乘以精度。正数的原码反码补码都是一样的,而负数的补码就是对反码加一。当温度为负数时,需先求得其原码(补码先减一再取反即为其原码)然后转换为十进制后乘以精度。例如数据输出为1111_1111_0101_1110,高六位全为1故判断此数为负数,将11_0101_1110减一后取反得到00_10100010,再将其转换为十进制得到162,乘以0.0625,填上负号最后算的温度为 -10.125摄氏度。 这里特别说明的是符号位只代表数据的正负,无论是取反还是求值它都是不算在里面的。另外上电复位时寄存器中的初始值为+85℃。

DS18B20操作步骤

       主机控制DS18B20完成温度转换必须经过三个步骤:每次读写之前都要对DS18B20进行初始化操作,操作完成后发送一条ROM命令,再发送一条RAM命令,这样才能对DS18B20进行预定的操作。

1.初始化

      1-Wire 总线上的所有事件都必须以初始化为开始。初始化序列由总线上的主设备发出的复位脉冲以及紧跟着从设备回应的存在脉冲构成。该存在脉冲是让总线主设备知道DS18B20 在总线上并准备好运行。

2.ROM命令

      ROM命令是对每个设备的 64 位 ROM 编码进行操作的,当总线上连接有多个设备时,可以通过这些命令识别各个设备。总共包含有 5 种 ROM 命令,每个命令的长度都是 8bit。

搜索ROM [F0h] :

       当系统上电初始化后,主设备可识别该总线上所有的从设备的 ROM 编码,这样就可以使得主设备确定总线上的从设备的类型以及数量。

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值