来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)

作者:韦东山

本文字数:1322,阅读时长:2分钟

比DHT11温湿度传感器精度高很多

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(1)

DS18B20只通过一条数据线传输数据,既要控制器发送数据给芯片,又要通过芯片发送数据给控制器,所以这个是双向传输数据的

怎么在一个引脚上实现数据的双向传输 : 参考这视频的第19分钟之后的内容: 第19课_第001节_I2C协议与EEPROM

检测温度,我们需要一个主控芯片

如果有多个温度传感器,则需要一个主控制器去管理它们,通过发送命令传输数据,每个设备都会有固化在芯片内部的64bit ID的ROM来用于区分不同的设备

如果主控制器想访问设备,必须发送命令,这个命令中带有ID返回值

怎么访问指定的DS18B20

  • 0 发出低脉冲,提醒准备工作: initialization
  • 1 发出ID命令:ROM Command
  • 2 发出功能命令: Function Command a转换温度 b读温度,读数据

每次操作,都要重重上述过程

内部框图

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(2)

TEMPERATURE SENSOR温度ADC

SCRATCHPAD实际上是一个9 byte的内存 9byte的说明如下图所示

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(3)

温度值会保存在9byte内存中的 BYTE0 和 BYTE1 也就是当我们发出一个温度值的命令之后,还需要发送一个读内存的命令才能把温度值读取出来

最后一位是CRC校验码,通过前8位的数据和最后一位的校验码比较 64位数据中有8位是校验码,

怎么采样温度?

  • 1 初始化
  • 2 ROM命令
  • 3 FunctionCommand 设置某些值,比如转换温度
  • 4等待完成
  • 5 init
  • 6 R om cmd
  • 7 Function Command 读RAM中的值

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(4)

关于EEPROM寄存器 前面两个字节可以用来设置用户自己的目的,也可以用来设置Th Tl 寄存器 Th Tl 寄存器就是用来设置警报,温度的上限或者下限,当温度超过某个值时它会发出警报 所谓警报只不过是在DS18B20中设置状态而已,并不能主动通知主芯片 主芯片可以发出某些命令来确定哪些芯片发出了警报 配置寄存器,用于设置精度,精度越高转换时间越长

EEPROM使用

  • 1 上电

EEPROM自动放入RAM用于控制精度这些

  • 2 写EEPROM

a 发出命令先写RAM

b从RAM转到EEPROM

  • 3 读出EEPROM的值

a EEPROM值保存到RAM

b 发出命令读RAM

关于ROM命令和功能命令整理成一个表格

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(5)

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(6)

信号传输

  • 1怎么initialization(初始化)
  • 2 怎么发数据,怎么发出1bit

怎么发出bit0

怎么发出bit1

  • 3怎么读数据==>怎么读1bit

怎么判读读到0

怎么判断读到1

初始化时序

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(7)

一开始是高电平,想要开始传输信号,必须要拉低至少480us释放总线 经过15~60us之后 DS18B20会把这条线拉低60~240us

2 怎么发数据,怎么发出1bit

  • 怎么发出bit0
  • 怎么发出bit1

写数据时序

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(8)

不论是写0还是写1时序都是大于60us 写0拉低总线维持60us以上 写1时,信号线拉低1us时间,提醒要写数据了,然后回高,写1位之间的时间间隔1us

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(9)

读数据时序 也是由主机发起 提醒脉冲大于1us,主机马上释放总线 在15us之内读信号,一个读周期至少是60us,每位的间隔也是1us

DS18B20提供了编程图

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(10)

供电方式

ds18b20温度传感器内部电路(DS18B20温度传感器介绍)(11)

「新品首发」STM32MP157开发板火爆预售!首批仅300套

,