CH592F 测量内部VBAT通道,电压不准。

uint16_t HAL_GetVbatt(void)

{

    uint8_t sensor, channel, config, tkey_cfg;

    uint16_t adc_data;


    tkey_cfg = R8_TKEY_CFG;

    sensor = R8_TEM_SENSOR;

    channel = R8_ADC_CHANNEL;

    config = R8_ADC_CFG;

    ADC_InterBATSampInit();

    R8_ADC_CONVERT |= RB_ADC_START;

    while (R8_ADC_CONVERT & RB_ADC_START)

        ;

    adc_data = R16_ADC_DATA;

    R8_TEM_SENSOR = sensor;

    R8_ADC_CHANNEL = channel;

    R8_ADC_CFG = config;

    R8_TKEY_CFG = tkey_cfg;


    return (adc_data+ADC_DataCalib_Rough());

}

或者用系统自带的:

        ADC_InterBATSampInit();


        PRINT("%d\r\n",ADC_ExcutSingleConver());


公式:(ADC/512-3)*Vref

3.6V供电:adc值是3300    公式计算电压:6.807V

3.3V供电:adc值是3156    公式计算电压:6.510V

3.0V供电:adc值是3009    公式计算电压:6.207V

2.9V供电:adc值是2961    公式计算电压:6.108V

2.5V供电:adc值是2761    公式计算电压:5.696V


无法对的上,也无法找到内部VBAT通道和实际供电电压的线性关系,请问正确的操作是?


您好,这边计算是按照加减乘除的运算顺序,先除后减。


哈哈。谢谢。。我看错了,果然正常了。。。

另外,请教下,内部VBAT通道,需要执行ADC校准程序吗?


需要的,加上粗调值的时候需注意边界值的处理,如小于0则为0,大于4095为4095.


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