DS18B20详解

DS18B20采用单总线协议进行传输。
单总线器件
通常把挂在单总线上的器件称之为单总线器件,单总线器件内一般都具有控制、收发、存储等电路。为了区分不同的单总线器件,厂家生产单总线器件时都要烧录一个64位的二进制ROM代码(单总线器件序列号),以标志其ID号。目前,单总线器件主要有数字温度传感器(如DS18B20)、DHT11、A/D转换器(如DS2450)、门标、身份识别器(如DS1990A)、单总线控制器(如DS1WM)等。
(一)DS18B20性能特点

在这里插入图片描述
DS18B20是DALLAS公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读取。可分别在93.75 ms和750 ms内完成9位和12位的温度数字量转换,从DS18B20读出信息或写入信息仅需要一根数据线。读写温度、变换功率可来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。

(1)GND为电源端;

(2)DQ为数字信号输入输出端;

(3)V DD 为外接供电电源输入端(在寄生电源接线方式时接地)。

(二)DS18B20的内部结构及主要功能部件

DS18B20的总体结构如图12-7所示,由64位光刻ROM及串行接口、高低温度传感器、高低温触发器、配置寄存器、8位CRC发生器、电源检测和寄生电容等各部分组成。

(1)64位ROM

64位光刻ROM是出厂前被光刻好的,它由8位产品系列号,48位产品序号和8位CRC编码组成,DS18B20的产品系列号均为28H,每个器件的48位产品序号各不相同,利用产品序号可以识别一线上的挂载的不同DS18B20器件。
在这里插入图片描述
图12-7 DS18B20内部结构框图
(2)配置寄存器

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DS18B20是一种数字温度传感器,使用时需要连接到控制器的GPIO口,然后通过读取DS18B20的数据来获取温度值。以下是DS18B20的代码流程: 1. 初始化GPIO口,将其设置为输出模式,输出高电平。 2. 延时500毫秒。 3. 将GPIO口设置为输入模式,读取DS18B20的响应信号。 4. 若DS18B20响应信号为低电平,则继续执行;否则等待一段时间再重试。 5. 发送读取温度命令,读取DS18B20传输的数据。 6. 将读取到的数据转换为温度值。 7. 返回温度值。 下面是一个基于STM32的DS18B20代码示例: ``` #include "ds18b20.h" #include "delay.h" #include "gpio.h" #define DS18B20_PIN GPIO_PIN_0 #define DS18B20_PORT GPIOA #define DS18B20_SKIP_ROM 0xCC #define DS18B20_CONVERT_T 0x44 #define DS18B20_READ_SCRATCHPAD 0xBE void ds18b20_init(void) { // 初始化GPIO口 gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET); } uint8_t ds18b20_reset(void) { // 将GPIO口设置为输出模式,输出低电平 gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET); delay_us(480); // 将GPIO口设置为输入模式,等待DS18B20响应信号 gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); delay_us(80); // 若DS18B20响应信号为低电平,则继续执行;否则等待一段时间再重试 if (gpio_read_pin(DS18B20_PORT, DS18B20_PIN) == GPIO_PIN_RESET) { delay_us(400); return 1; } else { return 0; } } void ds18b20_write_byte(uint8_t data) { for (int i = 0; i < 8; i++) { gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET); delay_us(2); if (data & (1 << i)) { gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET); } else { gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET); } delay_us(60); gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET); delay_us(2); } } uint8_t ds18b20_read_byte(void) { uint8_t data = 0; for (int i = 0; i < 8; i++) { gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET); delay_us(2); gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); data |= gpio_read_pin(DS18B20_PORT, DS18B20_PIN) << i; delay_us(60); gpio_init(DS18B20_PORT, DS18B20_PIN, GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW); gpio_write_pin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET); delay_us(2); } return data; } float ds18b20_read_temp(void) { float temp = 0; if (ds18b20_reset()) { ds18b20_write_byte(DS18B20_SKIP_ROM); ds18b20_write_byte(DS18B20_CONVERT_T); delay_ms(800); ds18b20_reset(); ds18b20_write_byte(DS18B20_SKIP_ROM); ds18b20_write_byte(DS18B20_READ_SCRATCHPAD); uint8_t low_byte = ds18b20_read_byte(); uint8_t high_byte = ds18b20_read_byte(); int16_t raw_temp = (high_byte << 8) | low_byte; temp = (float)raw_temp / 16.0; } return temp; } ``` 以上代码仅供参考,具体实现还需要根据不同的硬件平台进行相应的修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值