GD32F470 ADC抖动
我使用的是GD32F470VG的MCU我使用TIM1作为DAC和ADC的触发源,配置了DAC,ADC的DMA,
同时还有另一个TIM13作为系统时基
现在有一个问题 当我开启TIM13的时候 ADC采集回的波形会有抖动
当我关闭TIM13的时候 采集的波形很好
请问下这是什么原因导致的
这波形是DMA开着的时候读出的,还是DMA停止时读出?
TIM13干了啥? LcwSwust 发表于 2025-3-20 16:20
这波形是DMA开着的时候读出的,还是DMA停止时读出?
TIM13干了啥?
DMA停止后通过串口打出来的
因为使用了freertos,所以用TIM13作为时基
只要打开中断就会有抖动,即使中断函数中啥也没操作
不开中断就不会有。 有干扰吗? 是不是优先级问题=被TIM13打断了 我把TIM13的优先级设置为最低了
本帖最后由 LcwSwust 于 2025-3-21 10:01 编辑
Harley123 发表于 2025-3-20 16:53
DMA停止后通过串口打出来的
因为使用了freertos,所以用TIM13作为时基
两个波形的周期看着不一样,确定是同样的条件?
采样率多少?信号频率多少?图中每格有多少个采样点?
“抖动”很有规律,看它周期是多少?是否和程序中某个周期吻合。
DMA是循环模式连续采集吗?确定程序读取数据不会遗漏?不会被新的数据覆盖?
当我改变TIM13的频率,每次抖动的间隔也会随之改变 本帖最后由 Harley123 于 2025-3-21 10:46 编辑
LcwSwust 发表于 2025-3-21 10:00
两个波形的周期看着不一样,确定是同样的条件?
采样率多少?信号频率多少?图中每格有多少个采样点?
“ ...
两个波频率是一样的
我TIM1同时作为DAC和ADC的触发源 TIM1频率0.288M 波形4.5K 每个波采64个点
TIM13频率设置1毫秒进一次中断 每个抖动间隔差不多4个波形
TIM13设置2毫秒进一次中断每个抖动间隔差不多8个波形
TIM13的频率越低抖动频率越低
波形4.5K 打错了
本帖最后由 LcwSwust 于 2025-3-21 10:31 编辑
Harley123 发表于 2025-3-21 10:09
两个波频率是一样的
我TIM1同时作为DAC和ADC的触发源 TIM1频率0.288M 波形45K 每个波采64个点
TIM13频率 ...
0.288M的采样率,45K的信号,288/45=6.4,也就是一个信号周期采集6.4个点,不是64个点,你再算算?
抖动似乎与TIM13是同频的,你往这个方向查一下可能的原因。嗯,不对,不像是同频,TIM13频率越高,抖动出现的频率越低?
DMA循环模式,在读取数据时要注意起始位置不是从0开始,而是与CNT相关的,检查一下看是否有相应的处理。
波形4.5K
TIM13设置1ms 抖动4个波
这是2ms 抖动8个波
TIM13的频率越低抖动频率越低
抖动随TIM变化
时钟源冲突?检查TIM13和ADC的时钟配置,是否共用时钟源。
TIM13 干扰模拟供电,或者干扰参考源了?
玄德 发表于 2025-3-21 12:03
TIM13 干扰模拟供电,或者干扰参考源了?
我换了其他TIMER 也会有这种情况
看看是否存在电源噪声干扰。TIM13的开关动作可能通过电源耦合引入噪声,影响ADC的基准电压或输入信号。 Harley123 发表于 2025-3-21 11:02
波形4.5K
TIM13设置1ms 抖动4个波
这是2ms 抖动8个波
哦,看来抖动就是和TIM13同频,你看看TIM13中断后你做了啥?是不是在这时去读的波形?
有没有与TIM13中断相关的代码?比如延时?
有没有读ADC数据的代码?都放上来看看。 TIM13的中断服务程序可能打断ADC的采样过程,导致数据不稳定。 void TIMER7_TRG_CMT_TIMER13_IRQHandler(void)
{
if (timer_interrupt_flag_get(HAL_TIM, TIMER_INT_FLAG_UP) == SET)
{
timer_interrupt_flag_clear(HAL_TIM, TIMER_INT_FLAG_UP);
}
}
现在我TIM中断里是空跑的 但这也会有抖动
这种情况,恐怕官方客服都难以回答。
检查TIM13中断优先级,降低其优先级或暂时禁用中断。
页:
[1]
2