ADC内部温度监测不准确
int ADC_Temp(void)
{
    UINT8 i;
    UINT16 AdcTemp=0;
    ADC_InterTSSampInit();
    adclen = 0;
    PFIC_EnableIRQ( ADC_IRQn );
    ADC_StartUp();
    while( adclen < 12 );
    PFIC_DisableIRQ( ADC_IRQn );
    for( i = 2; i < 12; i++ )
        AdcTemp += abcBuff[i];
    AdcTemp /= 10;
    return ADC_GetCurrentTS(AdcTemp);
}
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void ADC_IRQHandler( void )         //adc中断服务程序
{
  if( ADC_GetITStatus() )
  {
    ADC_ClearITFlag();
    if( adclen < 12 )
    {
      abcBuff[adclen] = ADC_ReadConverValue();
      ADC_StartUp();                // 作用清除中断标志并开启新一轮采样
    }
    adclen++;
  }
}
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 );
  cal = ( ( (ts_v * 1050) + 2048 ) >> 12 ) + ( 1050 >> 1 );
  cal = 25 + ((cal - (int)(C25_Data[0]&0xFFFF))*10/14);
  return (  cal );
}

代码如上,温度测出来一直都是8、9度的样子,室温27度,按理说测出来不应该是27度左右吗,不知道是哪里的问题

因为芯片里面没有存温度校准的基值。
你可以这样用,比如当前室温30°,对应当前实测温度是8或者9,做个对应关系。
然后计算温度的变化量就可以了,
比如温度变化后,转换对应的温度是15,相当于+6度,那么实际温度是30+6=36°;
比如温度变化后,转换对应的温度是3,相当于-6度,那么实际温度是30-6=24°;

但是因为是内部温度,跟实际室温还是有差距的,手册上标的误差是±10°,这个要注意。


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