FPGA学习笔记——DS18B20(数字温度传感器)
目录
一、DS18B20简介
二、DS18B20特点
三、DS18B20内部结构
(1)64位光刻ROM编码
(2)高速缓存器
四、温度测量
五、配置寄存器
六、DS18B20实现温度转换
(1)ROM命令
(2)功能命令(RAM命令)
七、初始化时序
八、写时序
九、读时序
一、DS18B20简介
DS18B20是DALLAS半导体公司生产的单总线数字温度传感器,其输出的是数字信号,具有体积小,功耗低,抗干扰能力强,精度高的特点。
GND:地
DQ:数据输入/输出
Vdd:供电电压
NC:无连接
二、DS18B20特点
(1)采用单总线接口方式
(2)测温范围宽、测量精度高
(3)无需外围元件
(4)支持多点组网功能,可实现多点测温
(5)可进行温度报警设置
(6)供电方式灵活
(7)测量分辨率可调节,采集精度转换时间短
(8)负压特性
(9)掉电保护功能
三、DS18B20内部结构
(1)64位光刻ROM编码
每个DS18B20的片内ROM都存有一个独一无二的64位编码。
在该ROM编码的低8位保存有DS18B20的分类编码:28h;中间的48位是独一无二的序列号;最高8位是前面56的CRC循环冗余校验码。
因为每个DS18B20的序列号都不一样,所以一条总线上可以控制多个DS18B20。
(2)高速缓存器
9个byte组成(1byte=8bit)的高速缓存器。
byte0、byte1用来存储温度测量值;(低位先发)
byte2:超过设置的温度就报警
byte3:小于或等于设置的温度就报警
byte4:用来配置分辨率
byte5、byte6、byte7:保留
byte8:CRC校验
四、温度测量
DS18B20中的温度传感器可完成对温度的测量,它的温度转换精度用户可以自定义为9、10、11、12位,(如果没有进行位宽的设置,默认为12位)精度分别为0.5°C、0.25°C、0.125°C、0.0625°C分辨率。
符号标志位(S)表示温度的正负极性:若S=0,则为正数,若S=1,则为负数。
温度测量值以二进制补码的形式存储在寄存器中。
在进行温度计算的时候要将补码传化成原码:
如果温度测量值是正数,原码和补码是一样的。
如果温度测量值是负数,原码有两种计算方式:
1.除符号位以外,减一再取反;
2.除符号位以外,取反再加一。
温度值如何计算?
如果温度测量值是正数:
将输出的二进制除符号位以外,转换成十进制,然后乘以精度(分辨率)(这里是12位,所以精度是0.0625),以+125°C为例:
二进制转成十进制:111 1101 0000--------> 2000
乘以精度(分辨率):2000x0.0625=125
如果温度测量值是负数:
将输出的二进制除符号位以外,先转成原码,然后转成十进制,最后乘以精度(分辨率)这里是12位,所以精度是0.0625),以-25.0625°C为例:
补码转原码:110 0110 1111 ----->001 1001 0001
二进制转十进制:001 1001 0001 ------>401
乘以精度(分辨率):401x0.0625=25.0625
五、配置寄存器
高速缓存器中第五个字节即为配置寄存器,用户通过改变R1和R0的值来配置DS18B20的分辨率。
如果配置成11位:那么温度低8位中的最低为无效,精度也就变成了0.125。
六、DS18B20实现温度转换
主机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行初始化操作,
初始化成功后发送一条ROM命令,
最后发送功能命令(RAM命令),
这样才能对DS18B20极性预定的操作。
1.初始化
单总线上的所有操作必须以初始化为开始。初始化序列由总线上的主设备发出的复位脉冲以及紧跟着从设备回应的存在脉冲构成。该存在脉冲式让总线主设备知道DS18B20在总线上并准备好运行。
2.ROM命令
搜索ROM[F0h]、读ROM[33h]、匹配ROM[55h]、跳过ROM[CCh]、警报搜索ROM[ECh]。
3.功能命令(RAM命令)
温度转换[44h]、写入暂存器[4Eh]、读取高速缓存器[BEh]、复制高速缓存器[48h]、召回EEPROM[B8h]、读供电模式[B4h]。
(1)ROM命令
搜索ROM[F0h]:主设备通过排除法获取ROM编码,该过程需要执行多次搜索ROM周期,直到所有设备都被识别。
适用于:多点
读ROM[33h]:允许总线主控设备直接读取从设备的ROM编码。
适用于:单点
匹配ROM[55h]:通过发送匹配ROM后跟着ROM编码,总线主控器可以在单点或多点总线上寻址特定的设备,只有完全匹配该ROM编码的从设备,才会响应主控器发出的功能指令,其它从设备等待复位脉冲触发。
适用于:单点或多点
跳过ROM[CCh]:主设备同时寻址总线上的所有从设备,而无需发送ROM编码。
适用于:单点或多点
警报搜索ROM[ECh]: 仅对设置了报警标志的从设备进行响应。
适用于:单点或多点
(2)功能命令(RAM命令)
简单的温度读取过程:
七、初始化时序
DS18B20所有的通信都是由初始化开始的,初始化由主设备发出的复位脉冲以及从设备响应的存在脉冲组成。
主设备看:首先主设备发出480us---960us的低电平脉冲,然后,释放,总线变成高电平(上拉电阻造成的),随后,主设备在480us---960us对总线进行检测,如果在检测时间内有低电平出现,就表示总线上有器件响应,反之,则没有。
从设备看:首先,检测总线上是否出现480us---960us的低电平,如果有,总线变成高电平后,DS18B20等待15us---60us,然后,总线被拉低,低电平保持60us---240us,表示从设备做出响应存在脉冲。如果没有检测到低电平就一直等待。
八、写时序
主设备通过写时序将命令写入DS18B20中,写时序有两种情况:写“1”和写“0”时序。
当主设备将总线从高电平拉低,启动写时序,所有的写时序最少为60us,
每个写时序的回复时间最少为1us,
写“0”时序:主设备将总线拉低,然后保持低电平,低电平保持时间最少为60us,当总线被拉低之后,从设备在15us---60us进行采样。
写“1”时序:主设备将总线拉低,然后释放总线,允许总线在写时序15us内拉至高电平,当总线被拉低之后,从设备在15us---60us进行采样。
九、读时序
发送完读取共带你模式[B4h]或读高速缓存器[BEh]命令时,必须及时的生成读时序,只有在读时隙从设备才能向主设备传送数据。
每个读时序最少持续60us,读时序的间隔至少为1us。
读“0”时序:主设备将总线拉低,表示启动读时序,总线由从设备控制,从设备将总线拉低,表示DS18B20向主设备发送“0”。读时序完成以后,总线拉高表示空闲状态。
读“1”时序:主设备将总线拉低,表示启动读时序,总线由从设备控制,从设备将总线拉高,表示DS18B20向主设备发送“1”。读时序完成以后,总线拉高表示空闲状态。
从设备输出的数据在启动读时序之后的15us内有效,主设备必须在启动读时序后15us内释放总线,然后对总线进行采样,采到高电平表示“1”,采到低电平表示“0”.
以上就是DS18B20的一些简要介绍。(如果有不对的地方,还请指出来,谢谢!)