elephant00 发表于 2022-8-8 10:28

ADC to DAC时间久了时钟不同步的问题


我在用STM32L431做一个音频相关的项目。
我是用Timer6 设置32Khz ADC 采样,然后把采样点降采样到4Khz后,然后输出到DAC同步输出。DAC用Timer7设置 4Khz。
刚开始ADC数据和DAC数据是同步的,但是几分钟后ADC 进去的数据和DAC输出的指针就会不同步导致异常。
请问这种应用该怎么做?我知道如果用同一个Timer就没问题,但是由于ADC采样率和DAC的采样率要设不同的没法用一个timer吧?

LcwSwust 发表于 2022-8-8 11:34

数据经过了缓冲?可否根据缓冲区剩余数据量对Timer7的频率进行微调?
若想用同一个timer,可以软件分频得到不同的频率:
timer()
{
static int f;
ADC采样;
f++;
if(f>=3)//软件3分频
{
f=0;
DAC输出;
}
}

xch 发表于 2022-8-8 12:22

鬼知道你的32KHZ和4khz 是不是准确的。寄存器设置截图发上来看看

guojin0273 发表于 2022-8-8 15:40

如果是音频,这个理解不对, 如果ADC 以32K采样, 那么DAC须以32K,并且要同时钟 ,否则时钟异步了就有杂音, 如果DAC 以4K输出,那么32K就要转采样成4K,同样存在异步问题,杂音是不可避免的,只是看出现的时间不定而已

coody 发表于 2022-8-8 17:55

用同一个时钟就不会有问题。32K采样,每中断8次就送一次给DAC。

yjmwxwx 发表于 2022-8-8 18:41


32K定时器作为4K定时器的时钟这种不同步??

sleepybear 发表于 2022-8-9 08:53

必须用同源时钟,否则两个名义上都是4KHz的时钟,也存在微小的偏差,不同步,时间久了就会丢点或者重复采样,音频表现为爆音。
能想到两个方法:
1、要么想办法用同源时钟。
2、要么加采样率转换(本质上就是个滤波。)。音频不同于视频:视频可以通过队列控制,必要时丢帧或者重复帧来达到同步的目的。音频哪怕丢弃或者重复一个采样点,都能听到爆音,所以这种情况就得用采样率转换。

两只袜子 发表于 2022-8-9 10:00

你是说基于TIM6对ADC每秒完成32K的采样,然后将采样数据按照每秒提取4K个经DAC 输出,DAC的输出时序由TIM7来控制。请问从采样数据提取到DAC是通过DMA还是中断方式。另外TIM6 TIM7的时间参数是怎样配置的,二者有无保持同步关系。

jcky001 发表于 2022-8-10 10:00


采样点降采样到4Khz是什么意思?是每8个数据取一个出来给DAC么?

tpgf 发表于 2022-9-4 07:49

是不是晶振不准导致的呢

qcliu 发表于 2022-9-4 07:56

大概需要多久了就变的不准了啊

drer 发表于 2022-9-4 08:27

大概能相差多少呢

coshi 发表于 2022-9-4 08:37

二者的时钟源要用一样的

kxsi 发表于 2022-9-4 08:43

DAC和ADC的时钟是如何配置的呢

wiba 发表于 2022-9-4 08:53

二者需要协同合作吗

地下縱情搖擺 发表于 2022-9-25 11:45

没做过音频项目,正常来说用DMA能好些吧

热爱童话世界 发表于 2022-9-25 12:07

你是不是有业务在定时器里做了啊

一枝香 发表于 2022-9-25 12:29

你可以在定时器6处理完之后,同时给定时器清零一下呢?

偷吻月亮 发表于 2022-9-25 12:51

网上搜了一下,说是要同源时钟的

笨蛋无需搭理 发表于 2022-9-25 13:13

你这时钟不同步是有规律的么
页: [1]
查看完整版本: ADC to DAC时间久了时钟不同步的问题