打印

关于内部传感器的问题

[复制链接]
4031|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fqingy2003|  楼主 | 2008-12-1 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从datasheet上可以看到Vrefint的电压在1.2V左右,可是我现在采样到的数据是2080左右,如果按照这个推算,Vref1.2*4096/2080 =2.35V,不知道我的这个推算对不?
一个关键问题,使用其内部传感器测量CPU温度,公式中的Vdd,为什么会是Vdd,而不是Vref,为什么datasheet上没有其回路图,4.3mV/℃按照这个标准0~100℃电压变化只有0.43V,如果按照STM的公式进行计算,带入不同的值,计算到的数据误差比较大,我想这个公式是不是可以简化,就像datasheet上讲串口波特率的事情一样,说什么12整数,4位小数,算了半天还要除以16,其实寄存器的值就是系统时钟除以波特率,费劲!!!
我想这个测量值肯定跟Vdd、V25没有什么关系
沙发
香水城| | 2008-12-1 22:26 | 只看该作者

读取STM32内部温度传感器

首先,关于VREFINT的推算是正确的。

关于内部温度传感器的计算公式,请看下图是STM32技术参考手册中的有关部分,公式中没有你说的Vdd。

温度转换是一条直线,Avg_Slope给出了这条线的斜率,V25给出了这条线的一个点,这样才能唯一确定这条线。如果没有V25这个点,光有斜率时不足以定义一条直线的。

使用特权

评论回复
板凳
walnutcy| | 2008-12-1 22:53 | 只看该作者

看看这个链接,源码已经提供了,呵呵,

使用特权

评论回复
地板
21ele| | 2008-12-1 23:18 | 只看该作者

仅仅注意公式正确是不够的,整数运算,要特别注意有效数

void ADC_Temperature_Read(void)
{
    
#define Vdd 34600
#define V25 14300
#define Avg_Slope 43
#define Vdd_convert_value 0xFFF    

    vu32 ADC_ConvertedValue;
    vu32 Vsense;
    vs32 Vtemperature;

    ADC_ConvertedValue = ADC1->DR & Vdd_convert_value;
         Vsense = ADC_ConvertedValue * Vdd / Vdd_convert_value; 
    Vtemperature = V25-Vsense;    
         D_Temperature = (Vtemperature*100/Avg_Slope) + 2500; 
}

使用特权

评论回复
5
ijk| | 2008-12-2 09:43 | 只看该作者

有问题

有问题,Vref1.2*4096/2080 =2.35V是不对的。Vref1.2*2080/4096差不多

使用特权

评论回复
6
香水城| | 2008-12-2 13:27 | 只看该作者

哈哈,我太笨了,6楼才是正确的

使用特权

评论回复
7
fqingy2003|  楼主 | 2008-12-2 16:59 | 只看该作者

版主,看看5楼的回复

#define Vdd 34600,这个定义可以推算Vsense,3.3V电压是有很大偏差的,
如果按照这个电压来计算的话,误差势必会超出datasheet上的数据范围的,
我想测量温度时,如果将Vref传入温度传感器,如果Vref变化的话,ADC16采样到数据将是不变的,可是我不知道是否是将温度传感器和一个电阻串联后施加一个Vref电压,要是这样,就与参考电压无关了,但根据公式,好像问题跟Vref有关联

使用特权

评论回复
8
21ele| | 2008-12-3 08:22 | 只看该作者

#define Vdd 34600 因该是330000

但是我实测我的3.3V电压不准,偏高,所以我用的是实测电压值。否则测量结果偏差较大。

使用特权

评论回复
9
mylovetus| | 2008-12-5 17:24 | 只看该作者

xxx

使用特权

评论回复
10
amingriyue| | 2008-12-7 21:51 | 只看该作者

Vref

我觉得可以先读Vref,再算温度需要的电压,然后再带入公式

使用特权

评论回复
11
fqingy2003|  楼主 | 2008-12-8 13:41 | 只看该作者

请大家各抒己见

我说的Vref不是内部的Vref,而是参考电压引脚的Vref,也就是64脚或更小芯片的Vdda,也就是通常说的3.3V电压,如果这个变化,那么STM32提供的公式就会误差很大,因为该芯片的AD工作电压为2.4V~3.6V,这工作电压我们可以要求电压电压不一定就是某个特定的值,肯定对于相同产品的不同设备,这个电压肯定各不相同,一个3.2V,3.3V,有的甚至3.4V,那么这个温度偏差是很大的,我们不可能对每个设备定义一次#define Vdd 34600,这样就比较麻烦了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

124

帖子

0

粉丝