This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PCM6480-Q1:768K 采样率、输入正弦波采样后发生失真

Guru**** 1646690 points
Other Parts Discussed in Thread: PCM6480-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1253157/pcm6480-q1-768k-sampling-rate-distortion-occurs-after-input-sine-wave-sampling

器件型号:PCM6480-Q1

您好!

 我在从模式下使用 PCM6480-Q1、已启用自动时钟配置、在自动时钟配置下启用 PLL、FS 是48kHz 的倍数(或子倍数)。

  BCLK 输入24.576Mhz、FSYNC 输入768Khz。

 当我向 IN1输入16kHz 正弦波信号时、输出信号在采样后会失真、 如下所示:

  

 
  BCLK 输入12.288Mhz、FSYNC 输入384Khz;或 BCLK 输入 1.536Mhz、FSYNC 输入 48kHz。

 当我向 IN1输入16kHz 正弦波信号时、采样后的输出信号是正常的、如下图所示:

  

  请提供一些建议。

 感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:

    预计在接下来的48个 工作小时内得到回复。  

    此致、

    Ore.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    采样率为768kHz 时、输入正弦波会产生失真、输入频率越高、失真越大。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:

    非常感谢您的详细信息。 请允许我在下周前提供反馈。

    此致

    Ore.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:

    您正在使用多少个输出通道? 如果您启用了多个通道、则需要考虑以下公式

    bclk=#channels*#bits per channel*采样率频率。  

    它会影响对您的信号进行采样的方式。 如果每通道#位数为32位、并且采样率为768KHz、则 BCLK 需要与该公式相匹配。 因此您的#通道将仅为一个通道。  

    希望这对您有所帮助。

    此致、

    Ore.   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    工作的输出通道数为2、 每个通道的位数为16、 采样率频率为768kHz,BCLK 输入24.576Mhz、这是我的寄存器配置:

    Pcm6480Write_reg (idx、0x02、0x01);

    Pcm6480Write_reg (idx、0x07、0x40);

    Pcm6480Write_reg (idx、0x08、0x00);

    Pcm6480Write_reg (idx、0x13、0x27);

    Pcm6480Write_reg (idx、0x16、0x00);

    Pcm6480Write_reg (idx、0x3B、0xF0);

    Pcm6480Write_reg (idx、0x3C、0x00);

    Pcm6480Write_reg (idx、0x41、0x00);

    Pcm6480Write_reg (idx、0x46、0x00);

    Pcm6480Write_reg (idx、0x4B、0x00);

    Pcm6480Write_reg (idx、0x73、0xC0);

    Pcm6480Write_reg (idx、0x74、0xC0);

    Pcm6480Write_reg (IDx、0x75、0xE0);

    其余寄存器默认配置、请检查寄存器配置是否正确。

    感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hey Yunyun:  

    感谢您提供更多详细信息。  查看此文档时、我建议您 在寄存器映射中检查通道的寄存器配置、并按照需要启用和禁用通道。 下面我们举例说明:  

      

    您的位数是16位还是字长16位? 您使用的是 TDM、I2S 或左对齐(LJ)格式的 ASI 功能是什么?

    要检查每个通道的位、请使用示波器或逻辑分析仪对齐您的 fsync (帧时钟)和 BCLK (位时钟)。 我 在下面提供了一个示例。 下面、一帧中有16位时钟:

    此致、

    Ore.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复,

    1.IN_CH_EN 寄存器(地址= 0x73),I 设置值0xC0,通道1和2启用;

    2.ASI_CFG0寄存器(地址= 0x7),I 设置值0x40,ASI 功能使用 I2S 模式,ASI 字或时隙长度为16位;

    我的示波器波形如下所示:

    我的寄存器配置如下:

    Pcm6480Write_reg (idx、0x02、0x01);

    Pcm6480Write_reg (idx、0x07、0x40);

    Pcm6480Write_reg (idx、0x08、0x00);

    Pcm6480Write_reg (idx、0x13、0x27);

    Pcm6480Write_reg (idx、0x16、0x00);

    Pcm6480Write_reg (idx、0x3B、0xF0);

    Pcm6480Write_reg (idx、0x3C、0x00);

    Pcm6480Write_reg (idx、0x41、0x00);

    Pcm6480Write_reg (idx、0x46、0x00);

    Pcm6480Write_reg (idx、0x4B、0x00);

    Pcm6480Write_reg (idx、0x73、0xC0);

    Pcm6480Write_reg (idx、0x74、0xC0);

    Pcm6480Write_reg (IDx、0x75、0xE0);

     

    5. PCM6480原理图如下:

    当768K 采样率和 BCLK 与 FSYNC 之比为32时、根据数据表,、BCLK 频率为24.576Mhz;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、上面的示波器截图是384K 采样率、下面的示波器截图是768K 采样率:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:  

    感谢您的反馈、我们将在本周结束时提供回复。  

    此致、

    Ore.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否可以在 PCM6480的评估板上重现此问题?

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的提问。 预计在接下来的48个工作时间内得到回复。  

    此致、

    Ore.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:  

    执行寄存器转储的结果无法按预期运行。 配置此器件的最佳方法是使用生成此寄存器转储的 ppc3应用。 您能否在末端尝试此寄存器转储? 运行此脚本时、请不要忘记使用适当的器件地址。  

    我使用的是:单端输入、2通道、I2S 模式、16位/通道字长、16位/帧 BCLK、FS=384KHz。 使用 fs=768KHz 来尝试此配置、并告诉我可以找到什么。 此外、此寄存器转储适用于64或128的 MCLK/FCK 比率、这意味着我的主时钟 分别为24.5760 MHz 或49.1520 MHz。

    此致、

    Ore.

    e2e.ti.com/.../slave-mode.cfg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Yunyun:  

    有任何关于这一点的更新吗? 如果不是,我会认为这已经解决。  

    此致、

    Ore.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我最近一直忙于其他项目、因此可能需要稍后再验证此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!


    我已经尝试了 您 在结尾处给出的寄存器转储。

    当 BCLK=12.288Mhz、FS=384Khz、MCLK=12.288Mhz、 向 CH1输入10kHz 正弦波信号时、采样后输出信号正常。

    当 BCLK=24.576Mhz、FS=768Khz、MCLK=24.576Mhz、 向 CH1输入10kHz 正弦波信号时、 输出信号在采样后将失真。

    我是指"slave mode.cfg"文件、寄存器配置程序如下所示:

    //#选择第0页
    // w 90 00 00
    Pcm6480Write_reg (idx、0x00、0x00);

    //#重置设备
    // w 90 01 01
    Pcm6480Write_reg (idx、0x01、0x01);

    //# 1ms 延迟
    sleep_ms (1);

    //#------------------
    //#开始设备内存
    //#------------------
    //#页0 (0x00)转储
    //#选择第0页
    // w 90 00 00
    //宽90 02 81
    Pcm6480Write_reg (idx、0x00、0x00);
    Pcm6480Write_reg (idx、0x02、0x81);

    //#禁用睡眠后的2s 延迟
    sleep_ms (2000);

    // w 90 07 40
    Pcm6480Write_reg (idx、0x07、0x40);

    //# ASI 输出 CH2
    // w 90 0c 20
    Pcm6480Write_reg (idx、0x0c、0x20);

    //# ASI 配置
    //宽90 15 72
    //宽90 17 90
    Pcm6480Write_reg (idx、0x15、0x72);
    Pcm6480Write_reg (idx、0x17、0x90);

    //# PDMDIN3_GPI3/PDMDIN4_GPI4
    //w 90 2c D8
    Pcm6480Write_reg (idx、0x2C、0xd8);

    //#诊断微偏置电流阈值
    //宽90 3a 10
    Pcm6480Write_reg (idx、0x3a、0x10);

    //#微偏置配置
    //w 90 3b f0
    Pcm6480Write_reg (idx、0x3b、0xf0);

    //#通道1 CFG、增益、体积、增益校准、相位校准
    // w 90 3c a0
    Pcm6480Write_reg (idx、0x3c、0xa0);

    //# CH2 CFG、增益、体积、增益校准、相位校准
    // w 90 41 90
    Pcm6480Write_reg (idx、0x41、0x90);

    //#输入通道启用
    //宽90 73 c0
    //宽90 74 c0
    //宽90 76 c0
    //w 90 77 F8
    Pcm6480Write_reg (idx、0x73、0xc0);
    Pcm6480Write_reg (idx、0x74、0xc0);
    Pcm6480Write_reg (idx、0x76、0xc0);
    Pcm6480Write_reg (idx、0x77、0xf8);

    //#第4页(0x04)转储
    //#选择第4页
    // w 90 00 04
    Pcm6480Write_reg (idx、0x00、0x04);

    //#高通滤波器系数
    //宽90 49 E6
    //> 48
    //> C6
    //> 80
    //w 90 4D 19
    //>B7
    //>3a
    //>7f
    //宽90 51 cc
    //> 91
    //>8b
    Pcm6480Write_reg (idx、0x49、0xe6);
    Pcm6480Write_reg (idx、0x4A、0x48);
    Pcm6480Write_reg (idx、0x4B、0xc6);

    Pcm6480Write_reg (idx、0x4C、0x80);
    Pcm6480Write_reg (idx、0x4D、0x19);
    Pcm6480Write_reg (idx、0x4E、0xb7);
    Pcm6480Write_reg (idx、0x4F、0x3a);

    Pcm6480Write_reg (idx、0x50、0x7f);
    Pcm6480Write_reg (idx、0x51、0xcc);
    Pcm6480Write_reg (idx、0x52、0x91);
    Pcm6480Write_reg (idx、0x53、0x8b);

    //#上电/下电
    //#选择第0页
    // w 90 00 00
    //宽90 75 e0
    Pcm6480Write_reg (idx、0x00、0x00);
    Pcm6480Write_reg (idx、0x75、0xe0);

    我对寄存器转储有一些问题、

    PCM6480中不存在寄存器0x17、它是0x16吗? 寄存器0x2C 是锁存中断回读寄存器。

    MCLK 在寄存器转储中是否有用? 我的 MCLK 引脚使用 GPIO1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yunyun:

    我们的办公时间一直到星期一、所以我将在此期间回答您的问题。

    1) 1)您的正确答案。 由于没有 PCM6480 EVM、因此 CORE 在该系列中使用了一个姊妹器件。 这些器件具有非常相似的寄存器映射、但这种差异被忽略了。 如果它们不属于6480寄存器映射、我会忽略这些行。

    2)我不确定您在寄存器转储中所说的有用意思、但如果您使用主模式、您是在 GPIO1上实现 MCLK 的。 从您的原理图来看、您是否处于从模式? 即 BCLK 和 WCLK 由主机提供? 在从模式下、不需要 MCLK、因为 BCLK 可被用作一个 PLL 源。

    此致、
    J·麦克弗森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好
    我使用从模式、BCLK/WCLK/MCLK 都由 FPGA 提供。

    在"slave mode.cfg"文件中、我看到了 MCLK 的设置、但 MCLK 不应生效。

    //# ASI 配置
    //宽90 15 72
    //宽90 17 90
    Pcm6480Write_reg (idx、0x15、0x72);
    Pcm6480Write_reg (idx、0x17、0x90);

    根据"slave mode.cfg"文件、在寄存器0x13中、在自动时钟配置(AUTO_MODE_PLL_DIS = 0)下启用 PLL、 但在寄存器0x16中、位7设置为1、 我认为是无效的、 因为当器件配置为在从模式的自动时钟配置中禁用 PLL 时、音频根时钟源设置(AUTO_MODE_PLL_DIS = 1)。

    那么、当 在从模式的自动时钟配置中(AUTO_MODE_PLL_DIS = 0)将器件配置为启用 PLL 时、时钟源是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yunyun:

    只要自动时钟配置模式处于活动状态、您就正确地忽略寄存器0x16位7。 自动模式下的时钟源为 BCLK。 PLL 和分频器将此作为时钟源来创建所有其它时钟。

    此致、
    J·麦克弗森