登录/注册

STM32 内部温度校准

STM32 内部温度校准

更多

好的,STM32 微控制器内部集成了一个温度传感器,但这个传感器在出厂时仅进行了粗略的校准。要获得更精确的温度读数,通常需要在应用程序中进行软件校准

以下是进行STM32内部温度传感器校准和使用的中文步骤和要点:

核心概念:

  1. 工厂预校准值: STM32芯片在出厂时,会对内部温度传感器进行基本校准。厂家会在芯片内部特定的Flash地址处存储两个校准值 (TS_CAL1 和 TS_CAL2)。

    • TS_CAL1: 对应于 VDDA = 3.3V时,在温度 T1 (通常是30°C)下测量得到的温度传感器的ADC原始值。
    • TS_CAL2: 对应于 VDDA = 3.3V时,在温度 T2 (通常是110°C)下测量得到的另一个温度点下的ADC原始值。 (注意:T1 和 T2 的具体值请查阅您使用的STM32型号的Datasheet或Reference Manual)
    • 这些校准地址因STM32系列(如F0/F1/F4/F7/G0/G4/H7等)不同而不同。你需要查阅芯片对应的Datasheet (通常在 "Embedded Characteristics" 或 "Electrical Characteristics" 章节)找到Address of the temperature sensor calibration value部分。
  2. 温度计算(线性近似): 温度传感器输出的电压与温度之间的关系在T1~T2范围内近似线性,因此可以利用这两个已知点来构建一条直线,通过当前测量到的ADC原始值推算出实际温度。公式如下:

    Temperature (°C) = (T1 * (TS_CAL2 - ADC_Value) - T2 * (TS_CAL1 - ADC_Value)) / (TS_CAL2 - TS_CAL1)

    或者更常见的变形:

    Temperature (°C) = T1 + ((ADC_Value - TS_CAL1) * (T2 - T1)) / (TS_CAL2 - TS_CAL1)
    • ADC_Value:你在当前实际温度下读取到的温度传感器ADC原始值。
    • T1, T2:TS_CAL1和TS_CAL2对应的已知温度 (查Datasheet)。
    • TS_CAL1, TS_CAL2:从芯片特定Flash地址读取到的校准值。
    • 关键点: 这个公式依赖一个假设——VDDA = 3.3V!如果实际VDDA不是精确的3.3V,会导致计算误差。

使用步骤(基于工厂校准):

  1. 启用 ADC 和温度传感器通道:

    • 使用标准外设库(如HAL)或LL库初始化ADC。
    • 将ADC通道配置为连接内部温度传感器通道(通常是ADC通道16或18,查芯片Reference Manual)。确保采样时间足够长(推荐 >10 μs)。
  2. 读取工厂校准值:

    • 根据你的STM32型号,查找Datasheet中找到 TS_CAL1 和 TS_CAL2 的地址。
    • 在代码中定义指向这些地址的指针,并读取值。

    示例代码(伪代码,具体地址需替换):

    // 假设F4系列地址(务必替换成你芯片的实际地址!参考Datasheet)
    #define TEMP130_CAL_ADDR ((uint16_t*)0x1FFF7A2C) // TS_CAL1 (30°C) 地址
    #define TEMP110_CAL_ADDR ((uint16_t*)0x1FFF7A2E) // TS_CAL2 (110°C) 地址
    
    uint16_t TS_CAL1 = *TEMP130_CAL_ADDR;
    uint16_t TS_CAL2 = *TEMP110_CAL_ADDR;
    uint16_t T1 = 30; // 单位°C,查Datasheet确认
    uint16_t T2 = 110; // 单位°C,查Datasheet确认
  3. 测量温度传感器原始值:

    • 启动ADC转换读取温度传感器通道的原始数值 ( ADC_Value)。为了提高精度,建议进行多次采样取平均(例如16次或更多)。
  4. 计算温度:

    • 使用上面提供的线性公式(第二个常用变形)计算实际温度:
    float adc_value = ...; // 你的平均ADC原始值(12位或根据ADC分辨率转换)
    float temperature = T1 + ((adc_value - TS_CAL1) * (T2 - T1)) / (TS_CAL2 - TS_CAL1);

重要注意事项和校准技巧:

  1. VDDA 精度是最大误差来源: 工厂校准值是在 VDDA 精确等于 3.3V 下得到的。如果你的电路板上 VDDA 不是精确的3.3V (很常见,LDO都有精度误差,也可能随负载变化),计算出的温度会有显著偏差(每0.1V的VDDA偏差可能造成几摄氏度的温度误差)。

    • 解决方案 (强烈推荐): 同时测量一个连接到 VDDA 的精确基准电压源(或稳定的已知电压,如在板子上找测试点)的ADC值。例如测量连接到VDDA的 VREFINT (内部参考电压,通常有一个校准值 VREFINT_CAL 存储在Flash中):
      #define VREFINT_CAL_ADDR ((uint16_t*)0x1FFF7A2A) // F4示例,查你芯片的地址
      uint16_t VREFINT_CAL = *VREFINT_CAL_ADDR;
      float vdda_measured = (3.3f * VREFINT_CAL) / adc_value_vrefint; // VREFINT电压在数据手册给出(通常1.2V),这里假设VREFINT在VDDA=3.3V时对应的校准值是VREFINT_CAL

      然后用 vdda_measured修正读取到的温度传感器ADC原始值 ( adc_value_temp_raw),将其折算到 VDDA=3.3V 条件下的等效值:

      float adc_value_temp_corrected = (adc_value_temp_raw * vdda_measured) / 3.3f;

      最后,用 adc_value_temp_corrected 代替之前的 adc_value 代入温度计算公式。

  2. 精度限制: 即使使用了VDDA校准,内部温度传感器的精度通常也有限:

    • 典型精度:在数据手册 "Electrical Characteristics" -> "Operating conditions" -> "Embedded internal temperature sensor" 小节查看,通常是 ±1°C, ±2°C, 或者 ±4°C (例如@25°C到85°C范围内)。
    • 响应速度相对较慢。
    • 测量的是芯片内核温度,而不是环境温度。芯片功耗(运行速度和负载)会显著影响内核温度。更适合测量芯片本身温度变化趋势或作为粗略环境温度参考。
  3. 两点用户校准(提升精度): 如果需要更高精度:

    • 方法一: 在已知的两个精确温度点(例如冰水混合物0°C和室温25°C,需要精确温度计测量环境)下,测量对应的ADC原始值 ( ADCVAL_T1_actual, ADCVAL_T2_actual)。
    • 方法二: 在单点校准VDDA的基础上,在一个已知温度点(通常选室温附近)测量ADC值。然后计算一个偏移量或斜率修正系数。
    • 用这些 实测的 ADC值替代代码中的工厂校准值 TS_CAL1TS_CAL2 (或者仅使用实测值修正斜率/偏移)。这能更好地补偿你特定芯片和特定VDDA条件下的误差。
  4. 使用CubeMx (可选): 使用STM32CubeMX配置ADC通道和内部温度传感器非常方便。它会帮你生成基本的初始化代码。你仍然需要在用户代码中添加读取校准值、VDDA校准和温度计算的逻辑。

总结:

  1. 获取工厂预存的校准值 TS_CAL1TS_CAL2 (地址查Datasheet)。
  2. 配置并读取内部温度传感器的ADC值 (ADC_Value)。
  3. (关键) 校准实际 VDDA (推荐使用内部 VREFINT 及其校准值)。
  4. 用校准后的 VDDA 修正温度传感器ADC值 (折算到3.3V)。
  5. 使用线性公式结合校准值和修正后的ADC值计算温度。
  6. 理解其精度限制。如需更高精度,执行用户两点或单点校准。

务必查阅的资料:

如何校准温度传感器

校准温度传感器是确保其测量准确性的重要步骤。以下是一些常用的温度传感器校准

2024-11-22 09:36:09

如何使用外部温度传感器校准DS1862

本应用笔记介绍如何在内部校准DS1862的AUX2MON引脚,以便外部温度传感器驱动查找表(LUT)。本文还介绍了DS1862的辅助监视通道、设

2023-06-10 15:36:41

请问stm32f070内部温度传感器的精度是多少?

根据STM32F070系列数据表的第17页,我们可以看到它由内部温度传感器组成。据记载,通过

2023-01-13 09:06:02

AN3300 如何校准STM32L1xx的内部RC振荡器

AN3300 如何校准STM32L1xx的内部RC振荡器

资料下载 王越建 2022-11-24 08:34:39

AN5676 如何在 STM32U5 系列上校准内部 RC 振荡器

AN5676 如何在 STM32U5 系列上校准内部 RC 振荡器

资料下载 石飞鹏 2022-11-24 08:34:20

DB2577_STM32Cube的内部振荡器校准软件扩展

DB2577_STM32Cube的内部振荡器校准软件扩展

资料下载 刘伟 2022-11-23 20:29:54

AN4631_STM32L0系列MCU内部RC振荡器校准方法

AN4631_STM32L0系列MCU内部RC振荡器校准方法

资料下载 362163 2022-11-21 08:11:43

AN2868_STM32F10xx内部RC振荡器校准

AN2868_STM32F10xx内部RC振荡器校准

资料下载 佚名 2022-11-21 08:11:29

应用笔记|如何在 STM32U5 系列上校准内部 RC 振荡器

目录预览 0.前言 1.STM32U5 系统时钟 2.内部 RC 振荡器校准 3.内部

2022-12-12 21:35:06

STM32内部温度传感器简介

实验概述文章目录实验概述一.概述二.实验平台(1)硬件平台ALIENTEK MiniSTM32 开发板(2)软件平台三.实验过程1.STM32 内部

2021-12-17 06:21:09

STM32内部温度传感器概述

记录一下,方便以后翻阅~主要内容:1)STM32内部温度传感器概述;2)相关实验代码解读。实验功能:系统启动后,实时将

2021-12-10 06:11:04

STM32内部温度传感器简介

STM32 内部温度传感器1、 STM32

2021-12-06 06:40:31

STM32内部温度传感器简介

声明:此文件参考原创博客支持原创。1.简介:STM32有一个内部的温度传感器,可以用来测量CPU及周围的

2021-08-12 07:32:00

STM32内部温度传感器

实验目的STM32内部集成了一个温度传感器,可以用来测量芯片的温度,本章

2021-08-12 06:40:58

STM32内部温度传感器参数

STM32内部温度传感器概要STM32

2021-02-02 07:32:44
7天热门专题 换一换
相关标签