嗨、
我正在尝试使用 TLV320ADC6120对 PDM MEMS 麦克风进行采样。
此 ADC 通过 I2C 进行配置、而其输出则通过 I2S 使用 ESP32C6进行读取。 我将使用 PDM 输出板(https://learn.adafruit.com/adafruit-pdm-microphone-breakout)来生成 PDM 数据。
分线板的连接方式如下:
数据-------- IN2P_GPI1
CLK-------- IN2M_GPO1
选择--GND
GND----- 接地
3V------- 输入电压
这些是上电后通过 I2C (没有 NAK)发送的设置:
//等待1ms
h4e wr h00 //选择第0页
h4E WR h02 H81 // SLEEP_CFG:= SLEEP_CFG_DEFAULT | SLEEP_CFG_AREG_SELECT_INTERNAL | SLEEP_CFG_SLEEP_ENZ_ACTIVE
//等待1ms
h4e wr h00 //选择第0页
h4E WR h07 // ASI_CFG0:= ASI_CFG0_DEFAULT | ASI_CFG0_FORMAT_I2S
//(分线板在数据和 GPI1之间没有电容,因此我们需要使用 CH1_CFG0_DC_DC
h4E wr h3C h50 // ch1_CFG0:= CH1_CFG0_DEFAULT | CH1_CFG0_INSRC_PDM | CH2_CFG0_INSRC_PDM | CH1_CFG0_DC_DC
h4E WR H22 H41 // GPO_CFG0:= GPO_CFG0_DEFAULT | GPO_CFG0_GPO1_CFG_PDMCLK | GPO_CFG0_GPO1_DRV_ACTLOW_ACTHIGH
//实际上这不是必需的,但不应更改任何内容
h4E WR H21 H63 // GPIO_CFG0:= GPIO_CFG0_DEFAULT | GPIO_CFG0_GPIO1_CFG_PDMCLK | GPIO_CFG0_GPIO1_DRV_ACTLOW_ACTHIGH
//不需要 ch2
h4E WR h2B H45 // GPI_CFG0:= GPI_CFG0_DEFAULT | GPI_CFG0_GPI1_CFG_PDMDIN1 | GPI_CFG0_GPI2_CFG_PDMDIN2
h4E WR h73 hF0 // IN_CH_EN:= IN_CH_EN_CH1_ENABLED | IN_CH_EN_CH2_ENABLED | IN_CH_EN_CH3_ENABLED | IN_CH_EN_CH4_ENABLED
h4E wr h74 hC0 // ASI_OUT_CH_EN:= ASI_OUT_CH_EN_CH1_ENABLED | ASI_OUT_CH_EN_CH2_ENABLED
//等待1ms
h4e wr h00 //选择第0页
h4E WR H75 H60 // PWR_CFG:= PWR_CFG_DEFAULT | PWR_CFG_ADC_PDZ_ON | PWR_CFG_PLL_PDZ_ON
然后、时钟在 GPO1上使用大约2.8MHz 运行。
问题在于数据似乎不包含任何有用的数据。 我只收到噪音、但没有声音。 我还必须使用高增益来查看任何信号。
有趣的是、如果麦克风根本未通电、数据信号看起来类似。
音频信号中可以看到响亮的声音(例如麦克风附近的咔嗒声)、即使您在收听录制的音频时无法识别这些声音也是如此。 它看起来像是单个振荡。
如果将 ADC 配置为对模拟信号进行采样、它会正常工作、因此我的配置过程存在问题。
由于在对模拟麦克风进行采样时 I2C 和 I2S 工作正常、因此应该不会出现问题。
您有什么想法、为什么我没有通过 I2S 收到任何有用的数据? 我的配置中是否缺少一些必需的参数?
提前感谢