STM32F429 ADC实验四:cubemx实现片内温度采集(DMA)

STM32F429有一个内部的温度传感器,可以用来测量CPU及其周围的温度。该温度传感器在内部和ADC1_IN16输入通道连接,此通道把传感器输出的电压转换成数字值。支持的温度范围为-40~125℃,精度为±1.5℃左右。

其实实现起来也很简单,就是温度传感器与ADC的温度通道连接,比如ADC1的通道16相连,通道16的电压值就是温度传感器的电压值,我们就是正常读出通道16的电压值,然后根据公式转换成温度值来用即可。

cubemx配置:

然后我们还用DMA的方式获取电压值

//main.c
uint16_t 	_u16ADC_Value[150];
uint32_t 	_u32Value1;
uint32_t 	_u32Value2;
uint32_t 	_u32Value3;
/* USER CODE END 0 */

int main(void)
{
    MX_ADC1_Init();
    HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&_u16ADC_Value, 150);
    while (1)
    {
//	LED_Twinkle(1);
	                                            RTC_GetRealTime();									//系统时间的更新										
	//处理ADC数据
	for(i=0,_u32Value1=0,_u32Value2=0,_u32Value3=0;i < 150;)
	{
		_u32Value1 += _u16ADC_Value[i++];
		_u32Value2 += _u16ADC_Value[i++];
		_u32Value3 += _u16ADC_Value[i++];
	}
	_u32Value1 /= 50;
	_u32Value2 /= 50;
	_u32Value3 /= 50;
	sprintf((char*)InLtdcBuff1, "ADC1_CH4: %1.2f V\r\n", _u32Value1*3.3f/4096);  
//	sprintf((char*)InLtdcBuff2, "ADC1_CH5: %1.2f V\r\n", _u32Value2*3.3f/4096);
	//计算温度公式:T(℃)=(Vsense-V25)/Avg_Slope+25 
	//Vsense是温度通道测得的电压值,V25是25℃时的典型电压值(0.76),Avg_Slope是温度与Vsense曲线的平均斜率(典型值为2.5mv/℃)
	sprintf((char*)InLtdcBuff2, "ADC1_TEM: %1.2f C\r\n", (_u32Value3*3.3f/4096-0.76)/0.0025+25);	
	LTDC_Refresh(InLtdcBuff1, InLtdcBuff2);				//屏幕的刷新
        //喂狗
	HAL_IWDG_Refresh(&hiwdg);
	delay_ms(100);
    }
}

//计算温度公式:T(℃)=(Vsense-V25)/Avg_Slope+25 
//Vsense是温度通道测得的电压值,V25是25℃时的典型电压值(0.76),Avg_Slope是温度与Vsense曲线的平均斜率(典型值为2.5mv/℃)

效果如下图:

总结:ADC学明白,温度传感器就很容易了。芯片温度会比环境温度高一些。

发布了26 篇原创文章 · 获赞 0 · 访问量 2988

猜你喜欢

转载自blog.csdn.net/nianzhu2937/article/details/103780154