打印

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

[复制链接]
477|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Dongy07|  楼主 | 2025-2-19 15:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 | 只看该作者
用例程也这样?

使用特权

评论回复
5
大大财迷| | 2025-2-20 12:56 | 只看该作者
楼主,这个时序图是用什么软件生成的?

使用特权

评论回复
6
GlenX| | 2025-2-20 19:41 | 只看该作者
从偶然性上看,不像试干扰,更像试软件冲突,导致部分点丢失,而不是某个点丢失或随机干扰。
重点检查中断的读数、通讯对采集的软件或硬件冲突,肯定不是错误,是时序上的问题,或者没有考虑通讯对采集的影响。

使用特权

评论回复
7
Dongy07|  楼主 | 2025-2-21 13:13 | 只看该作者

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

使用特权

评论回复
8
Dongy07|  楼主 | 2025-2-21 13:14 | 只看该作者
大大财迷 发表于 2025-2-20 12:56
楼主,这个时序图是用什么软件生成的?

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

使用特权

评论回复
9
Dongy07|  楼主 | 2025-2-21 13:17 | 只看该作者
GlenX 发表于 2025-2-20 19:41
从偶然性上看,不像试干扰,更像试软件冲突,导致部分点丢失,而不是某个点丢失或随机干扰。
重点检查中断 ...

会不会是ADC软件触发导致的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

14

帖子

0

粉丝