Using PDM for 2 Microphones in Stereo Mode

Hello, I'm trying to use two microphones in stereo mode of PDM (nrf52832, SDK17). Unfortunately, I have a major problem with my Right microphone. It seems that "nrfx_pdm_buffer_set" just put the Left one in the buffer.

This is my initialization for PDM in main function:

int main(void) {
    .
    .
    ...
    nrfx_pdm_config_t pdm_config = NRFX_PDM_DEFAULT_CONFIG(PDM_CLK_PIN, PDM_DATA_PIN);
    pdm_config.mode = PDM_MODE_OPERATION_Stereo;
    pdm_config.gain_l = PDM_GAIN;
    pdm_config.gain_r = PDM_GAIN;
    pdm_config.clock_freq = PDM_PDMCLKCTRL_FREQ_1000K; // 15625 Samples per Second
    pdm_config.edge = PDM_MODE_EDGE_LeftFalling;
    pdm_config.interrupt_priority = APP_IRQ_PRIORITY_HIGH;
    err_code = nrfx_pdm_init(&pdm_config, pdm_event_handler);
    APP_ERROR_CHECK(err_code);
    .
    .
    .
}

This is "pdm_event_handler" function and "pdm_buffer" array:

int16_t pdm_buffer[PDM_BUFFER_SIZE_SAMPLES];

static void pdm_event_handler(nrfx_pdm_evt_t const *const p_evt) {
    if (p_evt->buffer_requested) {
	    nrfx_pdm_buffer_set(pdm_buffer, PDM_BUFFER_SIZE_SAMPLES);
    } 
    if (p_evt->buffer_released) {
    	do_something(pdm_buffer);
    }
}

I tried many methods, including:

1. Make the type of "pdm_buffer" array uint32_t instead of int16_t.

2. Make "pdm_buffer" array 2 dimensional (int16_t pdm_buffer[2][PDM_BUFFER_SIZE_SAMPLES]).

3. Double the "PDM_BUFFER_SIZE_SAMPLES" constant in the buffer set ("nrfx_pdm_buffer_set(pdm_buffer, 2 * PDM_BUFFER_SIZE_SAMPLES)").

But non of them work.

Parents
  • Hello,

    Sorry for the late reply. 

    What kind of microphones are you using? And I suspect that there is some sort of way you need to tell the microphone whether it is the left or the right device. Is that correct? Does both of the microphones work if you tell them that they are the left device (one at the time, of course). Does either of them work if you tell them that both are the right (not left) microphone?

    Best regards,

    Edvin

Reply
  • Hello,

    Sorry for the late reply. 

    What kind of microphones are you using? And I suspect that there is some sort of way you need to tell the microphone whether it is the left or the right device. Is that correct? Does both of the microphones work if you tell them that they are the left device (one at the time, of course). Does either of them work if you tell them that both are the right (not left) microphone?

    Best regards,

    Edvin

Children
Related