DS18B20数字温度计学习

DS18B20简介

特点:

1.电压范围宽,为3——5.5V;

2.单线接口方式,DS18B20与微处理器连接仅需要一条口线即可实现双向通信;

3.支持多点组网功能,多个DS18B20可以并联在唯一的三线上;

4.使用中无需外围原件,全部传感器及转换电路集成在形如一只三极管的集成电路里;

5.温度测量范围为-55~+125℃,在-10~+85℃时精度为±0.5℃;

6.可编程的分辨率为9~12位,分别对应0.5,0.25,0.125,0.0625℃;

7.在9位分辨率时最多93.75ms把温度转化成数字,在12位时最多在750ms把温度转化成数字;

8.测量结果直接输出数字温度信号,以一根总线串行传送给CPU,同时可传送CRC校验码,抗干扰能力强;

9.负压特性:电源极性接反时,芯片不会因为发热而烧毁,但不能正常工作。

结构:

1.64位光刻只读存储器,包含8位系列码,48位序列号,8位CRC,光刻CRC使每个DS18B20各不相同,可以实现一根总线上挂接多个DS18B20。

2.温度的转换规则:BS18B20的核心功能是可以直接读出数字的温度数值,其精度是用户可编程的。在上电状态下默认的精度为12位。如果温度为正,高字节的前五位为0,如果温度为负,高字节的前五位为1,实际温度需要取反码计算。

DS18B20启动后保持低功耗等待状态,当总线控制器发出44H的命令后,执行温度测量和AD转换的操作,结束转换操作后,产生的温度数据以两个字节的形式存储在高速缓存存储器的温度寄存器章,DS18B20保持等待的状态。

高速暂存器的字节组成

 

3.温度传感器的存储器:包括一个高度的暂存器RAM和一个EEPROM,后者存放了高温度和低温度触发器TH,TL和配置寄存器。

4.配置寄存器:为存储器的第四位,通过设定R0和R1位来设定精度,上电时默认为12位的精度。

暂存器的位7和0~4位被器件保留,禁止写入。

DS18B20的工作步骤

1.DS18B20初始化

2.执行ROM指令

3.执行DS18B20的功能指令

1.DS18B20初始化

1.数据线拉低。

2.延时480us(480—960us)。

3.数据线拉高。

4.延时约80us,若初始化成功,那么会在15—60us内产生一个由DS18B20返回的低电平0(在这段时间内可以进行超时判断)。

5.CPU读到数据线上的低电平,延时一段时间。

(步骤3到步骤5至少需要480us)

2.DS18B20写时序(CPU往DS18B20中写字节)

1.数据线先置低电平。

2.延时15us。

3.从低到高发送数据。

4.延时60us。

5.数据线拉到高电平。

6.重复1—5步骤,直到一个字节发送完成。

7.数据线拉高。

 

3.DS18B20读时序(CPU从DS18B20中读取字节)

1.将数据线拉低

2.延时1us。

3.将数据线拉高,释放总线准备读数据

4.延时10us。

5.读数据线一个状态位,处理数据。

6.延时45us。

(重复1—7步骤,直到一个字节被读完) 

 ROM指令

RAM指令

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DS18B20数字温度计是一种数字温度传感器,它可以通过一根3线接口连接到微控制器或单片机中,并提供高精度的温度测量结果。下面是一个基于DS18B20温度计设计过程: 1. 确定电路连接方式:DS18B20数字温度计有两种连接方式,一种是单总线模式,另一种是三线模式。单总线模式只需要一根数据线,而三线模式需要一个数据线、一个电源线和一个地线。在这里我们选择单总线模式。 2. 选择微控制器或单片机DS18B20数字温度计可以与多种微控制器或单片机连接,如Arduino、Raspberry Pi、STM32等。在这里我们以Arduino为例。 3. 连接硬件电路:将DS18B20数字温度计的数据线连接到Arduino的数字引脚上,同时连接一个4.7K欧姆上拉电阻到数字引脚。将DS18B20数字温度计的电源线连接到Arduino的5V电源引脚上,地线连接到Arduino的GND引脚上。 4. 编写软件程序:利用Arduino IDE编写程序,通过OneWire库函数读取DS18B20数字温度计的温度测量结果,并将结果输出到终端显示或LCD屏幕上。 下面是一个简单的Arduino程序示例: ```c++ #include <OneWire.h> // 定义DS18B20数字温度计连接的数字引脚 #define ONE_WIRE_BUS 2 // 创建OneWire对象 OneWire oneWire(ONE_WIRE_BUS); void setup() { Serial.begin(9600); // 初始化串口通信 } void loop() { byte data[12]; byte addr[8]; // 搜索DS18B20数字温度计 if ( !oneWire.search(addr)) { // 没有找到温度计 oneWire.reset_search(); delay(250); return; } // 检查温度计类型 if (OneWire::crc8(addr, 7) != addr[7]) { // 温度计类型错误 Serial.println("CRC is not valid!"); return; } // 发送读取温度命令 oneWire.reset(); oneWire.select(addr); oneWire.write(0x44, 1); // 等待温度转换完成 delay(1000); // 读取温度数据 oneWire.reset(); oneWire.select(addr); oneWire.write(0xBE); // 读取数据 for (int i = 0; i < 9; i++) { data[i] = oneWire.read(); } // 将数据转换为实际温度 int16_t raw = (data[1] << 8) | data[0]; float celsius = (float)raw / 16.0; // 输出温度值 Serial.print("Temperature: "); Serial.print(celsius); Serial.println(" °C"); // 等待一段时间 delay(1000); } ``` 通过上面的步骤,我们就可以设计出一个简单的DS18B20数字温度计。注意,实际使用中还需要考虑到温度计的精度、测量范围、采样频率等因素,以及电路的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值