单总线温度采集

一、DS18B20芯片

1、简介

DS18B20是一种数字温度传感器芯片,由美国芯片制造商Maxim Integrated公司生产。它可以通过单一的数字引脚进行通信,具有高精度的温度测量能力(精度可达±0.5°C),并且具有独特的64位ROM编程地址,可以在多个传感器之间进行区分。DS18B20芯片被广泛应用于温度监测和控制领域,例如智能家居、工业自动化、医疗设备等。

2、特点

DS18B20芯片的主要特点包括:

  1. 高精度:温度测量精度可达±0.5°C。

  2. 数字接口:通过单一的数字引脚进行通信,简化了接线和控制过程。

  3. 独特的64位ROM编程地址:可以在多个传感器之间进行区分,方便多传感器系统的应用。

  4. 无需外部元件:DS18B20芯片内部集成了温度传感器、模数转换器和序列通信引擎,无需外部元件即可实现温度测量。

  5. 低功耗:在温度测量过程中功耗很低,适合电池供电的应用。

  6. 多种封装形式:DS18B20芯片有TO-92、TO-92S、TO-92L、SOT-23等多种封装形式,适用于不同的应用场景。

  7. 可编程分辨率:可以通过软件设置不同的温度分辨率,从9位到12位不等,以满足不同应用的精度要求。

总体来说,DS18B20芯片具有精度高、易于使用、低功耗等特点,被广泛应用于各种温度监测和控制系统中。

4

DS18B20芯片有三个引脚,它们的功能如下:

  1. VDD引脚(Pin 1):这是芯片的电源引脚,通常连接到3.0V至5.5V的电源供应。VDD引脚提供芯片所需的电源。

  2. DQ引脚(Pin 2):这是数据引脚,也称为1-Wire总线。通过这个引脚可以与芯片进行通信,包括读取温度数据、发送命令等。DQ引脚是双向通信引脚,需要外部上拉电阻。

  3. GND引脚(Pin 3):这是地引脚,连接到系统的地线,提供芯片的地连接。

通过这三个引脚,DS18B20芯片可以实现与微控制器或其他设备的通信,从而进行温度测量和控制。

4、DS18B20的时序

DS18B20芯片的通信是通过1-Wire总线进行的,其时序如下:

  1. 初始化:主机发送复位脉冲(reset pulse)来开始通信。复位脉冲持续至少480微秒,然后释放总线。

  2. DS18B20响应:DS18B20芯片在接收到复位脉冲后会发出存在脉冲(presence pulse),持续15-60微秒,表示芯片已准备好进行通信。

  3. 主机发送命令:主机向DS18B20发送指令,包括温度转换命令、读取温度命令等。每个命令的时序和数据格式都是固定的。

  4. DS18B20执行命令:DS18B20芯片在接收到命令后会执行相应的操作,比如进行温度转换。

  5. 读取数据:主机发送读取温度数据的命令,DS18B20芯片会将温度数据发送给主机。数据的格式是16位的二进制补码,主机需要将其转换为温度值。

  6. 结束通信:通信结束后,主机可以发送复位脉冲来结束通信过程。

以上是DS18B20芯片通信的基本时序,具体的时序和命令格式可以查阅DS18B20的数据手册以获取更详细的信息。

二、单总线温度测量实验

1、实验原理

DS18B20是一种数字温度传感器,采用单总线通信协议进行数据传输。其工作原理如下:

  1. 初始化:系统通过发送初始化信号来启动温度传感器。初始化信号包括一个低电平信号持续480微秒,然后释放总线并等待传感器的响应。

  2. 传感器响应:传感器接收到初始化信号后,会发送一个存在脉冲作为响应。存在脉冲的持续时间为60-240微秒,然后传感器开始发送其ROM代码。

  3. 发送ROM代码:传感器会发送其唯一的64位ROM代码,用于标识传感器的地址。系统可以通过这个ROM代码来识别和区分多个传感器。

  4. 发送指令:系统发送指令给传感器,以请求温度数据或进行其他操作。常用的指令包括温度转换指令、读取温度指令等。

  5. 温度转换:传感器接收到温度转换指令后,会进行温度测量并将结果存储在内部寄存器中。转换时间取决于传感器的分辨率设置,通常为750ms。

  6. 读取温度数据:系统发送读取温度指令给传感器,传感器会将存储的温度数据发送给系统。温度数据以16位二进制补码形式发送,系统可以将其转换为摄氏度或华氏度表示。

通过以上步骤,系统可以实现对DS18B20传感器的温度采集。由于采用单总线通信协议,多个传感器可以通过共享同一根总线进行数据传输,实现多个传感器的温度采集。

2、Proteus仿真图

3、C语言代码

#include "reg51.h"
#include "intrins.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);
}

4、Proteus仿真效果图

5、波形图

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值