GD32F470 ADC抖动

[复制链接]
 楼主| Harley123 发表于 2025-3-20 15:46 | 显示全部楼层 |阅读模式
我使用的是GD32F470VG的MCU
我使用TIM1作为DAC和ADC的触发源,配置了DAC,ADC的DMA,
同时还有另一个TIM13作为系统时基
现在有一个问题 当我开启TIM13的时候 ADC采集回的波形会有抖动
9261067dbc759cdd99.png
当我关闭TIM13的时候 采集的波形很好
9262467dbc7ad5e214.png
请问下这是什么原因导致的


LcwSwust 发表于 2025-3-20 16:20 | 显示全部楼层
这波形是DMA开着的时候读出的,还是DMA停止时读出?
TIM13干了啥?
 楼主| Harley123 发表于 2025-3-20 16:53 | 显示全部楼层
LcwSwust 发表于 2025-3-20 16:20
这波形是DMA开着的时候读出的,还是DMA停止时读出?
TIM13干了啥?

DMA停止后通过串口打出来的

因为使用了freertos,所以用TIM13作为时基
只要打开中断就会有抖动,即使中断函数中啥也没操作
不开中断就不会有。
FranklinUNK 发表于 2025-3-20 21:48 来自手机 | 显示全部楼层
有干扰吗?
xionghaoyun 发表于 2025-3-21 08:51 | 显示全部楼层
是不是优先级问题=被TIM13打断了
 楼主| Harley123 发表于 2025-3-21 09:59 | 显示全部楼层
我把TIM13的优先级设置为最低了
LcwSwust 发表于 2025-3-21 10:00 | 显示全部楼层
本帖最后由 LcwSwust 于 2025-3-21 10:01 编辑
Harley123 发表于 2025-3-20 16:53
DMA停止后通过串口打出来的

因为使用了freertos,所以用TIM13作为时基

两个波形的周期看着不一样,确定是同样的条件?
采样率多少?信号频率多少?图中每格有多少个采样点?
“抖动”很有规律,看它周期是多少?是否和程序中某个周期吻合。

DMA是循环模式连续采集吗?确定程序读取数据不会遗漏?不会被新的数据覆盖?
 楼主| Harley123 发表于 2025-3-21 10:02 | 显示全部楼层
当我改变TIM13的频率,每次抖动的间隔也会随之改变
 楼主| Harley123 发表于 2025-3-21 10:09 | 显示全部楼层
本帖最后由 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:28 | 显示全部楼层
本帖最后由 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相关的,检查一下看是否有相应的处理。
 楼主| Harley123 发表于 2025-3-21 11:02 | 显示全部楼层
波形4.5K
TIM13设置1ms 抖动4个波
这是2ms 抖动8个波
TIM13的频率越低  抖动频率越低
抖动随TIM变化
probedog 发表于 2025-3-21 11:10 | 显示全部楼层
时钟源冲突?检查TIM13和ADC的时钟配置,是否共用时钟源。
玄德 发表于 2025-3-21 12:03 | 显示全部楼层

TIM13 干扰模拟供电,或者干扰参考源了?


 楼主| Harley123 发表于 2025-3-21 13:08 | 显示全部楼层
玄德 发表于 2025-3-21 12:03
TIM13 干扰模拟供电,或者干扰参考源了?

我换了其他TIMER 也会有这种情况
stormwind123 发表于 2025-3-21 13:09 | 显示全部楼层
看看是否存在电源噪声干扰。TIM13的开关动作可能通过电源耦合引入噪声,影响ADC的基准电压或输入信号。
LcwSwust 发表于 2025-3-21 14:01 | 显示全部楼层
Harley123 发表于 2025-3-21 11:02
波形4.5K
TIM13设置1ms 抖动4个波
这是2ms 抖动8个波

哦,看来抖动就是和TIM13同频,你看看TIM13中断后你做了啥?是不是在这时去读的波形?
有没有与TIM13中断相关的代码?比如延时?
有没有读ADC数据的代码?都放上来看看。
laocuo1142 发表于 2025-3-21 16:20 | 显示全部楼层
TIM13的中断服务程序可能打断ADC的采样过程,导致数据不稳定。
 楼主| Harley123 发表于 2025-3-21 16:28 | 显示全部楼层
  1. void TIMER7_TRG_CMT_TIMER13_IRQHandler(void)
  2. {
  3.     if (timer_interrupt_flag_get(HAL_TIM, TIMER_INT_FLAG_UP) == SET)
  4.     {
  5.         timer_interrupt_flag_clear(HAL_TIM, TIMER_INT_FLAG_UP);
  6.     }
  7. }


现在我TIM中断里是空跑的 但这也会有抖动
玄德 发表于 2025-3-21 16:48 | 显示全部楼层

这种情况,恐怕官方客服都难以回答。



flycamelaaa 发表于 2025-3-21 22:00 | 显示全部楼层
检查TIM13中断优先级,降低其优先级或暂时禁用中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部