温度传感器

您所在的位置:网站首页 热敏温度传感器的传递函数 温度传感器

温度传感器

2024-07-11 00:40:30| 来源: 网络整理| 查看: 265

功能概述

下文将分节概述温度传感器的功能:

资源分配 - 介绍了部分参数,设置这些参数可以获取温度传感器句柄;还介绍了在温度传感器完成工作后如何回收资源。

启用及禁用温度传感器 - 介绍如何启用及禁用温度传感器。

获取测量的温度值 - 介绍如何获取实时温度值。

安装温度阈值回调函数 - 介绍如何注册温度阈值回调函数。

电源管理 - 介绍更改功耗模式(如 Light-sleep 模式)对温度传感器造成的影响。

IRAM 安全 - 介绍在禁用 cache 时如何提高温度传感器的性能。

线程安全 - 介绍如何使驱动程序具备线程安全性。

资源分配

ESP32-C6 只有一个内置温度传感器硬件。temperature_sensor_handle_t 表示温度传感器模块,该变量也是不同函数之间的纽带。通过使用相同的 temperature_sensor_handle_t 变量,可以在不同的函数调用中访问和修改温度传感器属性,以控制和管理温度传感器。该变量会作为温度 API 的参数,携带有关硬件和配置的信息,你只需创建类型为 temperature_sensor_handle_t 的指针,并将其传递给所需 API。

请在安装内置温度传感器模块前评估测量环境的温度范围。例如,如果在室内测量,环境温度可能在 10 °C ~ 30 °C;如果在灯泡中测量,环境温度则可能在 60 °C ~ 110 °C。在环境温度范围的基础上,请先根据以下值定义配置结构体 temperature_sensor_config_t,再安装内置温度传感器:

range_min:所测量温度范围的最小值。

range_max:所测量温度范围的最大值。

设置好温度范围后,将配置结构体传递给 temperature_sensor_install(),该函数将创建温度传感器模块并返回句柄。

如前文所述,不同测量范围对应不同测量误差。然而你无需自行比对测量误差,乐鑫提供了一个内部机制,可以根据所给温度范围选择最小误差。

温度传感器使用完毕后,请调用 temperature_sensor_uninstall() 释放相应资源。

创建温度传感器句柄

第 1 步:评估测量范围。本示例的温度范围为 20 °C ~ 50 °C。

第 2 步:配置测量范围,获取温度传感器句柄。

temperature_sensor_handle_t temp_handle = NULL; temperature_sensor_config_t temp_sensor = { .range_min = 20, .range_max = 50, }; ESP_ERROR_CHECK(temperature_sensor_install(&temp_sensor, &temp_handle)); 启用及禁用温度传感器

调用 temperature_sensor_enable() 启用温度传感器。此时,内部温度传感器回路开始工作,驱动程序从初始化状态转为启用状态。

调用 temperature_sensor_disable() 禁用温度传感器。

获取测量的温度值

通过 temperature_sensor_enable() 启用温度传感器后,可以调用 temperature_sensor_get_celsius() 获取当前测量的温度值。

// 启用温度传感器 ESP_ERROR_CHECK(temperature_sensor_enable(temp_handle)); // 获取传输的传感器数据 float tsens_out; ESP_ERROR_CHECK(temperature_sensor_get_celsius(temp_handle, &tsens_out)); printf("Temperature in %f °C\n", tsens_out); // 温度传感器使用完毕后,禁用温度传感器,节约功耗 ESP_ERROR_CHECK(temperature_sensor_disable(temp_handle)); 安装温度阈值回调函数

ESP32-C6 支持自动触发温度传感器,持续监测内部温度,内部温度达到给定阈值时将触发中断。因此,可以安装中断回调函数执行所需操作,如报警、重启等。下文介绍了如何准备阈值回调函数。

函数 temperature_sensor_event_callbacks_t::on_threshold 在中断服务程序 (ISR) 的上下文中调用,请确保该函数不会涉及 block 操作。为此,可以检查调用 API 的后缀,确保仅从函数内调用具有 ISR 后缀的 FreeRTOS API 等。函数原型在 temperature_thres_cb_t 中声明。

通过参数 user_arg 可以将自定义上下文保存到 temperature_sensor_register_callbacks() 中,用户数据将直接传递给回调函数。

IRAM_ATTR static bool temp_sensor_monitor_cbs(temperature_sensor_handle_t tsens, const temperature_sensor_threshold_event_data_t *edata, void *user_data) { ESP_DRAM_LOGI("tsens", "Temperature value is higher or lower than threshold, value is %d\n...\n\n", edata->celsius_value); return false; } // 配置回调函数 temperature_sensor_abs_threshold_config_t threshold_cfg = { .high_threshold = 50, .low_threshold = -10, }; // 设置监控阈值 temperature_sensor_set_absolute_threshold(temp_sensor, &threshold_cfg); // 注册中断回调函数 temperature_sensor_event_callbacks_t cbs = { .on_threshold = temp_sensor_monitor_cbs, }; // 安装温度回调函数 temperature_sensor_register_callbacks(temp_sensor, &cbs, NULL); 电源管理

由于温度传感器不使用 APB 时钟,无论是否激活 CONFIG_PM_ENABLE 启用电源管理,温度传感器仍可以继续工作。

IRAM 安全

默认情况下,禁用 cache 时,写入/擦除 flash 等原因将导致温度传感器中断延迟,事件回调函数也将延迟执行。在实时应用程序中,应避免此类情况。

因此,可以启用 Kconfig 选项 CONFIG_TEMP_SENSOR_ISR_IRAM_SAFE,该选项:

支持在禁用 cache 时启用所需中断

支持将 ISR 使用的所有函数存放在 IRAM 中

启用该选项可以保证 cache 禁用时的中断运行,但会占用更多的 IRAM。

线程安全

温度传感器中并未添加任何确保线程安全的额外保护,因为温度传感器通常只在一个任务中调用。如果要在不同任务中使用该驱动程序,请设置额外的锁进行保护。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

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

推荐新闻


图片新闻

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

专题文章

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