【单片机学习】高级外设和项目篇一:温度传感器DS18B20

转:

【单片机学习】高级外设和项目篇一:温度传感器DS18B20

【朱老师课程总结 侵删】

第一部分、章节目录

2.1.1.DS18B20相关背景知识1

2.1.2.DS18B20相关背景知识2

2.1.3.原理图和数据手册1

2.1.4.原理图和数据手册2

2.1.5.原理图和数据手册3

2.1.6.原理图和数据手册4

2.1.7.原理图和数据手册5

2.1.8.DS18B20的工作流程分析

2.1.9.DS18B20的编程要点

2.1.10.DS18B20移植实验1

2.1.11.DS18B20移植实验2

2.1.12.DS18B20移植实验3


第二部分、章节介绍

2.1.1.DS18B20相关背景知识1
    本节首先总结第1季的内容,正式介绍第2季的细节规划和学习目标,最后讲了温度传感器的发展历程。
2.1.2.DS18B20相关背景知识2
    本节详细介绍DS18B20温度传感器的基本特点,这些信息来自于数据手册,目的是让大家对这个传感器有个大概认识。
2.1.3.原理图和数据手册1
    本节开始带大家读18B20的数据手册,核心是框图的理解以及温度值和读出的数字值的对应换算关系,这对后续编程很重要。    
2.1.4.原理图和数据手册2
    本节接着读数据手册,主要是报警设置、64位只读ROM等内容。
2.1.5.原理图和数据手册3    
    本节开始分析DS18B20的低层时序,主要是初始化和芯片存在探测时序的分析。并且和初始化函数源码进行了对比分析。   
2.1.6.原理图和数据手册4
    本节主要讲解18B20的低层二进制读写时序,这些时序是控制器和18B20发送接收指令数据的基础时序。
2.1.7.原理图和数据手册5
    本节结合官方实例代码中的字节读写函数源码,再次对比分析低层读写时序,加深理解。
2.1.8.DS18B20的工作流程分析
    本节对DS18B20的工作流程进行分析,其实就是高层时序的实现。并且重点讲了ROM操作指令和功能指令。
2.1.9.DS18B20的编程要点
    本节对DS18B20程序的移植要点做阐述,然后带大家一步一步去做程序移植工作
2.1.10.DS18B20移植实验1
    本节正式开始移植实验,本节主要是初始化函数的测试。
2.1.11.DS18B20移植实验2
    本节添加高层时序,并且写测试函数读取温度,移植的关键点还是在于时序中的延时。
2.1.12.DS18B20移植实验3
    本节实际测试代码,并且对读到的温度值进行加工处理,串口输出。

    
第三部分、随堂记录

2.1.1.DS18B20相关背景知识1

2.1.1.1、温度传感器
(1)测温度的方式:

  • 物理(汞柱、气压)
  • 电子(金属电性能(电阻率和导电性)随温度变化)

(2)早期:热敏电阻NTC(模拟接口):要进行AD转换,还要进行校准,很麻烦
(3)现代:专用传感器

  • 数字接口,如I2C、DS18B20的单总线(1-wire)接口等
  • 直接可以读出温度值,内部集成了AD转换芯片
    【单片机学习】高级外设和项目篇一:温度传感器DS18B20


2.1.2.DS18B20相关背景知识2

DS18B20数据手册

2.1.2.1、DS18B20的基本特征
(1)内置集成ADC,外部数字接口DQ
(2)单总线(1-wire)数字接口,布线成本低
(3)内置唯一64位序列号存储在内部存储器中(就是DS18B20的身份证号,全球唯一,类似于网卡的MAC地址,出厂就带好了,不能更改)
(4)CPU可以单线串联无限多个DS18B20
(5)温度范围宽、精确率高(相对)
(6)数字值温度分辨率位数可软件设置(9-12位),分辨率不同,精确度不同
(7)温度采集速度快(750ms)
(8)温度阈值报警功能,且阈值可内置存储掉电不丢失(可以用EEPROM存储TH、TL实现)
(9)支持VDD供电/ 数据总线内部电容实现寄生电源供电


2.1.2.2、学习思路
(1)了解基本特征、内部结构、单总线协议、时序、如何接线、数据收发编程!
(2)学习重点和难点是单总线协议的时序编程实现


2.1.3.原理图和数据手册1

2.1.3.1、原理图和接线
(1)引脚图
【单片机学习】高级外设和项目篇一:温度传感器DS18B20【单片机学习】高级外设和项目篇一:温度传感器DS18B20
【单片机学习】高级外设和项目篇一:温度传感器DS18B20
(2)原理图确认
【单片机学习】高级外设和项目篇一:温度传感器DS18B20
(2)接线确认

  • 一定要注意温度传感器的方向,在接口处用丝印画了一个凸起,所以只需要将温度传感器对应插入即可
  • J14对应DQ线,可以接到单片机任意一个引脚上!咱们接到P3.7上

【单片机学习】高级外设和项目篇一:温度传感器DS18B20【单片机学习】高级外设和项目篇一:温度传感器DS18B20


2.1.3.2、数据手册学习
(1)内部结构框图
【单片机学习】高级外设和项目篇一:温度传感器DS18B20

  • 讲一下,如何利用DQ线供电!

【单片机学习】高级外设和项目篇一:温度传感器DS18B20
这几类寄存器,下面会讲,先MARK一下:

  • 两个字节的温度寄存器
  • 温度报警值寄存器(TH、TL,各八位)
  • 一个字节的配置寄存器


2.1.4.原理图和数据手册2—寄存器

2.1.4.1、温度寄存器—测温度
【单片机学习】高级外设和项目篇一:温度传感器DS18B20
【单片机学习】高级外设和项目篇一:温度传感器DS18B20

  • 只有发布温度转换命令(44H)后,经过AD转换的二进制数补码才会存在温度寄存器中。
  • 温度转换结束:= 1,未结束:=0;
  • 当单片机读取温度寄存器时,低位在前,高位在后! 
  • 9位:0.5℃     10位:0.25℃         11位:0.125℃          12位:0.0625摄氏度
  • MS+LS 里面存储的是格子数!实际温度 = 温度寄存器的值*分辨率

2.1.4.2、TH和TL寄存器—报警操作

【单片机学习】高级外设和项目篇一:温度传感器DS18B20

  • TH和TL寄存器存放在EEPROM中,一旦自定义好报警预置值,掉电时不会丢失的
  • 每一次温度转换后,温度寄存器的值和TH、TL寄存器比较,如果高于TH或者低于TL,就会报警
  • 当S = 0时,表示温度为正,S = 1时,表示温度为负

2.1.4.3、配置寄存器—配置分辨率

【单片机学习】高级外设和项目篇一:温度传感器DS18B20
【单片机学习】高级外设和项目篇一:温度传感器DS18B20

  • 位7和位0-4被器件保留

2.1.4.4、高速暂存器

【单片机学习】高级外设和项目篇一:温度传感器DS18B20

  • 由暂存SRAM和一个EEPROM组成
  • 数据通过写暂存器指令(0x4E)写入高速暂存器

2.1.5.原理图和数据手册3

2.1.5.1、单总线协议概述
(1)单点:一主一从、多点:一主多从

  • 咱们的开发板时单点系统,但是咱们会讲多点系统!

(2)DS18B20规定总线上的数据是LSB的(低位传输)
(3)单总线硬件连接要求:漏极开路式+5K欧姆的上拉电阻
(4)总线低电平超过480us,从设备将被复位
【单片机学习】高级外设和项目篇一:温度传感器DS18B20

2.1.5.2、单总线协议标准执行序列
(1)主机必须按照单总线协议设定好的完整序列和DS18B20通信,每个回合包含3个步骤:

  • 初始化
  • ROM操作指令
  • 功能操作指令。

   顺序不能错也不能省略任何一个。

(2)初始化就是:主设备先拉低数据总线超过480us以发出一个复位脉冲,然后从设备DS18B20收到复位脉冲后内部进行硬件复位,复位完成后回复主设备一个存在脉冲,主设备收到了存在脉冲后就认为从设备已经准备好,初始化完成。


2.1.6.原理图和数据手册4

2.1.6.1、读时序
2.1.6.2、写时序


2.1.7.原理图和数据手册5

2.1.7.1、源码分析与时序图对照


2.1.8.DS18B20的工作流程分析

2.1.8.1、温度获取流程
(1)DS18B20自己本身不会主动去进行温度测量,而是需要主控CPU主动发起一个温度转换的过程,这么设计是因为温度转换本身是要耗电的,所以设计为平时待机等待温度转换命令后才去进行温度AD转换。
(2)主控CPU和DS18B20之间的通信是分周期的,譬如我们要让DS18B20进行温度转换就是一个周期。这个周期包含一个初始化+N个命令。(每个周期的开始都要有一个初始化,然后跟着N个命令)
(3)初始化过程主要是探测目标DS18B20是否存在,若存在将芯片初始化。
(4)命令很重要。所以DS18B20是一个典型的“命令-响应”型外设。学习这种外设的关键是命令集。
2.1.8.2、ROM操作指令
(1)DS18B20支持多个芯片串联在一根总线上,也就是所谓的单总线协议,所以必须要主控CPU要能够区分总线上多个18B20,因此有个ROM操作指令来完成这个任务。
(2)ROM操作指令和温度采集一点关系都没有,所以当我们总线上只有一个18B20的时候ROM操作指令我们不需要去管。
(3)一旦系统中单总线上有多个18B20,那么我们必须借助ROM操作指令来区分多个18B20,而且这个区分过程可能需要多条ROM指令来完成。
(4)如果系统中只有一个18B20,那么就用一条skip rom命令(0xCC)就可以跳过这个阶段。

2.1.8.3、DS18B20 功能指令
(1)ROM操作指令目的是为了在单总线上多个18B20中挑选到那个当前我们要操作的18B20,而功能指令是为了和选定的18B20通信从而获取温度。


2.1.9.DS18B20的编程要点

2.1.9.1、几种工作思路
(1)参考文档自己编写代码
(2)参考示例代码移植
2.1.9.2、DS18B20移植关键点
(1)注意延时函数的本地实现(代码里的时间有关的部分必须重写)
(2)注意引脚配置
(3)注意时序
(4)先通过初始化来检测芯片是否能通再做其他的
(5)注意读到的温度值是否会变
2.1.9.3、代码实践
(1)建立工程
(2)移植初始化函数
(3)移植串口函数作为调试


2.1.10.DS18B20移植实验1

2.1.10.1、串口函数移植
2.1.10.2、main函数编写
2.1.10.3、测试与调试

    
2.1.11.DS18B20移植实验2

2.1.11.1、低层时序读写byte函数的移植
2.1.11.2、高层时序的移植
(1)温度转换
(2)温度读取
(3)串口调试输出


2.1.12.DS18B20移植实验3

2.1.12.1、上节代码测试
(1)检查串口数据是否正常
(2)调整时序中关键延时以加深对时序的理解
2.1.12.2、温度数据的后续处理
(1)温度数据的移位组合
(2)数字值转为温度值
(3)调试输出

换算:tml:0x99, tmh:0x01,意味着,温度数字值:0x0199,就等于409,
当前默认精度是12位的,每一个数字值对应0.0625摄氏度,
所以,计算出来的温度值应该是: 409*0.0625=25.56摄氏度

在单片机中,应该尽量避免进行小数运算。小数运算一般转成整数运算。
409*0.0625=409*625/10000


 

转:

【单片机学习】高级外设和项目篇一:温度传感器DS18B20

上一篇:蓝桥杯 知识点总结


下一篇:太阳之子的力扣之路 1.2