WCH沁恒单片机
直播中

哼小曲

13年用户 1215经验值
私信 关注
[问答]

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的值。





回帖(1)

刘京

2022-10-17 10:57:03
这里可以查看一下:
举报

更多回帖

发帖
×
20
完善资料,
赚取积分