ADC to DAC时间久了时钟不同步的问题
我在用STM32L431做一个音频相关的项目。
我是用Timer6 设置32Khz ADC 采样,然后把采样点降采样到4Khz后,然后输出到DAC同步输出。DAC用Timer7设置 4Khz。
刚开始ADC数据和DAC数据是同步的,但是几分钟后ADC 进去的数据和DAC输出的指针就会不同步导致异常。
请问这种应用该怎么做?我知道如果用同一个Timer就没问题,但是由于ADC采样率和DAC的采样率要设不同的没法用一个timer吧?
数据经过了缓冲?可否根据缓冲区剩余数据量对Timer7的频率进行微调?
若想用同一个timer,可以软件分频得到不同的频率:
timer()
{
static int f;
ADC采样;
f++;
if(f>=3)//软件3分频
{
f=0;
DAC输出;
}
} 鬼知道你的32KHZ和4khz 是不是准确的。寄存器设置截图发上来看看 如果是音频,这个理解不对, 如果ADC 以32K采样, 那么DAC须以32K,并且要同时钟 ,否则时钟异步了就有杂音, 如果DAC 以4K输出,那么32K就要转采样成4K,同样存在异步问题,杂音是不可避免的,只是看出现的时间不定而已 用同一个时钟就不会有问题。32K采样,每中断8次就送一次给DAC。
32K定时器作为4K定时器的时钟这种不同步??
必须用同源时钟,否则两个名义上都是4KHz的时钟,也存在微小的偏差,不同步,时间久了就会丢点或者重复采样,音频表现为爆音。
能想到两个方法:
1、要么想办法用同源时钟。
2、要么加采样率转换(本质上就是个滤波。)。音频不同于视频:视频可以通过队列控制,必要时丢帧或者重复帧来达到同步的目的。音频哪怕丢弃或者重复一个采样点,都能听到爆音,所以这种情况就得用采样率转换。 你是说基于TIM6对ADC每秒完成32K的采样,然后将采样数据按照每秒提取4K个经DAC 输出,DAC的输出时序由TIM7来控制。请问从采样数据提取到DAC是通过DMA还是中断方式。另外TIM6 TIM7的时间参数是怎样配置的,二者有无保持同步关系。
采样点降采样到4Khz是什么意思?是每8个数据取一个出来给DAC么?
是不是晶振不准导致的呢 大概需要多久了就变的不准了啊 大概能相差多少呢 二者的时钟源要用一样的 DAC和ADC的时钟是如何配置的呢 二者需要协同合作吗 没做过音频项目,正常来说用DMA能好些吧
你是不是有业务在定时器里做了啊
你可以在定时器6处理完之后,同时给定时器清零一下呢?
网上搜了一下,说是要同源时钟的
你这时钟不同步是有规律的么
页:
[1]