单总线温度传感器DB18B20

单总线温度传感器DB18B20的原理

单总线温度传感器 DS18B20 是一种数字式温度传感器,具有较高的精度和稳定性。它采用的是 Dallas Semiconductor 公司独特的单总线通信协议,使得在系统中只需使用一个 I/O 引脚就能同时实现数据传输和供电。以下是 DS18B20 的工作原理:
温度感知:DS18B20 内部集成了温度传感器,其工作原理基于温度对半导体器件的影响。当温度变化时,半导体器件的电特性也会相应地改变,从而可以通过测量这些电特性的变化来确定温度的变化。
数字转换:DS18B20 内部有一个模数转换器(ADC),用于将温度传感器输出的模拟信号转换成数字信号。这个数字信号代表了当前测量到的温度值。
单总线通信:DS18B20 使用单总线通信协议与主控制器通信。这意味着它只需要一个数据线来进行通信。通信过程中,DS18B20 可以被主控制器发出的命令唤醒,并回应主控制器的请求,将温度数据发送给主控制器。
供电:DS18B20 在通信时也通过单总线从主控制器获取供电。这使得它在安装和布线时更加方便,因为只需一根线就可以同时传输数据和供电。
总的来说,DS18B20 的工作原理就是通过内部温度传感器感知温度变化,然后通过内部的数字转换器将模拟信号转换成数字信号,最后通过单总线通信协议将温度数据传输给主控制器。

运用

利用DS18B20和LED数码管实现单总线温度测量系统。原理电路见下图:
在这里插入图片描述

Keil代码如下:

#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++)			//连续扫描数码管10次
	 	{
	 		out=(temp/10)&0x0f;
	 		smg1=0;
	 		smg2=1;
	 		delay5(1000);			//延时5ms
	 		out=(temp%10)&0x0f;
	 		smg1=1;
	 		smg2=0;
	 		delay5(1000);			//延时5ms
	 	}
	}
}
void delay5(uchar n)			//函数功能:延时5µs	
{
	 do
	 {
	 	_nop_();
	 	_nop_();
	 	_nop_();
	 	n--;
	 }
	 while(n);
}

void init_ds18b20(void)		//函数功能:18B20初始化
{
	 uchar x=0; 
	 DQ =0;    
	 delay5(120); 
	 DQ =1;    
	 delay5(16);
	 delay5(80);
}
uchar readbyte(void) 			//函数功能:读取1字节数据
{
	uchar i=0;
	uchar date=0;
	for (i=8;i>0;i--)
	{
		  DQ =0;
		  delay5(1);
		  DQ =1;			//15µs内拉释放总线
		  date>>=1;
		  if(DQ)
		  date|=0x80;
		  delay5(11);
	 }
 	return(date);
}
void writebyte(uchar dat) 			//函数功能:写1字节
{
 uchar i=0;
 for(i=8;i>0;i--)
 {
	  DQ =0;
	  DQ =dat&0x01;				//写"1" 在15µs内拉低
	  delay5(12);	   			//写"0" 拉低60µs
	  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);
}

小结:DS18B20 是一种简单易用、精度高的数字温度传感器,适用于各种温度测量场景,但本人对DB18B20时序方面还没有完全理解。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
总线是一种串行通信协议,它只需要一条数据线即可实现通信,这种协议非常适合与温度传感器等低速设备进行通信。 DS18B20温度传感器是一种具有数字温度传感器,它采用总线接口,可以直接与STM32F103C8T6片机进行通信。 下面是STM32F103C8T6总线与DS18B20温度传感器通讯的基本原理: 1. 初始化 在通信开始前,需要先初始化DS18B20温度传感器,初始化的具体步骤如下: a. 将总线拉低,保持至少480us以上,用于复位DS18B20。 b. 将总线拉高,等待15-60us,用于DS18B20发出存在脉冲。 c. 读取总线电平,判断DS18B20是否存在,如果存在,则通讯可以开始。 2. 发送指令 在DS18B20与STM32F103C8T6片机建立通信后,STM32F103C8T6片机需要向DS18B20发送指令,以获取温度数据。 发送指令的具体步骤如下: a. 将总线拉低,保持至少1us。 b. 发送指令字节,指令字节由3位地址码和5位功能码组成。 c. 等待DS18B20的响应,DS18B20会发送一个存在脉冲,然后发送应答信号。 3. 读取温度数据 在DS18B20接收到指令并响应后,STM32F103C8T6片机就可以读取温度数据了。 读取温度数据的具体步骤如下: a. 将总线拉低,保持至少1us。 b. 发送读取温度指令字节。 c. DS18B20发送温度数据,STM32F103C8T6片机接收并处理温度数据。 以上是STM32F103C8T6总线与DS18B20温度传感器通讯的基本原理。在实际应用中,还需要根据具体的需求进行相应的配置和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值