Other Parts Discussed in Thread: CC2530
请问如何将CC2530片内温度传感器的测量值转换为实际值?手册上说温度系数是4.5,25摄氏度时测量值是1480;而TI的例程中却没用1480这个值,温度系数用的是4。为什么呢?
一般情况下,在室内,CC2530片内温度传感器测量的温度在什么范围才是正常的呢?
唉,网上各种说法,怎么就没有一个权威的呢?TI公司也没说清楚,难道这个片内温度传感器是个摆设?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: CC2530
请问如何将CC2530片内温度传感器的测量值转换为实际值?手册上说温度系数是4.5,25摄氏度时测量值是1480;而TI的例程中却没用1480这个值,温度系数用的是4。为什么呢?
一般情况下,在室内,CC2530片内温度传感器测量的温度在什么范围才是正常的呢?
唉,网上各种说法,怎么就没有一个权威的呢?TI公司也没说清楚,难道这个片内温度传感器是个摆设?
demosensor.c中
/* Assume ADC = 1480 at 25C and ADC = 4/C */
#define VOLTAGE_AT_TEMP_25 1480
#define TEMP_COEFFICIENT 4
// Calibrate for 22C the first time the temp sensor is read.
// This will assume that the demo is started up in temperature of 22C
if(bCalibrate) {
voltageAtTemp22=value;
bCalibrate=FALSE;
}
temp = 22 + ( (value - voltageAtTemp22) / TEMP_COEFFICIENT );
这个假设的22是室温么?如果是片内温度,难道说片内温度通常都是22左右?
根据注释和temp的计算可知,计算是以22C为基础零点,每增加1C数字量增4
而程序
if(bCalibrate) {
voltageAtTemp22=value;
bCalibrate=FALSE;
}
则是以第一次测量的数字量为22C的数字量。我就觉得这有问题呀,怎么保证第一次测量的温度就一定是22C,而且既然是作为计算基础,那也应该是用手册给的值呀,即这段程序不要,初始设置voltageAtTemp22=VOLTAGE_AT_TEMP_25-(25-22)*TEMP_COEFFICIENT,这样bCalibrate也就不需要了
不过,从这里来看,我本来还以为这个温度temp必须大于22C,所以才以22C为基础零点计算,但是后面又有段程序,你没有贴出来
if( temp >= 100)
{
return 100;
}
else if (temp <= 0) {
return 0;
}
这里又说明temp是可以有22C以下的呀,也就是说value - voltageAtTemp22可以是负数,那么就没有基础零点这一说法了呀,完全可以用手册给的25C来计算呀,也就是说不用设voltageAtTemp22,直接求temp = 25 + ( (value - VOLTAGE_AT_TEMP_25) / TEMP_COEFFICIENT )
不明白为什么程序要专门用22C