使用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);
}
第一确定硬件上输入信号是不是本身就不稳定 本帖最后由 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
楼主,这个时序图是用什么软件生成的?
从keilv5把数据导出之后,在matalab里画出来的
GlenX 发表于 2025-2-20 19:41
从偶然性上看,不像试干扰,更像试软件冲突,导致部分点丢失,而不是某个点丢失或随机干扰。
重点检查中断 ...
会不会是ADC软件触发导致的?
页:
[1]