我是靠谱客的博主 无聊摩托,最近开发中收集的这篇文章主要介绍从零实现 ADC(四)、片内温度采集(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 Vrn", _u32Value1*3.3f/4096);  
//	sprintf((char*)InLtdcBuff2, "ADC1_CH5: %1.2f Vrn", _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 Crn", (_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学明白,温度传感器就很容易了。芯片温度会比环境温度高一些。

 

最后

以上就是无聊摩托为你收集整理的从零实现 ADC(四)、片内温度采集(DMA)的全部内容,希望文章能够帮你解决从零实现 ADC(四)、片内温度采集(DMA)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部