【51单片机】DS18B20(江科大)

一、DS18B20温度传感器

1.DS18B20介绍

· DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点

· 测温范围 :- 55℃到+125℃

· 通信接口:1-Wire(单总线)

· 其它特征:可形成总线结构、内置温度报警功能、可寄生供电

2.引脚及应用电路

本开发板原理图如图:

本开发板的IO口已经外接了一个电阻了(与AT24C02类似),所以这个就没有再单独接一个电阻

3.内部结构框图


parasite power circuit :是寄生电路部分,也就是说DS18B20可以不用通过VDD来进行供电,通过DQ口接电源也可以进行供电。DQ为高电平时,会对电容CPP进行充电,DQ为低电平时,电容会进行供电。
64-BIT ROM :作为器件地址,用于总线通信的寻址
MEMORY CONTROL LOGIC : 存储控制逻辑,用于控制数据的传输
SCRATCHPAD(暂存器) :用于总线的数据交互(RAM)
TEMPERATURE SENSOR :模拟温度传感器
ALARM HIGH TRIGGER REGISTER :报警高位触发寄存器,存储温度上限阈值
ALARM LOW TRIGGER REGISTER : 报警低位触发寄存器,存储温度下限阈值
CONFIGURATION REGISTER :配置寄存器,用于设置分辨率(精度)
EEPROM : 用于保存温度触发阈值和配置参数
8-BIT CRC GENERATOR: 8位CRC生成器(CRC,循环冗余码,一种校验码)

存储器结构 :

Byte0和Byte1分别存储温度的低位和高位,默认为85

不能直接读写EEPROM,需要先将数据写入存储器,然后通过通信,将数据在写入EEPROM,读出数据同理

Byte5、Byte6和Byte7为保留字段

4.单总线介绍

·单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线

·一根通信线:DQ

·异步、半双工

·单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线

单总线电路规范

·设备的DQ均要配置成开漏输出模式(类似于IIC)

·DQ添加一个上拉电阻,阻值一般为4.7KΩ左右(类似于IIC)

·若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路(像读EEPROM等耗电操作仅仅靠弱上拉是不行的)

单总线时序结构
·初始化 :主机将总线拉低至少480us,然后释放总线,等待15 ~ 60us后,存在的从机会拉低总线60 ~ 240us以响应主机,之后从机将释放总线(实际写程序中,一般取中间值)

·发送一位 :主机将总线拉低60 ~ 120us,然后释放总线,表示发送0;主机将总线拉低1 ~ 15us,然后释放总线,表示发送1。从机将在总

线拉低30us后(典型值)读取电平,整个时间片应大于60us

也就是说,在30us这个时间点,读取总线的电平状态,如果是高电平,则表示发送1,如果是低电平,则表示发送0

· 接收一位 :主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us


DS18B20操作流程

·初始化:从机复位,主机判断从机是否响应

·ROM操作:ROM指令+本指令需要的读写操作

·功能操作:功能指令+本指令需要的读写操作

ROM操作就是访问64位ROM,功能操作就是访问暂存器

本实验使用SKIP ROM,因为本开发板从机只有一个DS18B20,不需要ROM来进行寻址

DS18B20数据帧

· 温度变换:初始化→跳过ROM→开始温度变换

· 温度读取:初始化→跳过ROM→读暂存器→连续的读操作

温度存储格式

其中S是符号位,温度为负,则BIT11-15全为1,温度为正,则BIT11-15全为0

BITO-10为温度数据(补码),举例如下:

相关推荐
mftang20 分钟前
Zephyr OS Nordic芯片的Flash 操作
单片机·嵌入式硬件·物联网
阿川!2 小时前
嵌入式软件--stm32 DAY 6 USART串口通讯(下)
stm32·单片机·嵌入式硬件
越城2 小时前
深入理解二叉树:遍历、存储与算法实现
c语言·数据结构·算法
双叶8364 小时前
(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)
c语言·开发语言·数据结构·c++·windows
序属秋秋秋4 小时前
《数据结构初阶》【二叉树 精选9道OJ练习】
c语言·数据结构·c++·算法·leetcode
欧先生^_^5 小时前
rust语言,与c,go语言一样也是编译成二进制文件吗?
c语言·golang·rust
再睡一夏就好6 小时前
从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
linux·服务器·c语言·开发语言·学习笔记
C_Liu_10 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder10 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
WKJay_11 小时前
深入理解 Cortex-M3 特殊寄存器
stm32·单片机·嵌入式硬件