概述
前言:
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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复