ESP32-S3-Temp_Sensor(内部温度传感器)

文章目录

  • 一、内部温度传感器
    • [   1、内部温度传感器](#   1、内部温度传感器)
    • [   2、注意事项](#   2、注意事项)
  • 二、结构原理
    • [   1、结构框图](#   1、结构框图)
    • [   2、ANALOG 模拟部分(XPD_SAR_POWER_DOMAIN 电源域)](#   2、ANALOG 模拟部分(XPD_SAR_POWER_DOMAIN 电源域))
    • [   3、Tsensor_cntl(数字控制器)](#   3、Tsensor_cntl(数字控制器))
    • [   4、RTC_REG_FILE](#   4、RTC_REG_FILE)
    • [   5、ULP(ULP‑RISC‑V 协处理器)](#   5、ULP(ULP‑RISC‑V 协处理器))
  • 三、API
    • [   1、头文件/组件](#   1、头文件/组件)
    • [   2、句柄类型](#   2、句柄类型)
    • [   3、结构体](#   3、结构体)
    • [   4、API](#   4、API)
      • [     1.temperature_sensor_install:安装驱动,生成句柄](#     1.temperature_sensor_install:安装驱动,生成句柄)
      • [     2.temperature_sensor_uninstall:卸载驱动,释放资源](#     2.temperature_sensor_uninstall:卸载驱动,释放资源)
      • [     3.temperature_sensor_enable:使能温度传感器硬件](#     3.temperature_sensor_enable:使能温度传感器硬件)
      • [     4.temperature_sensor_disable:关闭温度传感器硬件](#     4.temperature_sensor_disable:关闭温度传感器硬件)
      • [     5.temperature_sensor_get_celsius:读取温度(摄氏度),禁止在中断内调用](#     5.temperature_sensor_get_celsius:读取温度(摄氏度),禁止在中断内调用)
  • 四、示例代码
    • [   1、读取芯片内部温度](#   1、读取芯片内部温度)
      • [     1.示例代码](#     1.示例代码)
      • [     2.执行结果](#     2.执行结果)

一、内部温度传感器

   1、内部温度传感器

     ESP32‑S3 内置 SAR ADC2 的内部温度传感器,读取芯片内部 die 温度(芯片本体温度,不是环境温度)。

   2、注意事项

     1. 测的是芯片内核温度,不是空气环境温度;芯片跑 WiFi、PWM、LED 时会明显偏高。

     2. 温度传感器复用 ADC2 外设,WiFi 启用时 ADC2 会被占用,开 WiFi 时内部温度传感器不可用!

二、结构原理

   1、结构框图

    

   2、ANALOG 模拟部分(XPD_SAR_POWER_DOMAIN 电源域)

     Tsensor:模拟温度传感单元,位于 SAR‑ADC2 电源域。

     该模块和 ADC2 共用电源域,WiFi 开启时会把该电源域断电,温度传感器就失效,对应文档里 WiFi 互斥的根源。

     信号交互:

       tsens_xpd / tsens_clk:电源使能、时钟,来自Tsensor_cntl控制器,控制模拟传感器上电、时钟。

       parameter:DAC 偏移配置参数(对应代码中dac_offset L0~L4 档位)。

       tsens_data:温度原始采样数据,输出给数字控制器。

   3、Tsensor_cntl(数字控制器)

     位于 RTC 域,负责:

       接收 RTC 寄存器 / ULP 的控制信号;

       输出控制信号给模拟 Tsensor;

       接收模拟采样数据,做处理;

       输出状态信号:SENS_TSENS_OUT7:0原始 8bit 温度数据、SENS_TSENS_READY采样完成标志。

     多路选择器 0/1:选择控制来源:

       0:来自 ULP 协处理器;

       1:来自 RTC_REG_FILE(RTC 寄存器)。

       说明:温度传感器可以被 ULP‑RISC‑V 直接驱动,在主 CPU 休眠低功耗模式下持续测温,不需要唤醒主 CPU。

     控制寄存器信号:

       SENS_TSENS_POWER_UP_FORCE:强制上电;

       SENS_TSENS_POWER_UP:传感器上电;

       SENS_TSENS_DUMP_OUT:读出采样结果;

       SENS_TSENS_IN_INV:输入反向配置。

   4、RTC_REG_FILE

     RTC 寄存器堆,主 CPU 通过寄存器配置温度传感器,存放配置参数、读取采样结果。

   5、ULP(ULP‑RISC‑V 协处理器)

     RTC 域的低功耗小核。 可以独立操作温度传感器:休眠模式下,主 CPU 睡眠,ULP 周期性读取芯片温度,温度超标再唤醒主 CPU,做过热保护,非常适合低功耗场景。

三、API

   1、头文件/组件

     头文件:

       #include "driver/temperature_sensor.h"

     组件:

       PRIV_REQUIRES esp_driver_tsens

   2、句柄类型

     //温度传感器句柄

     typedef struct temperature_sensor_obj_t* temperature_sensor_handle_t;

   3、结构体

     配置结构体 temperature_sensor_config_t:

c 复制代码
			typedef struct {
			    int range_min;     //预设测量温度下限(℃)
			    int range_max;     //预设测量温度上限(℃)
			    temperature_sensor_clk_src_t clk_src;   //时钟源
			    struct {
			        uint32_t allow_pd;     //置1:睡眠时允许关闭传感器电源域,驱动自动备份恢复寄存器
			    } flags;                
			} temperature_sensor_config_t;

     快速初始化宏:

       TEMPERATURE_SENSOR_CONFIG_DEFAULT(min, max);

   4、API

     1.temperature_sensor_install:安装驱动,生成句柄

       esp_err_t temperature_sensor_install(const temperature_sensor_config_t *tsens_config, temperature_sensor_handle_t *ret_tsens);

       参数:

         tsens_config:配置结构体指针。

         ret_tsens:输出得到传感器句柄。

       返回:ESP_OK成功。

     2.temperature_sensor_uninstall:卸载驱动,释放资源

       esp_err_t temperature_sensor_uninstall(temperature_sensor_handle_t tsens);

       参数:tsens 由 install 生成的句柄。

       返回:ESP_OK成功。

     3.temperature_sensor_enable:使能温度传感器硬件

       esp_err_t temperature_sensor_enable(temperature_sensor_handle_t tsens);

       返回:

         ESP_OK成功。

         ESP_ERR_INVALID_STATE:已经处于使能状态。

     4.temperature_sensor_disable:关闭温度传感器硬件

       esp_err_t temperature_sensor_disable(temperature_sensor_handle_t tsens);

       返回:

         ESP_OK成功。

         ESP_ERR_INVALID_STATE:尚未使能。

     5.temperature_sensor_get_celsius:读取温度(摄氏度),禁止在中断内调用

       esp_err_t temperature_sensor_get_celsius(temperature_sensor_handle_t tsens, float *out_celsius);

       参数:

         tsens:传感器句柄。

         out_celsius:输出温度浮点数指针。

       返回码:

         ESP_OK:读取成功。

         ESP_ERR_INVALID_ARG:参数非法。

         ESP_ERR_INVALID_STATE:传感器未使能。

         ESP_FAIL:解析失败,数值超出量程。

四、示例代码

   1、读取芯片内部温度

     1.示例代码

c 复制代码
			#include <stdio.h>
			#include "freertos/FreeRTOS.h"
			#include "freertos/task.h"
			#include "driver/temperature_sensor.h"
			
			void app_main(void)
			{
			    temperature_sensor_handle_t temp_handle = NULL;
			
			    //配置测量区间 20~50℃
			    temperature_sensor_config_t tsens_cfg = TEMPERATURE_SENSOR_CONFIG_DEFAULT(20, 50);
			    ESP_ERROR_CHECK(temperature_sensor_install(&tsens_cfg, &temp_handle));
			
			    ESP_ERROR_CHECK(temperature_sensor_enable(temp_handle));
			
			    float temp_val;
			    while(1)
			    {
			        esp_err_t ret = temperature_sensor_get_celsius(temp_handle, &temp_val);
			        if(ret == ESP_OK)
			        {
			            printf("Chip temperature: %.2f °C\n", temp_val);
			        }
			        else
			        {
			            printf("read temp fail, ret:%d\n", ret);
			        }
			        vTaskDelay(pdMS_TO_TICKS(1000));
			    }
			
			    //不会执行到这里
			    ESP_ERROR_CHECK(temperature_sensor_disable(temp_handle));
			    ESP_ERROR_CHECK(temperature_sensor_uninstall(temp_handle));
			}

     2.执行结果

      

相关推荐
li星野1 小时前
【学习记录】DAP调试器电路原理图完全详解:从STM32最小系统到SWD调试接口
stm32·嵌入式硬件·学习
Naiva1 小时前
AD19 基础应用技巧: Polygon Pour 铺铜完成后,自动将铜皮产生的尖角变成圆角
单片机
深圳市恒锐丰科技杨生1 小时前
LR050N03TL4 N 沟道 MOSFET|龙夏电子 Long‑Tek
嵌入式硬件·硬件工程
下辈子不要当码农2 小时前
Linux驱动(2)
linux·运维·单片机
尼喃2 小时前
PW2609原厂要停产,升级版PW2609A:引脚相同
嵌入式硬件
lzqrzpt2 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件
碧海银沙音频科技研究院2 小时前
基于炬芯ATS3089X音箱的音乐播放歌词显示功能实现
人工智能·驱动开发·嵌入式硬件·算法
comyccccc2 小时前
TB6612编码电机驱动板设计全解析学习笔记
单片机·嵌入式硬件
honsor2 小时前
以太网温湿度传感器原理与 Modbus TCP 组网实战,机房动环监控落地
网络·嵌入式硬件·物联网·网络协议·tcp/ip