单片坤——单总线温度传感器DB18B20的原理和通信时序

一、单总线串行扩展

       单总线(也称1-Wirebus)由美国DALLAS公司推出的外围串行扩展总线。只有一条数据输入/输出线DQ,总线上所有器件都挂在DQ上,电源也通过这条信号线供给。
       单总线系统中配置的各种器件,由DALLAS公司提供的专用芯片实现。每个芯片都有64位ROM,厂家对每一芯片都用激光烧写编码,其中存有16位十进制编码序列号,它是器件的地址偏号,确保它挂在总线上后,可以唯一被确定。除了器件的地址编码外,芯片内还包含收发控制和电源存储电路,见图11-1。这些芯片耗电量都很小(空闲时几μW.工作时几mW),工作时从总线上馈送电能到大电容中就可以工作,故一般不需另加电源。

二、单总线扩展的典型应用——DS18B20的温度测量系统

1、单总线温度传感器DS18B20简介

       DS18520是美国DALLAS公司生产的数字温度传感器,体积小、低功耗、抗干扰能力强。可直接将温度转化成数字信号传送给单片机处理,因而可省去传统的信号放大、A/D转换等外围电路。
       如下图所示为单片机与多个带有单总线接口的DS18520组成的分布式温度测量系统,图中多个DS18B20都挂接在单片机的1根I/O口线(即DQ线)上。单片机对每个DS18B20都通过总线以寻址。DQ为漏极开路,须加上拉电阻。DS18520的一种封装形式如下图所示。

       片内有9个字节的高速暂存器RAM单元,9个字节具体分布如下:

        第1字节和第2字节是在单片机发给DS18B20温度转换命令发布后,经转换所得的温度值,以两字节补码形式存放其中。一般情况下,用户多使用第1字节和第2字节。单片机通过单总线可读得该数据,读取时低位在前,高位在后。
       第3、4字节分别是由软件写入用户报警的上下限值TH和TL。
       第5个字节为配置寄存器,可对其更改DS18B20的测温分辨率,高速暂存器的第6、7、8字节未用,为全1。第9字节是前面所有8个字节的CRC码.用来保证正确通信。片内还有1个E2PROM为TH、TL以及配置寄存器的映像。

下面介绍温度转换的计算方法:
       (1)当DS18B20采集的温度为+125℃时,输出为0x07d0,则:
         实际温度=(0x07dO)/16=(0x163+7x162+13x161+0×160)/16=125℃
       (2)当DS18520采集的温度为-55℃时,输出为0xfc90,由于是补码,则先将11位数据取反加1得0x0370,注意符号位不变,也不参加运算,则:
         实际温度=(0x0370)/16=(0x163+3x162+7x161+0x160)/16=55℃

注意,负号则需对采集的温度进行判断后,再予以显示。

2、温度采集实验

要求:使用DS18B20温度传感器采集当前环境温度、数码管显示检测的温度值,以此达到检测环境温度的要求。

实验仿真原理图:
 

参考代码:

#include "reg51.h"
#include "intrins.h"
#include "seg.h"
#define uchar unsigned char
#define uint unsigned int 
#define out P0
sbit smg1=out^4;
sbit smg2=out^5;
sbit DQ=P3^7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);

void main(void)
{
	uchar i,temp;
	delay5(1000);
	while(1)
	{
	 temp=retemp();	
	 for(i=0;i<10;i++)	
	 {
	 out=(temp/10)&0x0f;
	 smg1=0;
	 smg2=1;
	 delay5(1000);	
	 out=(temp%10)&0x0f;
	 smg1=1;
	 smg2=0;
	 delay5(1000);	
	 }
	}

}

void delay5(uchar n)
{
	 do
	 {
	 _nop_();
	 _nop_();
	 _nop_();
	 n--;
	 }
	 while(n);
}

void init_ds18b20(void)
{
	 uchar x=0; 
	 DQ =0;    
	 delay5(120); 
	 DQ =1;    
	 delay5(16);
	 delay5(80);
}

uchar readbyte(void)
{
	uchar i=0;
	uchar date=0;
	for (i=8;i>0;i--)
	 {
		  DQ =0;
		  delay5(1);
		  DQ =1;	
		  date>>=1;
		  if(DQ)
		  date|=0x80;
		  delay5(11);
	 }
 	return(date);
}

void writebyte(uchar dat)
{
		uchar i=0;
		for(i=8;i>0;i--)
		{
			DQ =0;
			DQ =dat&0x01;
			delay5(12);	   
			DQ = 1;	   
			dat>>=1;
			delay5(5);
	  }
}

uchar retemp(void)
{
	uchar a,b,tt;
	uint t;
	init_ds18b20();
	writebyte(0xCC); 
	writebyte(0x44);
	init_ds18b20();
	writebyte(0xCC); 
	writebyte(0xBE); 
	a=readbyte();
	b=readbyte();
	t=b;
	t<<=8;
	t=t|a;
	tt=t*0.0625;
	return(tt);
}

仿真结果:

实物运行:

Keil波形分析:

三、DS18B20通信时序

1、初始化序列

       DS18B20的所有通信都由由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它在总线上并且准备好操作了。 

 在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收模式。

        当总线释放后,5kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测到上升沿后等待15到60us,然后以拉低总线60-240us的方式发出存在脉冲。

2、写时序

读写时隙

主机在写时隙向DS18B20写入数据,并在读时隙从DS18B20读入数据。在单总线上每个时隙只传送一位数据。

 写时间隙
        有两种写时隙:写“0”时间隙和写“1”时间隙。总线主机使用写“1”时间隙向DS18B20写入逻辑1,使用写“0”时间隙向DS18B20写入逻辑0。

  所有的写时隙必须至少有60us的持续时间。相邻两个写时隙必须要有最少1us的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。

        为产生写1时隙,在拉低总线后主机必须在15us内释放总线(拉低的电平要持续至少1us)。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。

        为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持续时间60-120us)。

         写时隙产生后,DS18B20会在产生后的15到60us的时间内采样总线,以此来确定写0还是写1。

3、读时序

读时序

  DS18B20只有在主机发出读时隙后才会向主机发送数据。因此,在发出读暂存器命令 [BEh]或读电源命令[B4h]后,主机必须立即产生读时隙以便DS18B20提供所需数据。另外,主机可在发出温度转换命令T [44h]或Recall命令E 2[B8h]后产生读时隙,以便了解操作的状态(在 DS18B20操作指令这一节会详细解释)。

读时间隙

  所有的读时隙必须至少有60us的持续时间。相邻两个读时隙必须要有最少1us的恢复时间。所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。在主机产生读时隙后,DS18B20开始发送0或1到总线上。DS18B20让总线保持高电平的方式发送1,以拉低总线的方式表示发送0.当发送0的时候,DS18B20在读时隙的末期将会释放总线,总线将会被上拉电阻拉回高电平(也是总线空闲的状态)。DS18B20输出的数据在下降沿(下降沿产生读时隙)产生后15us后有效。因此,主机释放总线和采样总线等动作要在15μs内完成。

4、改变时序观察变化

       当我们修改延时函数,将时序弄错后再行重复实验仿真,得到的温度是不准确的,不会再返回正确的温度,仿真效果如下:

总结:

       在学习温度传感器中,时序是非常重要的概念,理解它尤为重要。在之后的实操中,想让传感器工作首先就得写时序,所以还需要更加深入的学习。但由于本人认知浅薄,上述内容或有诸多不详错漏之处,望各位海涵并指出批正。
 

DS18B20温度传感器是一种数字温度传感器,采用单总线(1-Wire)通信协议进行数据传输。它具有以下特点工作原理: 1. 单总线通信: DS18B20使用单总线通信协议,只需使用一个引脚进行数据传输,简化了硬件设计。 2. 采用ROM操作指令: DS18B20具有唯一的64位ROM代码,可以通过ROM操作指令来访问操作传感器。 3. 温度数据格式转换: DS18B20可以将温度值转换为12位的二进制数,采用2的补码表示,其中高4位为整数部分,低8位为小数部分。 4. 时序图: DS18B20通信过程有严格的时序要求,包括主机的写入操作从机的应答操作。通过正确的时序信号,可以实现温度的读取转换。 5. 功能性指令: DS18B20还提供了一些功能性指令,如设置温度阈值报警功能。当温度超过设定的阈值时,传感器会发出报警信号。 综上所述,DS18B20温度传感器通过单总线通信协议,采用ROM操作指令时序图来实现温度数据的读取转换。它是一种方便、精确且稳定的温度测量设备。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [8、单总线DB18B20实现温度的测量](https://blog.csdn.net/weixin_44751294/article/details/111572558)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [数字温度计--DB18B20获取温度+lcd1602显示+串口输出](https://download.csdn.net/download/weixin_44751294/13763361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值