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.

[参考译文] PCMD3180:仅当麦克风超过2个时从 CH1输出

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1520795/pcmd3180-output-only-from-ch1-when-more-than-2-mics

器件型号:PCMD3180

工具/软件:

您好:

另一个关于 PCMD3180的问题回来。 我之前在电路中实现多路复用器时遇到了一些问题、如 上一篇文章中所述。 从那以后、我就设法使 I2S 输出正常工作。 但是、它一次只能与一个或两个麦克风配合使用。 当我尝试使用4个麦克风时、I2S 输出仅反映来自 PDM 通道1的输入。  

电路简要说明:  

  • ESP32-S2充当 I2S 主器件发送 PCMD 初始化寄存器、FSYNC 和 BCLK (48kHz 和1.536 MHz)。 信号干净且稳定。
  • I2S 设置为右/左模式(立体声)。  
  • PCMD3180设置为从模式。 将 SDO 直接驱动到 ESP32。 可以为麦克风(0.768或1.536 MHz)提供 PDM 时钟。
  • 4个 PDM 麦克风在 PDM_IN1和 PDM_IN2上设置为 L/R 对。 它们都返回稳定的 SDA。
  • 所有 PCMD 寄存器均按照指示进行初始化、并且所有电压(AVDD、IOVDD 等)均干净稳定。

当为1个麦克风初始化 PCMD 寄存器、左时隙0、并为 I2S 单声道初始化 ESP 时、接收到的 I2S 信号是干净的。 无论左右麦克风选择如何、这都适用于 PCMD 上的任何 PDM_IN 通道。

当为2个麦克风(左时隙0和右时隙0)初始化 PCMD 寄存器以及为 I2S 立体声初始化 ESP 时、接收到的信号很干净、具有清晰的 L/R 差异、但与单声道版本相比更安静。 同样、这适用于任何 PDM_IN 通道、只要它们设置为占用时隙0即可。

但是、当为4个麦克风初始化 PCMD 寄存器时、在左0、右0、左1、右1等位置 接收到的输出仅来自 PDM_IN 通道1左侧时隙0、无论使用的是哪个 PDM_IN 通道。 右声道上的所有数据与左声道上的数据相同。 这是通过点击或说话的4个麦克风胶囊,然后绘制音频波形确认。 该图仅显示 PDM_IN1、左时隙0上的抽头。 在语音情况下、可以清楚地听到扬声器仅靠近 PDM_IN1麦克风、而其他3个麦克风不是接近敏感的(与2个麦克风 L/R 情况相反、这种情况下很接近)。 PDM 麦克风或通道本身似乎没有问题、因为 PDM_CLK 由 PCMD 驱动、麦克风返回稳定的 PDM_SDA。  

我尝试了不同的插槽分配、插槽左侧为0、1、2和3、 并尝试在每个 PDM_IN 通道和2个 PDM_IN 通道成对放置1个麦克风。 在这两种情况下、我都只从左声道中的左时隙0接收到数据、而右声道中只有0 (符合预期)。  

我尝试更改了 DSP_CFG 寄存器、以便对 PDM 通道(CH1+CH2)/s 和(CH3+CH4)/2的输出求和、但这似乎只使 CH1上信号振幅的一半、左时隙0。   

我之前在使用试验电路板时曾尝试使用 ADC140 EVM 来测试该系统。 但是、由于将电路转移到定制 PCB、EVM 无法再返回干净的输出。 我注意到、无论 PPC3 GUI 中的寄存器设置如何、连接到 EVM 的 PCMD 都无法启动 PDM_CLK 分频器并在 PDM_OUT 通道发送出去。 FSYNC 和 BCLK 信号有噪声、无论 GUI 设置如何、BCLK 都不会降至3.1 MHz 以下。  

除了启用每个通道外、我是否必须更改任何其他寄存器、或者我是否必须执行任何其他操作才能使 I2S 输出与4个或更多麦克风配合使用? 如果我对 I2S 的理解和 PCMD 用户手册中有关的信息是正确的、那么 I2S 可以通过交错左右时隙来返回具有2个以上麦克风输入的立体声输出。 如果是、为什么我只能看到左侧时隙0的输出?

提前感谢您。

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

    尊敬的 Matei:

    您的 BCLK 与 FSYNC 的比率为32位(1.536 MHz / 48kHz)。 您说这适用于2个麦克风、那么我假设您的位深度是最小16位。  

    Unknown 说:
    如果我对 I2S 的理解和 PCMD 用户手册中的相关信息是正确的、那么 I2S 可以通过交错左右时隙来返回具有2个以上麦克风输入的立体声输出。 [/报价]

    我认为这是问题的根源。 我们的器件不会交错左/右时隙。 它们相互附加。 因此、对于4通道情况、按顺序可以看到左0、左1、右0、右1、与 TDM 的外观非常相似。 您的 BCLK 不够快、无法支持所有4个通道、这会导致您看到的奇怪结果。 我首先尝试将 BCLK 加倍、以便 BCLK/FSYNC 为64。 然后检查是否可以在数据输出上看到4个通道。 确保您的接收器设置也已调整到新的数据格式。

    此致、
    Jeff McPherson

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

    您好、Jeff、

    感谢您的澄清。 是的、我忘记提到、我使用的位深度是16。 我分别将 ASI 通道1、2、3和4的时隙分配顺序更改为左0、左1、右0、右1。 此外、我还将 PDM_CLK 速度提高到3 MHz。 这似乎解决了将左声道数据复制到右声道的问题。 现在接收到的左右声道不同、显示了空间和接近度。 然而、播放时通道会移动90度。 这意味着我可以在左侧输出通道中听到左0和右0 (通道1和3)的声音、在右侧输出通道中听到左1和右1 (通道2和4)的声音。 我想我可能必须反复播放 ASI 通道设置...

    不幸的是,我使用的 Arduino I2S 库不允许我直接更改 BCLK 或增加通道数量;我只能选择单声道或立体声。 我可能需要寻找另一个库或另一个解决方案。  

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

    尊敬的 Matei:

    I2S 是一种棘手的格式,可用于2个以上的通道,因此您的 Arduino 库可能会错误地解释您的格式。 根据定义、I2S 仅支持2个通道、因此我看到人们遇到了这样的问题、即 I2S 库固定在2个通道。 您可以考虑 TDM 库并改用 TDM 格式、TDM 格式定义为支持任意数量的通道。

    您还可以"欺骗"您的 Arduino 通过考虑编解码器侧的通道移动,意味着交换 CH2和 CH3的插槽。 右侧0和左侧1仍将显示在"错误"侧、但通过在编解码器侧进行相同的交换、麦克风数据应显示在您预期的位置。

    此致、
    Jeff McPherson