Обзор MEMS микрофона MP23DB01HPTR (электронное ухо)

ce48233663c0b221a1150dfa94e35fef.png

Есть много организаций, которые так или иначе разрабатывают и производят оборудование со звукоизлучателями. Очевидно, что между производством и продажей это аудио оборудование надо тестировать. Я был свидетелем как тест аудиосистемы выполняли и вручную. Выглядело это так. Дама тестировщик брала плату, нажимала на кнопку воспроизведения и потом нажимала на другую кнопку для подтверждения, что она в самом деле услышала звук. Недостаток такого метода тестирования заключается в том, что нужно постоянное присутствие человека. Плюс человеческий фактор приводит к, тому что из-за усталости, человек машинально подтверждает звук, которого на самом деле не было!

В этом тексе я написал про то как делать авто тест для звуковых систем. Очевидно, что нужен микрофон. Сейчас самые современные микрофоны это MEMS микрофоны с двухпроводным цифровым интерфейсом PDM.

В качестве экземпляра микрофона рассмотрим к примеру MP23DB01HP. ASIC MP23DB01HP — это MEMS микрофон с PDM интерфейсом для испускания данных. Его спецификация это 16 страниц.

Что надо из оборудования?

#

оборудование

Пояснение

1

отладочная плата с MP23DB01HP

для преобразования звука в электрический сигнал

2

смартфон c Android

для воспроизведения звука

6

логический анализатор Saleae

для разбора осциллограмм

3

отладочная плата с nrf5340

для сохранения звуковой дорожки

4

Перемычки вилка-вилка

для соединения микрофона и отладочной платы

5

Перемычки вилка-гнездо

для соединения микрофона и отладочной платы

Вот внешний вид микрофона MP23DB01HP. На корпусе маркировка S2203 5681.

9ea124c537f5d7e93ba292e2da3a28e6.png

C точки зрения программиста-микроконтроллеров MEMS микрофон выглядит так.

d06abe5dd4438b9e8671f030fe2597dc.png

расспиновка микросхемы

e72fc7e2973ad537a7adff67ba2a52f2.png

Вот типичная схема подключения микрофона.

fc1530f52c43234a639021c04d23dec2.png

Сам по себе микрофон бесполезная вещь. Нужна какая-то PCB плата — переходник для подключения микрофона к другим электронным платам. Вот что-то такое

07f18d447ba2c5923897e441077ec84c.png

А это та же плата переходник в составе шлейфа

4c77d727688342c04dec7bd8998e173b.png

Распиновка PCB модуля c MEMS микрофоном

пин

Пояснение

цвет провода

2

3.3V

Питание

оранжевый

3

DATA

данные

зелёный

1

CLK

тактирование

красный

4

GND

заземление

желтый

Вот образцовая осциллограмма PDM трафика. Тут данные выхватываются по отрицательному перепаду на проводе тактирования CLK.

83bd89c34db966090cb35365607046e7.png

Тактирование микрофона происходит на частоте 1MHz

de2de221faf6e9e771983f2687b5658e.JPG

Программная часть

Что надо из софтвера?

Утилита

Пояснение

1

Мобильное приложение SimpleToneGenerator

Для генерации тонального звука с заданной частотой

2

TeraTerm

Для подключения к прошивке по serial порту

3

Logic 2.3.53

Клиент для логического анализатора Slaeae

Особенность PDM модуляции в том, что она однобитная. Это по сути выход Delta Sigma ADC. Одновременно с этим, звук по своей природе много битный. Звук — это аналоговый сигнал. В программах звук представляется как последовательность знаковых целых чисел (PCM) в массиве. Поэтому необходим какой-то программный или аппаратный компонент, который будет преобразовывать PDM сигнал в PCM сигнал. К счастью, мне повезло и в микроконтроллере nrf5340 заложена электрическая цепочка, которая преобразует PDM в PCM. Это целый цифровой CIC фильтр, который делает эту работу.

Также Vendor NordicSemiconcuctor предоставил MCAL для высокоуровнего доступа к регистрам в физических адресах карты памяти памяти SoC (а).

Я взял смартфон, включил воспроизведение синусоиды на частоте 1000 Hz, поднес телефон к микрофону и набрал в UART-CLI консоли в прошивку старт авто теста для PDM микрофона.

Вот я записал коротенькую звуковую дорожку в 500 семплов (1000 байт).

f2d06930669f937eedfbf934b885c35c.png

Вот можно даже явно в TeraTerm выделить один период.

216bf93223952d5046efde188fd68db4.png

Когда мы записали массив PCM семплов надо пропустить его через дискретное преобразование Фурье.

#include "dft.h"

#include 
#include 
#include 
#include 

#include "log.h"

bool dft_calc(const SampleType_t* const signal, uint32_t n_big, double complex* const dft_out, uint32_t out_len,
              double t_big) {
    LOG_INFO(DFT, "Calc %u samples", n_big);
    bool res = false;
    if(signal) {
        res = true;
        uint32_t k = 0;
        for(k = 0; k < n_big; k++) {
            dft_out[k] = 0.0 + 0.0 * I;
            uint32_t n = 0;
            for(n = 0; n < n_big; n++) {
                dft_out[k] += ((double)signal[n]) * (cos(TWO_PI_VAL * ((double)k * n) / ((double)n_big)) -
                                                     sin(TWO_PI_VAL * ((double)k * n) / ((double)n_big)) * I);
            }
            dft_out[k] = 2.0 * dft_out[k] / ((double)n_big);
        }
    }
    return res;
}

double ft_find_freq(double complex* X, uint32_t len, double period_s,double * const max_freq ) {
    uint32_t i = 0;
    //bool res = false;
    double freq_range = 1.0 / period_s;
    LOG_INFO(DFT, "FindMaxFreq, Size %u, SamplePeriod %f S, %f Hz",len, period_s,freq_range);
    Spectr_t cur_spectr = {0};
    Spectr_t max_spectr = {0};

    for(i = 0; i < len; i++) {
        cur_spectr.freq = ((double)i) / (period_s * ((double)len));
        if(cur_spectr.freq < (freq_range / 2.0)) {
            cur_spectr.amplitude = cabs(X[i]);
            if(max_spectr.amplitude < cur_spectr.amplitude) {
            	if(0.001 < cur_spectr.freq){
            		max_spectr=cur_spectr;
            		*max_freq=cur_spectr.freq;
                    LOG_INFO(DFT, "UpdateMaxFreq %f Hz, Amp %f",cur_spectr.freq,cur_spectr.amplitude );
            	}
            }
        } else {
        	break;
        }
    }
    return max_spectr.freq;
}

В результате получили вот такой спектр записанного сигнала

c462f1eec1780cfd2595c0e984879887.png

Видно явный максимум на частоте 1024 Hz. Это как раз соответствует тому сигналу который был воспроизведен в утилите Simple Tone Generator на смартфоне. Успех!

Идеи проектов на основе микрофонов

--Звуковая ориентация, распознавание направления на источник стрельбы или ориентация PTZ камер на источник звука.

--диктофоны.

--датчики шума.

--тестирование аудио-оборудования. Колонки, LapTop (ы).

--голосовое управление.

--беспроводная прием бинарных данных из модулированного звука.

--телефоны, рации.

--медицинские приборы для автоматического измерения пульса (электронный статоскоп).

Что можно улучшить?

Заменить DFT на FFT.


Вывод

Как видите, дискретное преобразование Фурье (или FFT) отлично подходит для авто-тестов аудиосистемы. Казалось бы, чтобы протестировать простенькую пищалку надо подключать микрофон, записать PDM, преобразовать PDM в PCM, высчитывать преобразование Фурье, найти максимум, сравнить максимум с настройками изначального воспроизведения и выдать результат. При этом я тут еще не писал саму программную реализацию цифрового CIC фильтра для преобразователя PDC в PCM. Это вообще тема их высших спец разделов математики (ЦОС).

В связи с этим общее правило автоматического тестирования таково

Разработка авто тестов всегда в несколько раз дороже разработки самого продукта для которого предназначены эти авто тесты.

Если вы затратили на разработку продукта N рублей, то на разработку стенда авто тестов Вы потратите минимум 3N рублей. Тут вариантов нет. При этом разрабатывать систему авто тестов должны более квалифицированные инженеры и программисты, чем те кто разрабатывают сам продукт. Вот так.

Словарь

Акроним

Расшифровка

VDD

Питание

MEMS

micro-electromechanical systems

GND

Ground

SoC

System on a chip

CIC

Cascaded integrator–comb

DFT

discrete Fourier transform

PDM

Pulse-density modulation

ST

STMicroelectronics

MCAL

MicroController Abstraction Layer

IC

Integrated circuit

PCM

pulse code modulation

Links

https://docs.google.com/spreadsheets/d/1M4_rhUz_ULNsZfSdtrAyq4UJ-e8K5sVsdoTFWnLDiFo/edit#gid=0

https://www.st.com/en/mems-and-sensors/mp23db01hp.html

https://en.wikipedia.org/wiki/Pulse-density_modulation

https://en.wikipedia.org/wiki/Cascaded_integrator–comb_filter

Контрольные вопросы

1--В чем недостатки авто тестов?

2--Как преобразовать бbтовый поток PDM в PCM семплы?

3--Сколько проводов нужно PDM интерфейсу?

4--Как устроен MEMS PDM микрофон внутри?

© Habrahabr.ru