这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 【MSP焕新大作战】+课程3+任务1+温度报警

共2条 1/1 1 跳转至

【MSP焕新大作战】+课程3+任务1+温度报警

菜鸟
2024-07-18 19:33:14     打赏

一、功能需求

1,驱动DS18B20,实时读取温度值;

274HC595驱动数码管显示温度值;

3,蜂鸣器超温报警;

二、原理

1DS18B20

DS18B20有着超小的体积,超低的硬件开销,抗干扰能力强,精度高,所有他非常受欢迎。

1)功能特点:

温度范围:从-55℃+125℃

温度分辨率:可通过寄存器设置,支持9位到12位的分辨率

精度:在-10℃+85℃范围内,精度为±0.5℃

输出格式:数字信号(12位二进制)

通信协议:1-Wire,即仅使用一根数据线与微处理器进行通信

工作电源电压范围:3V5.5V

温度计分辨率可设置为9~12位,12位时分辨率对应为0.0625℃。

2)典型电路

图片1.png 

3)64ROM

 图片2.png 

用于实现一根总线挂载多个18B20

4)配置寄存器

图片3.png 

5)温度寄存器

图片4.png 

The sign bits (S) indicate if the temperature is positive or negative: for positive numbers S = 0 and for negative numbers S = 1

6)ROM指令和功能指令

图片5.png 

ROM指令(ROM Commands):

搜索ROMSearch ROM):该指令用于搜索总线上连接的所有DS18B20设备的唯一ROM代码。通过发送搜索设备指令,可以获取总线上所有DS18B20设备的地址,以便后续与特定设备进行通信。

读取ROMRead ROM):该指令用于从DS18B20传感器中读取设备的唯一ROM代码。通过发送读取ROM指令,可以获取特定DS18B20设备的地址。

匹配ROMMatch ROM):使用该指令可以将总线上的通信限定为特定的DS18B20设备。发送匹配ROM指令后,只有匹配的设备会对后续的指令做出响应。

跳过ROMSkip ROM):使用该指令可以忽略总线上所有设备的地址,直接与总线上唯一一个DS18B20设备进行通信。适用于只连接一个DS18B20设备的情况。

使能温度报警搜索(Alarm Search):该指令用于在总线上启动温度报警搜索过程。可以通过发送该指令,识别温度超过设定阈值的DS18B20设备。

功能指令(Function Commands):

读取温度(Convert T):该指令用于启动温度转换过程。在执行该指令后,DS18B20开始测量温度,并将结果存储在内部寄存器中。

写入温度设定值(Write Scratchpad):该指令用于将温度设定值写入DS18B20传感器的内部寄存器。可以使用该指令设置温度报警阈值等参数。

读取温度设定值(Read Scratchpad):该指令用于从DS18B20传感器的内部寄存器中读取温度设定值和其他配置参数。

复制温度设定值(Copy Scratchpad):该指令用于将写入的温度设定值从内部寄存器复制到DS18B20EEPROM中。通过执行该指令,可以确保温度设定值在掉电后仍然有效。

读取电源供应(Read Power Supply):该指令用于读取DS18B20传感器的电源供应状态,以确定传感器是否正常供电。

写入温度报警阈值(Set Alarm Temp):使用该指令可以将温度报警的上限和下限阈值写入DS18B20的报警寄存器,以便在温度超出设定范围时触发报警。

7)读取温度顺序。我们只有一个DS18B20,所有跳过ROM指令就可以进行温度转化和读取温度了。

 图片6.png 

注意:每个字节写的时候都是低位在前高位在后。

图片7.png      图片8.png

主机发出读取RAM的命令(BEH)DS18B20接到指令后依次将9个字节的内容按照低字节在前、低位在前的顺序逐位送出数据。主机可依次读取9个字节的数据,如果只想读取温度数据,在读完前2个字节的数据后就不用再理会后面送来的内容。

在对18b20操作时,对时间的要求是非常严格的,所以需要深入了解单总线时序图。

 

8)时序图

初始化时序

图片9.png 

主机首先发出一个480~960us的低电平脉冲(复位),然后释放总线变为高电平,并在随后的480微秒时间内,对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。作为从机的DS18B20上电后就一直检测总线上是否有480~960微秒的低电平出现,如果检测到该复位脉冲则在总线变为高电平后,等待15~60微秒,之后将总线电平拉低60~240微秒(响应存在脉冲),告诉主机本器件已做好准备。

主机编程:主机将DQ拉成低电平保持最少480us后释放总线,延时15~60us后的60~240us时间内检测DQ是否为低电平,再延时240us保持起始时序的完整。

读写时序

图片10.png 

写周期的开始,主机先把总线拉低大于1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束作为从机的DS18B20在检测到总线被拉低后等待15微秒后从15us~45us对总线采样(典型时间15us),在采样时间内,若检测到总线为高电平则认为主机发送了1,若检测到总线为低电平则认为主机发生了0

读周期的开始,主机先把总线拉低大于1微秒,然后释放总线。主机释放总线后,若DS18B20发送0,则把总线拉低并保持至少从读周期开始的15us,然后释放总线为高电平。若DS18B20发送1,则在主机释放总线后不拉低总线(为高电平)。主机须在读周期开始的15us内检测总线电平的高低,若检测到总线为低则表示DS18B20发送来0,若检测到总线为高则表示DS18B20发送来1

 

2,有源蜂鸣器

我们这个模块就是给低电平就响;

374HC595数码管模块

数码管相关资料参照数码管显示部分。

4,电路连接

74HC595链接在PA15PA16PA17

18B20连接在PA18

蜂鸣器连接在PA1

三、软件实现

174HC595 GPIO配置。DI连接开发板的PA15SCLK连接开发板的PA16RCLK连接开发板的PA17.

                图片12.png 

2)DS18B20数据引脚定义,使用PA18,我们这里定义为输出,18B20在驱动中根据需要配置为输入输出。

图片13.png 

3)配置蜂鸣器引脚,使用PA22,定义为输出。默认输出高电平。避免蜂鸣器初始化时响起。

图片14.png 

2DS18B20驱动

  首先定义几个宏定义

图片15.png 

初始化时序

图片16.png 

写时序

图片17.png 

读时序

 图片18.png

读取温度

图片19.png

3)温度报警控制

当温度高于设定的极限值时,蜂鸣器响起。我这里设置的大于31摄氏度时,蜂鸣器响起。

图片20.png 

编译、下载、运行。

     image.png



菜鸟
2024-07-31 12:59:40     打赏
2楼

你好,请问测温模块需要外接上拉电阻吗?


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]