DS18B20读取温度实验

📅 发布时间:2026/7/17 17:07:55
DS18B20读取温度实验 文章目录一.DS18B20简介二.手册解析1.单总线协议2.DS18B20内部框图3.DS118B20供电模式4.温度数据5.温度报警6.64位光刻ROM编码7.配置寄存器8.流程8.1初始化8.2ROM命令8.3DS18B20功能命令9.时隙10.状态及状态转移三.代码一.DS18B20简介DS18B20数字温度传感器提供9-12bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温报警功能。采用单总线接口方式通信每个设备内部ROM上烧写了一个独一无二的序列号可以由数据线供电而不需要外部电源供电测量范围在-55℃~125℃在温度范围超过-10摄氏度至85摄氏度之外时还具有±0.5℃的精度二.手册解析1.单总线协议1-Wire总线系统即一个总线主设备控制一个或多个从设备。DS18B20始终是一个从设备。当总线上只有一个从设备时,此系统被称为“单节点”系统;当总线上有多个从设备连接时,此系统被称之为“多节点”系统。1-Wire总线上所有的命令或者数据的发送送都是遵循低位先发送的原则。接下来关于1-Wire总线系统的描述将会分成三个部分:硬件配置,事件序列和1-Wire总线信号(信号定义和时序)。2.DS18B20内部框图3.DS118B20供电模式DS18B20可以通过外部电源供电,也可以通过“寄生电源”供电。那么什么是“寄生电源”?上图中模式就是寄生电源模式,结合内部框图来看,DQ拉高时由其向设备供电,总线拉高时为内部电容充电,总线拉低时改由电容向设备供电。上图中模式是外接电源模式。这样不需要上拉的MOSFET,单总线在温度转换期间可以执行其他动作。4.温度数据两字节共16bit数据存储温度数据,其中bit11-bit15存储符号位S(0为正数,1为负数);bit4-bit10存储整数部分;bit0-bit3存储小数部分(这一部分要考察精度,12位转换精度时,四位小数都会有值;11位转换精度时,bit0为未定义;10位转换精度时,bit0和bit1为未定义;9位转换精度时,bit0、bit1和bit2为未定义)温度/数据关系5.温度报警过温和低温数据各存在于一个字节(8bit数据)内。我们可以理解为我们设定的一个阈值,与我们传感器测量的温度数据进行比较。其寄存器值如下需要注意的是,过温和低温报警寄存器存储的是整数,所以我们只和温度寄存器的bit4-bit11整数部分比较。6.64位光刻ROM编码64位中,低8位为保存有DS18B20的分类编码:28h。中间的48位中保存着独一无二的序列号。最高8位保存CRC校验值7.配置寄存器一字节中两个bit数据定义之前说的转换精度bit0-bit4和bit7作为内部使用保留,不可被写入。主要考虑其中bit5和bit6,也就是R0和R1的值 [上电默认R0=1,R1=1(12位分辨率)]8.流程8.1初始化需要复位信号和存在脉冲(计时,状态转换条件)8.2ROM命令由于我们只有一个DS18B20传感器,所以我们只考虑跳过ROM命令8.3DS18B20功能命令这里我们只考虑温度转换命令【44h】和读取暂存器命令【BEh】DS18B20功能命令续在ROM命令完成后开始。完成一次功能命令后,需要回到初始化状态再走一次跳过ROM命令,再进行下一个功能命令。如图中,先走红线,然后再次进入到DS18B20功能命令时走绿线。9.时隙写时段有两种情况:“写1”时段和“写0”时段。主设备通过写1时段来向DS18B20中写入逻辑1以及通过写0时段来向DS18B20中写入逻辑0。每个写时段最小必须有60us的持续时间且独立的写时段间至少有1us的恢复时间。两个写时段都是由主设备通过将1-Wire总线拉低来进行初始化。为了形成写1时段,在将1-Wire总线拉低后,主设备必须在15us之内释放总线。当总线释放后,5kΩ的上拉电阻将总线拉至高。为了形成写0时段,在将1-Wire总线拉低后,在整个时段期间主设备必须一直拉低总线(至少60us)。在主设备初始化写时段后,DS18B20将会在15us至60us的时间窗口内对总线进行采样。如果总线在采样窗口期间是高电平,则逻辑1被写入DS18B20;若总线是低电平,则逻辑0被写入DS18B20。10.状态及状态转移状态转移图如下,状态解析以及状态转移条件可以参考资源https://download.csdn.net/download/weixin_67803687/88254394三.代码ds18b20_dirverDate : 2023年8月21日16:44:25 Author : Alegg xy. Version : 1.0 Description: *********************************************************************************/ //---------模块及端口声名------------------------------------------------------ module ds18b20_driver( input clk , input rst_n , output [23:0] temp_data, output reg