DS18B20是Dallas公司生产的数字温度传感器,具有体积小、适用电压宽、经济灵活的特点。它内部使用了onboard专利技术,全部传感元件及转换电路集成在一个形如三极管的集成电路内。DS18B20有电源线、地线及数据线3根引脚线,工作电压范围为3~5。5V,支持单总线接口。
一、DS18B20的内外结构
DS18B20的外部结构如图1所示。其中,VDD为电源输入端,DQ为数字信号输入/输出端,GND为电源地。

DS18B20内部结构主要包括4部分:64位光刻ROM、温度传感器、非易失的温度报警触发器TH和TL、配置寄存器,如图2所示。

64位ROM中,在产品出厂前就被厂家通过光刻刻录好了64位序列号。该序列号可以看作是DS18B20的地址序列码,用来区分每一个DS18B20,从而更好地实现对现场温度的多点测量。图2中的暂存器是DS18B20中最重要的寄存器。暂存器由9个字节组成,各字节定义如表1所列。
表1暂存器字节分配表
字节 |
定义 |
0 |
所测温度值低8位 |
1 |
所测温度值高8位 |
2 |
高温报警值(TH) |
3 |
低温报警值(TL) |
4 |
配置寄存器 |
5~7 |
保留 |
8 |
循环冗余校验(CRC)值 |
配置寄存器用于用户设置温度传感器的转换精度,其各位定义如下:
TM |
R2 |
R0 |
1 |
1 |
1 |
1 |
1 |
TM位是测试模式位,用于设置DS18B20是工作模式(0)还是测试模式(1),其出厂值为0。R1、R0用于设置温度传感器的转换精度:00,分辨率为9位,转换时间为93。75ms;01,分辨率为10位,转换时间为187。5ms;10,分辨率为11位,转换时间为375ms;11,分辨为12位,转换时间为750ms。R1、R0的出厂值为11。其余5位值始终为1。
第0和第1字节为16位转换后的温度二进制值,其中前4位为符号位,其余12位为转换后的数据位(分辨率为12位)。如果温度大于0,则前4位值为0,只要将测到的数值乘上0。0625即可得到实际温度值;如果温度小于0,则前4位为1,需将测得的数值取反加1后,再乘上0。0625。第0和第1字节各位的二进制值如下:
LSB(0) |
23 |
22 |
21 |
20 |
2-1 |
2-2 |
2-3 |
2-4 |
HSB(1) |
S |
S |
S |
S |
27 |
26 |
25 |
24 |
二、DS18B20的应用电路结构
按DS18B20的供电方式,其应用电路结构可分为如下3种:寄生电源供电方式;寄生电源强上拉供电方式;外部电源供电方式。实际应用中,以外部电源供电方式为主。其应用原理图如图3所示。
图片
三、DS18B20的工作原理
根据DS18B20的通信协议,MCU对其操作主要有如下3个步骤:读写之前,对DS18B20发送约500μs的低电平进行复位;复位成功,发送ROM指令;发送RAM指令。MCU对DS18B20的具体操作流程如图4所示。
图片
四、基于Linux的DS18B20驱动程序实现
选取mini2440开发板为硬件平台(主芯片为Samsung公司的S3C2440),选取Linux的最新内核Linux2。6。29为软件平台。通过mini2440的扩展接口引出GPIO口(GPBl)为数据线DQ。DS18B20为单总线器件,因此对其操作的时序比较严格。DS18B20驱动最终能否得以正常运行,获得实时温度值,关键在于初始化时序、写时序和读时序。
1、初始化时序
DS18B20的所有通信都是以由复位脉冲组成的初始化序列开始的。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲。DS18B20发出存在脉冲,以通知主机它在总线上并且准备好操作了。在初始化时序中,总线上的主机通过拉低单总线至少480μs来发送复位脉冲。然后总线主机释放总线并进入接收模式。总线释放后,4。7kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测到上升沿后等待15到60us,然后以拉低总线60-240us的方式发出存在脉冲。
如上所述,主机将总线拉低最短480us,之后释放总线。由4。7kΩ上拉电阻将总线恢复到高电平。DS18B20检测到上升沿后等待15到60us,发出存在脉冲:拉低总线60-240us。至此,初始化和存在时序完毕。
2、写时序
主机在写时隙向DS18B20写入数据,在读时隙从DS18B20读取数据。在单总线上每个时隙只传送一位数据。有两种写时隙:写“0”时间隙和写“1”时间隙。总线主机使用写“1”时间隙向DS18B20写入逻辑1,使用写“0”时间隙向DS18B20写入逻辑0。所有的写时隙必须有最少60us的持续时间,相邻两个写时隙必须要有最少1us的恢复时间。两种写时隙都通过主机拉低总线产生。
为了产生写1时隙,在拉低总线后主机必须在15μs内释放总线。在总线被释放后,由于4。7kΩ上拉电阻将总线恢复为高电平。为了产生写0时隙,在拉低总线后主机必须继续拉低总线以满足时隙持续时间的要求(至少60μs)。在主机产生写时隙后,DS18B20会在其后的15到60us的一个时间窗口内采样单总线。在采样的时间窗口内,如果总线为高电平,主机会向DS18B20写入1;如果总线为低电平,主机会向DS18B20写入0。
如上所述,所有的写时隙必须至少有60us的持续时间。相邻两个写时隙必须要有最少1us的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。
3、读时序
DS18B20只有在主机发出读时隙后才会向主机发送数据。因此,在发出读暂存器命令[BEh]或读电源命令[B4h]后,主机必须立即产生读时隙以便DS18B20提供所需数据。另外,主机可在发出温度转换命令T[44h]或Recall命令E2[B8h]后产生读时隙,以便了解操作的状态。
所有的读时隙必须至少有60us的持续时间。相邻两个读时隙必须要有最少1us的恢复时间。所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。在主机产生读时隙后,DS18B20开始发送0或1到总线上。DS18B20让总线保持高电平的方式发送1,以拉低总线的方式表示发送0。当发送0的时候,DS18B20在读时隙的末期将会释放总线,总线将会被上拉电阻拉回高电平(也是总线空闲的状态)。
DS18B20输出的数据在下降沿(下降沿产生读时隙)产生后15us后有效。因此,主机释放总线和采样总线等动作要在15μs内完成。
4、温度转换和读温度时序
温度转换时序:Start→复位DS18B20→Writer 0xcc to DS18B20→Writer 0x44 to DS18B20→End
读温度时序:Start→复位DS18B20→Writer 0xcc to DS18B20→Writer 0x44 to DS18B20→读取温度值→End