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.执行结果

      

相关推荐
Sakura_j_h_7 小时前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
HANDY092008 小时前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
飞凌嵌入式11 小时前
千次静电放电试炼,守住飞凌嵌入式硬件可靠底线
嵌入式硬件
蹊黎19 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王1 天前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何1 天前
二进制和十六进制
stm32·单片机
国科安芯1 天前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
不昀1 天前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯1 天前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管