关于温度转换函数的疑问

int ADC_GetCurrentTS( UINT16 ts_v )

{

  UINT32 C25_Data[2];

  int  cal;


  FLASH_EEPROM_CMD( CMD_GET_ROM_INFO, ROM_CFG_TMP_25C, C25_Data, 0 );

  //C25_Data[0]=2820;

  cal = ( ( (ts_v * 1050) + 2048 ) >> 12 ) + ( 1050 >> 1 );

  cal = 25 + ((cal - (int)(C25_Data[0]&0xFFFF))*10/14);

  return (  cal );

}


  1. 从EEPROM种获取的数据是一个什么值,是出厂标定的值?用户需要处理吗?

2.我直接按照函数,在常温下温度是3度。  和实际不符。 

3. 我强制将常温下的ADC值赋值给C25_Data[0],发现最终温度-1000多,  和不正常。

 


首先,,

CH573/571 系列芯片内部温度传感器的输出形式,是电压数据, 不同的温度值,其电压输出不同,

这一行代码,就是得到电压值, 单位是mV, 可以对下手册的adc 获取电压值的代码

  cal = ( ( (ts_v * 1050) + 2048 ) >> 12 ) + ( 1050 >> 1 );


芯片在生产时候并没有进行严格的 像做专业sensor一样去校准,而只是根据当时生产的环境,再按照斜率,换算成对应25度校准值写了进去,

EEPROM 里面写的是对应的25度时候, 内部温度传感器测量出来的电压值,单位是mV


其内部传感器的大致曲线是:


Δtemp (℃)= -Δvoltage(mV)*10/14


于是有了上面的函数.


意思理解。

我一个新的芯片,通过函数获取到的常温温度只有4度。

然后我增加一个21度的偏移量。在25度的时候。


然后,温度下降到0度,芯片测量值13度


出厂的标定会差这么多吗?


我发了规律,但是没有找到为什么?

DEMO中测量温度开启了2倍的增益,并且用了 cal = ( ( (ts_v * 1050) + 2048 ) >> 12 ) + ( 1050 >> 1 );这个公式,发现实际温度和温升只有一半。

采用了公式,(ADC/2048)*Vref,去计算,温度正确。

但是程序中初始化:

已经开启了2倍增益。

void ADC_InterTSSampInit( void )

{

R8_TKEY_CFG &= ~RB_TKEY_PWR_ON;

    R8_TEM_SENSOR = RB_TEM_SEN_PWR_ON;

    R8_ADC_CHANNEL = CH_INTE_VTEMP;

    R8_ADC_CFG = RB_ADC_POWER_ON\

                |RB_ADC_DIFF_EN             \

                |( 3<<4 );

}


在ADC_DataCalib_Rough函数中,有配置增益,但最后是恢复的。


这会是哪里的问题?


同问, 请问楼主目前有解决吗?


只有登录才能回复,可以选择微信账号登录