如何在STM32 L496ZGT4中校准内部温度传感器值

问题描述

我正在使用 STM32 L946ZGT4 创建简单的项目。我想使用内部温度传感器。我配置了 ADC,我可以从中获得价值。我的问题是校准这个传感器。使用参考手册和数据表说明,我的最终值以摄氏度为单位等于 -17。 ADC 值约为 800。这是我的传感器校准代码

    #include "Myfun.h"
    #include "HD44780.h"
    
    extern uint16_t tab[100];
    char buf[16];
    float sum,avg;
    
    #define TS_CAL1((uint16_t*)((uint32_t) 0x1FFF75A8))
    #define TS_CAL2((uint16_t*)((uint32_t) 0x1FFF75CA))
    #define TS_CAL1_TEMP 30.0 f
    #define TS_CAL2_TEMP 130.0 f
    
    int32_t temperature;
    
    int main(void)
    {
        SysTick_Config(4000000 / 1000);
        LCD_Init();
        Led_Conf();
        ADC_Conf_DMA_TempSensor();
        while (1)
        {
            sum = 0;
            for (int i = 0; i < 100;)
            {
                sum = sum + tab[i];
                ++i;
            }
            avg = sum / 100;    // here is my value from ADC
            temperature = (int32_t)(((TS_CAL2_TEMP - TS_CAL1_TEMP) / ((float)(*TS_CAL2) - (float)(*TS_CAL1))) *
                (avg - (float)(*TS_CAL1)) + 30.0);
            sprintf(buf,"%d C",temperature);
    
            LCD_Clear();
            LCD_WriteText(buf);
    
            delay_ms(60);
        }
    }

解决方法

您必须通过以下方式将 ADC 读数转换为伏特:

ADC_value / ADC_maxvalue * ADC_refvoltage

与 ADC_value:你从 ADC 得到的值 ADC_maxvalue: 2^12 = 4096,当你在12位模式下采样时 ADC_revoltage:3.3 伏,通常 - 除非您使用不同的参考电压

然后应用数据表中的公式,章节“电气特性”-->“工作条件”-->“温度传感器”,您可以在其中找到将电压转换为温度的偏移量和刻度(加上公式) ...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...