DS18B20读取温度驱动

您所在的位置:网站首页 班级的各项工作怎么写 DS18B20读取温度驱动

DS18B20读取温度驱动

2024-07-12 20:10:44| 来源: 网络整理| 查看: 265

DS18B20读取温度驱动--基于stm32f10x DS18B20简述 封装 硬件架构 和你的开发板连接 同DS18B20通信的方法 计算温度 转换时间 1-Wire总线协议 设备的初始化 发送数据 接收数据 代码编写 ds18b20_hardware_config.h ds18b20.h ds18b20.c TestDriver.c 相关资料链接

DS18B20简述

一切驱动程序的编写都必须严格依照芯片参考手册来编写, 所以首先对芯片做介绍。了解的人可以跳过 DS18B20是一个种低成本的数字温度传感器芯片使用1-wire总线协议, 转化精度位0.0625摄氏度, 具有温度转换, 高低温报警等功能, 本文属于介绍性质, 不会实现全部功能的编写, 这里主要为其编写温度转换功能。

封装

芯片引脚功能说明 DS18C20提供两种封装, 直插式和贴片式, 读者可以根据需求选择合适的封装, 这里我们主要关注DQ,它是双向数据传输线,我们下面就会基于它来实现主机和芯片的通信。

硬件架构

在这里插入图片描述 对于硬件架构, 我们主要关注的是ROM和SCRATCHPAD, ROM中存储着产品出场后唯一的序列号, 正是这个序列号让我们可以识别设备, 在一条总线上完成同多个设备的通信, 我们这次编写的驱动只针对一个设备, 所以我们可以忽略, 但是对于多设备的驱动, 你就必须关注这个序列号了。 SCRATCHPAD中存储着温度转换的结果, 我们如果需要读取温度的话, 就是从这里读取的, 温度依照2进制补码存储在SCRATCHPAD中。

和你的开发板连接

DS18B20支持两种供电方式, 寄生供电和直接电压供电, 我们这里选择直接供电(注意, 直接供电和寄生供电的驱动程序和时序是不一样的, 如果你想要使用寄生供电方案, 这篇文章的代码可能会有问题), 这个是直接供电方式的硬件连接图 在这里插入图片描述 注意这里控制器的输出模式必须配置为开漏或者高阻态, 对于stm32, 我们选择开漏输出, 如果你选择使用FPGA来编写驱动, 你这里应该将引脚配置为高阻态。 其次是上拉电阻, 如果你购买的是成品模块, 上拉电阻通常已经接好, 直接同你的芯片引脚连接即可, 笔者连接的是PC12. 最后说明, 开漏输出是一种双向数据传输的策略, 配置为开漏输出的引脚只具备拉低电平的能力, 不具有拉高电平的能力, 在主机不拉低电平的时候(释放总线)引脚的电平状态由外界决定, 这时候可以读取引脚的电平判断从机发送的信号(尽管叫做开漏“输出”, 它实际是双向的, 可读可写)。也就是所我们如果释放总线, 就可以读取外界发送的数据了。

同DS18B20通信的方法

这里只是一个概述, 具体看编程部分

初始化 发送ROM指令 发送Memory指令 数据传输

数据本身是没有意义的, 想要告知DS18B20我们发送的数据的意义, 我们需要在发送数据之前发送指令, 来告知我们的数据会被解析成为什么, 这里我们主要使用3种指令,0xcc(跳过ROM), 0xbe(读温度), 0x44(温度转换)。具体见程序部分。

计算温度

DS1820的解析度有9, 10, 11, 12位, 相应的精度为 0.5, 0.25, 0.125, 0.0625℃, 硬件出场配置为12位, 我们这里不做改变, 下面的程序都会基于它编写。 下图是温度和读取的数据的关系 在这里插入图片描述 它是以二进制补码的方式来存储的, 计算方法是取得绝对码之后用这个数值乘以精度, 就是计算的温度, 比如入上图你读取的结果是0x1000(8),乘上精度0.0625,就是测量温度0.5摄氏度。

转换时间

数据的转换不是转眼就完成的, 我们在发送数据转换指令之后需要等待转换完成。 下标是对于不同精度下的转换时间, 我们这里选择最高精度, 转换时间750ms

1-Wire总线协议

发送数据最重要的就是遵守发送数据的协议, DS18B20遵守1-Wire总线协议,下面是对它的介绍。 协议主要通过时序图描述, 所以需要会看时序图, 教科书中的时序图分析是远远不够的,笔者希望大家可以多尝试自己分析时序, 积累经验。

设备的初始化

在这里插入图片描述 这个时序图的含义是: 要完成初始化过程, 控制器首先需要总线拉低480-960us, 然后释放总线15-60us,随后控制器检测总线是否被从设备拉低, 如果是, 继续等待480us之后初始化完成,我们可以进入下一个步骤。

发送数据

发送数据包括发送0和1 下面是它的时序图 在这里插入图片描述 对于控制器而言, 发送1需要将总线拉低1-15us, 然后释放,等待至少总时长达到60us,完成发送。 发送0需要将总线拉低至少60us. 每次完成一位的送都需要释放总线至少1us

接收数据

在这里插入图片描述 对于控制器而言: 要读取数据需要将总线拉低至少1us, 最多14us,然后释放总线, 在第15us的时候读取总线的电平.读取完后继续等待45us 读到低电平说明接收到0,读到高电平说明接收到1 每次读取后都要释放总线至少1us

代码编写

我将文件组织为4部分

ds15b20_hanrdware_config.h :包含硬件配置 ds18b20.h :包含函数原型 ds18b20.c :函数定义 TestDriver.c :测试文件 ds18b20_hardware_config.h /*ds18b20_hardware_config.h*/ /*这里提供引脚配置, 应该和你的开发板相一致*/ #ifndef __DS18B20_HARDWARE_CONFIG_H__ #define __DS18B20_HARDWARE_CONFIG_H__ #define DS18B20_DQ_PORT GPIOC #define DS18B20_DQ_PIN GPIO_Pin_12 #define DS18B20_DQ_GPIO_CLK RCC_APB2Periph_GPIOC #define DS18B20_DQ_GPIO_APBxPeriphClockCmd RCC_APB2PeriphClockCmd #endif

在我的平台上我使用PC12作为数据总线, 如果你需要使用其他总线, 在这里更改你的配置

ds18b20.h #ifndef __DS18B20_H__ #define __DS18B20_H__


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭