CH573F计算ADC粗调偏差值的问题
/*********************************************************************
 * @fn      ADC_DataCalib_Rough
 *
 * @brief   采样数据粗调,获取偏差值,必须先配置ADC后调用此函数获取校准值
 *
 * @param   none
 *
 * @return  偏差
 */
signed short ADC_DataCalib_Rough(void) // 采样数据粗调,获取偏差值
{
    uint16_t i;
    uint32_t sum = 0;
    uint8_t  ch = 0;   // 备份通道
    uint8_t  ctrl = 0; // 备份控制寄存器

    ch = R8_ADC_CHANNEL;
    ctrl = R8_ADC_CFG;

    R8_ADC_CFG = 0;
    ADC_ChannelCfg(7);                                          // 6/7/10/11 可选
    R8_ADC_CFG |= RB_ADC_OFS_TEST | RB_ADC_POWER_ON | (2 << 4); // 进入测试模式
    R8_ADC_CONVERT = RB_ADC_START;
    while(R8_ADC_CONVERT & RB_ADC_START);
    for(i = 0; i < 16; i++)
    {
        R8_ADC_CONVERT = RB_ADC_START;
        while(R8_ADC_CONVERT & RB_ADC_START);
        sum += (~R16_ADC_DATA) & RB_ADC_DATA;
    }
    sum = (sum + 8) >> 4;
    R8_ADC_CFG &= ~RB_ADC_OFS_TEST; // 关闭测试模式

    R8_ADC_CHANNEL = ch;
    R8_ADC_CFG = ctrl;
    return (2048 - sum);
}

以上是SDK包中计算ADC粗调偏差值的函数,不理解最后为什么要用2048去减sum的值。

这里可以查看一下:

image.png


12位的adc就算是按位取反,不应该是用4096去减么?为啥要用2048啊。


这里确认了一下,手册如上提供的是ADC进行配置,与这里的校准是无关系的。

这里进行校准时标准电压取的是中间值,4096/2固定就是2048,这个是设计的时候固定的。


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