打印

哪位高手用过SD16测温,请指教

[复制链接]
3436|14
手机看帖
扫描二维码
随时随地手机跟帖
沙发
jakecumt| | 2009-4-16 23:35 | 只看该作者

我看的不知道对不对

标定Voffset,说起来也不复杂:

就是器件放置在某一环境温度下(比如室温),经过一段时间达到热平衡后,

记录室温T0 和 AD的读出值ADvalue0,注意 T0 的单位是K, T0(K) = T0(C) + 273.15

则有

Vsensor0 = Vref * (ADvalue0 - 32768) / 65535

T0 = (Vsensor0 - Voffset) / (1.32mV / K)

==> 

Voffset = Vsensor0 - T0 * 1.32

在实际的计算中,并不需要求出 Voffset,

因为测温时,通过 T0 和 Vsensor0 就可以得到结果了

T = (Vsensor - Voffset) / TempCo
= (Vsensor - Vsensor0 + T0 * TempCo) / TempCo
= (Vsensor - Vsensor0) / TempCo + T0

其中 TempCo 为温度系数,精度要求不高时取典型值1.32即可。


以下是对温度系数TempCo的分析:

假设在温度 T0 经过标定得到 Vsensor0,即有

T = (Vsensor - Vsensor0) / TempCo + T0

由TempCo的误差(dTempCo)产生的测温误差(dT)为

dT = - dTempCo * (Vsensor - Vsensor0) / (TempCo * TempCo)
= - (dTempCo / TempCo) * (T - T0)

==>

dT / (T - T0) = - dTempCo / TempCo

可以看出相对测温误差和温度系数相对偏差成正比。

比如,某种应用,需要MCU工作在 5 ~ 45C 之间,
Voffset 在 23C 经过标定,即 T0 = 23C

当 1.18 < TempCo < 1.46 即 TempCo = 1.32 +- 0.14 时, 

dT / (T - T0) = - dTempCo / TempCo = +-0.14 / 1.32 = +-10.6 %

将会产生最大 +-10.6% 的相对测温误差

在5C时, 测温误差 dT = +-10.6% * (5-23) = +-1.9C
在20C时,测温误差 dT = +-10.6% * (20-23) = +- 0.32C
在23C时,测温误差 dT = +-10.6% * (23-23) = +- 0C
在25C时,测温误差 dT = +-10.6% * (25-23) = +- 0.21C
在45C时,测温误差 dT = +-10.6% * (45-23) = +- 2.3C

如果上述误差是允许的,则不需要标定TempCo,否则就要标定。

标定TempCo,需要选择两个温度点 T0, T1, 

TempCo = (Vsensor1 - Vsensor0) / (T1 - T0)

使用特权

评论回复
板凳
equator|  楼主 | 2009-4-17 08:45 | 只看该作者

太复杂了,让我有点害怕

多谢指教!

使用特权

评论回复
地板
jakecumt| | 2009-4-17 15:43 | 只看该作者

客气 多多交流

使用特权

评论回复
5
linhai2009| | 2009-4-18 15:18 | 只看该作者

学习了

使用特权

评论回复
6
thf2008| | 2009-4-18 16:04 | 只看该作者

学习了

使用特权

评论回复
7
TI_CPIC| | 2009-4-21 16:20 | 只看该作者

Re:好像见过啊

TI网站上有关于使用SD16模块测量温度的应用实例。http://focus.ti.com/lit/an/slaa254/slaa254.pdf

使用特权

评论回复
8
equator|  楼主 | 2009-4-24 18:23 | 只看该作者

我知道方法了,多谢各位!

源程序如下:

#include  <msp430x42x.h>

static unsigned int ADCresult;
static unsigned long DegC = 0;
static unsigned long DegF = 0;

void main(void)
{
  volatile unsigned int i;                  // Use volatile to prevent removal
                                            // by compiler optimization

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL0 |= XCAP14PF;                     // Configure load caps
  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to
                                            // stabilize

  SD16CTL = SD16REFON+SD16SSEL0;            // 1.2V ref, SMCLK
  SD16CCTL2 |= SD16SNGL+SD16IE ;            // Single conv, enable interrupt
  SD16INCTL2 |= SD16INCH_6;                 // Select Channel A6
  for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup

  _EINT();                                  // Enable general interrupts

  while (1)
  {
    SD16CCTL2 |= SD16SC;                    // Set bit to start conversion
    _BIS_SR(LPM0_bits);                     // Enter LPM0

    DegC = ((unsigned long)ADCresult * 909)/65536 - 727;
                                            // Calculate degrees Celcius
    DegF = ((unsigned long)ADCresult * 1636)/65536 - 1276;
                                            // Calculate degrees Farenheit
    _NOP();                                 //SET BREAKPOINT HERE
  }
}

#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
  switch (SD16IV)
  {
  case 2:                                   // SD16MEM Overflow
    break;
  case 4:                                   // SD16MEM0 IFG
    break;
  case 6:                                   // SD16MEM1 IFG
    break;
  case 8:                                   // SD16MEM2 IFG
    ADCresult = SD16MEM2;                   // Save CH2 results (clears IFG)
    break;
  }

  _BIC_SR_IRQ(LPM0_bits);                   // Exit LPM0
}


可以计算出两种温度,DegC-摄氏度,DegF-华氏度

使用特权

评论回复
9
jakecumt| | 2009-4-24 23:10 | 只看该作者

比我的简单多拉

使用特权

评论回复
10
xrg0228| | 2009-12-16 09:26 | 只看该作者
因为要用到内置温度传感器,刚刚拜读过jakecumt 的帖子,很清楚,很详细,谢谢。

使用特权

评论回复
11
xrg0228| | 2009-12-16 13:10 | 只看该作者
请教jakecumt:Vsensor0 = Vref * (ADvalue0 - 32768) / 65535 是来自何方?谢谢。

使用特权

评论回复
12
thf2008| | 2009-12-16 16:12 | 只看该作者
哇,好多高手

使用特权

评论回复
13
五谷道场| | 2009-12-16 18:21 | 只看该作者
2楼兄弟好热情

使用特权

评论回复
14
linhai2009| | 2009-12-16 23:55 | 只看该作者
恩,我也发现了

使用特权

评论回复
15
3B1105| | 2010-8-23 23:18 | 只看该作者
学习了,高手呀

使用特权

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

本版积分规则

10

主题

57

帖子

0

粉丝