Dongy07 发表于 2025-2-19 15:44

使用ADC采集的数据,出现误差的原因

本帖最后由 Dongy07 于 2025-2-19 17:45 编辑

开发板使用的是GD32H757J-START,使用ADC2连续转换一个通道,采样率为4.7Msps,分别采样50khz、100khz、200khz、300khz、400khz、500khz,总是在某些地方出现误差,问题出现在哪里?


以下是ADC配置代码
void adc_config(void)
{
    /* 复位ADC */
    adc_deinit(ADC2);
       
    /* 配置ADC时钟 */
    adc_clock_config(ADC2, ADC_CLK_SYNC_HCLK_DIV4);
       
    /* 使能ADC连续转换模式 */
    adc_special_function_config(ADC2, ADC_CONTINUOUS_MODE, ENABLE);
       
    /* 禁用ADC扫描模式 */
    adc_special_function_config(ADC2, ADC_SCAN_MODE, DISABLE);
       
    /* 配置ADC分辨率 */
    adc_resolution_config(ADC2, ADC_RESOLUTION_12B);
       
    /* 配置ADC数据对齐方式 */
    adc_data_alignment_config(ADC2, ADC_DATAALIGN_RIGHT);
               
                /* 配置ADC通道长度 */
    adc_channel_length_config(ADC2, ADC_REGULAR_CHANNEL,1);
       

    /* 配置ADC常规通道 */
    adc_regular_channel_config(ADC2, 0, ADC_CHANNEL_1, 7);// 配置通道0为ADC_CHANNEL_1

    /* 配置ADC触发方式 */
    adc_external_trigger_config(ADC2, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);

    /* 使能ADC DMA功能 */
    adc_dma_request_after_last_enable(ADC2);
    adc_dma_mode_enable(ADC2);

    /* 使能ADC */
    adc_enable(ADC2);
    /* 等待ADC稳定 */
    delay_1ms(1);
    /* 配置ADC校准模式 */
    adc_calibration_mode_config(ADC2, ADC_CALIBRATION_OFFSET);
    /* 配置ADC校准次数 */
    adc_calibration_number(ADC2, ADC_CALIBRATION_NUM1);
    /* 使能ADC校准 */
    adc_calibration_enable(ADC2);

    /* 使能ADC软件触发 */
    adc_software_trigger_enable(ADC2, ADC_REGULAR_CHANNEL);
}



yangxiaor520 发表于 2025-2-19 19:55

第一确定硬件上输入信号是不是本身就不稳定

Dongy07 发表于 2025-2-19 23:03

本帖最后由 Dongy07 于 2025-2-19 23:07 编辑

yangxiaor520 发表于 2025-2-19 19:55
第一确定硬件上输入信号是不是本身就不稳定
输入信号是信号发生器输出的,示波器观察是稳定的,
对同一频率正弦波进行采样,出现的误差也不一样,

file:///C:/Users/DY/Desktop/300khz-3.41Msps.png

xionghaoyun 发表于 2025-2-20 10:54

用例程也这样?

大大财迷 发表于 2025-2-20 12:56

楼主,这个时序图是用什么软件生成的?

GlenX 发表于 2025-2-20 19:41

从偶然性上看,不像试干扰,更像试软件冲突,导致部分点丢失,而不是某个点丢失或随机干扰。
重点检查中断的读数、通讯对采集的软件或硬件冲突,肯定不是错误,是时序上的问题,或者没有考虑通讯对采集的影响。

Dongy07 发表于 2025-2-21 13:13

xionghaoyun 发表于 2025-2-20 10:54
用例程也这样?

代码是在例程的基础上修改的,

Dongy07 发表于 2025-2-21 13:14

大大财迷 发表于 2025-2-20 12:56
楼主,这个时序图是用什么软件生成的?

从keilv5把数据导出之后,在matalab里画出来的

Dongy07 发表于 2025-2-21 13:17

GlenX 发表于 2025-2-20 19:41
从偶然性上看,不像试干扰,更像试软件冲突,导致部分点丢失,而不是某个点丢失或随机干扰。
重点检查中断 ...

会不会是ADC软件触发导致的?
页: [1]
查看完整版本: 使用ADC采集的数据,出现误差的原因