宝箱怪 发表于 2024-3-28 16:53

有遇到过GD32的adc开启校准功能后每次上电数据反而有波动的情况吗?

void adc_config(void)
{
    adc_rcu_config();
    adc_gpio_config();
    /* ADC mode config */
    adc_mode_config(ADC_MODE_FREE);
    /* ADC data alignment config */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
    /* ADC channel length config */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1U);

    /* ADC trigger config */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
    /* ADC external trigger config */
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);

    adc_tempsensor_vrefint_enable();

    /* enable ADC interface */
    adc_enable(ADC0);
    delay_1ms(1U);

    /* ADC calibration and reset calibration */
    //adc_calibration_enable(ADC0);
}


uint16_t adc_channel_sample(uint8_t channel)
{
    /* ADC regular channel config */
    adc_regular_channel_config(ADC0, 0U, channel, ADC_SAMPLETIME_71POINT5);
    /* ADC software trigger enable */
    adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

    /* wait the end of conversion flag */
    while (!adc_flag_get(ADC0, ADC_FLAG_EOC))
      ;
    /* clear the end of conversion flag */
    adc_flag_clear(ADC0, ADC_FLAG_EOC);
    /* return regular channel sample value */
    return (adc_regular_data_read(ADC0));
}

vref = 1200 * 4096 / getExternalChannel(ADC_CHANNEL_17);

每次都执行一下adc_config后再读取adc的值
不注释掉这行的结果
    //adc_calibration_enable(ADC0);
vref=2958.58
vref=2939.30
vref=2936.66
vref=2936.66
vref=2945.82
vref=2901.98
vref=2911.15
vref=2940.38
vref=2955.25
vref=2966.47
vref=2936.13
vref=2911.42


注释掉这行的结果
    //adc_calibration_enable(ADC0);
vref=2948.36
vref=2947.16
vref=2947.68
vref=2947.56
vref=2947.76
vref=2947.53
vref=2947.79
vref=2947.48
vref=2947.73


怎么不开校准数据还更稳定了。。。

flycamelaaa 发表于 2024-3-29 16:00

根据具体的应用场景和需求,选择适合的校准算法。有些算法可能对噪声更敏感,而有些则更适合在恶劣环境下工作。

probedog 发表于 2024-3-29 20:00

检查软件配置

Annie556 发表于 2024-4-18 10:31

在GD32的ADC中开启校准功能后,出现数据波动的情况可能是配置错了吧

Betty996 发表于 2024-4-18 11:35

ADC的精准度对电源稳定性要求较高,如果电源不稳定,可能导致ADC数据波动。

Carina卡 发表于 2024-4-18 12:41

正常来说ADC的参考电压如果不稳定,也会导致ADC数据波动。确保参考电压稳定并且符合ADC的要求

Estelle1999 发表于 2024-4-18 14:05

输入信号可能受到干扰,导致ADC数据波动。确保输入信号线路良好,避免受到干扰

Emily999 发表于 2024-4-18 15:10

在校准过程中,可能会产生干扰,影响ADC的正常工作。确保校准过程中尽量减少干扰

Charlotte夏 发表于 2024-4-18 16:23

校准功能需要正确的参数设置,包括校准时钟、校准精度等。如果校准参数设置不正确,可能导致数据波动

alxd 发表于 2024-4-19 06:42

你是不是超频了?MCU方面?

Allison8859 发表于 2024-4-19 08:13

一般情况可以换个外部基准电源,也许就好了

Betty1299 发表于 2024-4-19 10:08

你的使用环境是不是有干扰啊?

Carmen7 发表于 2024-4-19 11:26

有可能是芯片的ADC电源基准不好不稳定吧

zhengshuai888 发表于 2024-4-21 19:22

每次上电校准值有可能不同,用软件滤波处理一下。

lidi911 发表于 2024-4-22 08:51

校准后先不忙采样吧,或者软件滤波处理一下,把前面波动比较大的数据丢掉。

V853 发表于 2024-4-23 21:04

稳定的那个和实际数值一样吗?感觉不会这么稳才对。

键盘手没手 发表于 2024-5-31 23:26

本帖最后由 键盘手没手 于 2024-6-1 09:01 编辑

可以尝试调整校准算法或者参数以提高稳定性。

键盘手没手 发表于 2024-5-31 23:26

本帖最后由 键盘手没手 于 2024-6-1 09:02 编辑

V853 发表于 2024-4-23 21:04
稳定的那个和实际数值一样吗?感觉不会这么稳才对。
闭校准功能后,数据的波动可能变得更小,但并不意味着这些数据就是准确的或者和实际值完全一样

键盘手没手 发表于 2024-5-31 23:26

本帖最后由 键盘手没手 于 2024-6-1 09:02 编辑

Allison8859 发表于 2024-4-19 08:13
一般情况可以换个外部基准电源,也许就好了
更换外部基准电源是一种改善ADC性能的有效方法

wangtaohui 发表于 2024-7-31 22:18

ADC校准是确保ADC转换准确性的关键步骤,但在一些情况下,你可能会发现校准后的结果不如预期。
页: [1] 2 3 4 5
查看完整版本: 有遇到过GD32的adc开启校准功能后每次上电数据反而有波动的情况吗?