问题描述
我正在使用 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 伏,通常 - 除非您使用不同的参考电压
然后应用数据表中的公式,章节“电气特性”-->“工作条件”-->“温度传感器”,您可以在其中找到将电压转换为温度的偏移量和刻度(加上公式) ...