久芯网

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

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

如需获得 STM32L431 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

5个回答
  • avatar xmshao
    回答时间: 2023-07-22 07:02:09

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

  • avatar butterflyspring
    回答时间: 2023-07-22 07:20:38

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

  • avatar 奋斗机
    回答时间: 2023-07-22 07:41:41
    butterflyspring 发表于 2022-8-4 12:10
    采样点降采样到4Khz是什么意思?是每8个数据取一个出来给DAC么?

    是的,每8各ADC 采样点输出一个点到DAC. 这样才可以把32Khz的ADC数据 跟4Khz的DAC 输出对应起来。

  • avatar 奋斗机
    回答时间: 2023-07-22 08:00:43
    xmshao 发表于 2022-8-4 11:48
    你是说基于TIM6对ADC每秒完成32K的采样,然后将采样数据按照每秒提取4K个经DAC 输出,DAC的输出时序由TIM7 ...

    ADC搬数据到RAM是通过DMA;从RAM搬数据到DAC也是通过DMA.刚开始吃进去的ADC数据和吐出来的DAC数据还都能保持同步,十几秒后就不同步了。应该是两个timer有累计误差。

  • avatar 奋斗机
    回答时间: 2023-07-22 08:27:05

    问题已经解决。其实还是两个timer 的period设置有问题,没有-1. 80M 主频如果设为32khz,那么period应该设置为2500-1。我两个timer都没有-1导致误差开始对的,后面越来越大。 我当时还想了第二种方法,用定时器级联来做。因为当时一直以为两个timer就是会有一点点误差的,可能一个是正误差一个负误差导致。

会员中心 微信客服
客服
回到顶部