Разработка диктофона в виде бейджа

h9cfrrtgguxm7-0mykepx6ha6na.jpeg

Приветствую, Хабр!

Хочу рассказать про разработку прототипа носимого диктофона. Тема довольно интересная и популярная в наше время. Скорее это касается не обычных пользователей (но почему бы и нет), а всевозможного обслуживающего персонала, работников банков и других сфер деятельности, где необходима запись диалога «сотрудник-клиент». Что-то подобное, но еще и с записью видео уже можно встретить у сотрудников полиции и автоинспекции.


Мы будем рассматривать так называемые «разрешенные диктофоны» — устройства, которые не предназначены для негласного (скрытого) сбора данных. Для подобных изделий существует несколько критериев, остановимся на них немного подробнее.

  1. Внешний вид. Диктофон не должен быть замаскирован под что-то другое, например брелок или брошь. В противном случае это будет квалифицироваться как устройство для негласного получения информации (статья 138.1 УК РФ). Наличие надписи «Диктофон» лишней точно не будет.
  2. Индикация. Устройство должно иметь индикацию записи, чтобы клиент всегда понимал, что разговор пишут. Индикация должна быть хорошо видна.
  3. Сертификат. Тут, наверное, понятно. Если информация получается легальным способом для, например, использования в суде, то устройство должно иметь сертификат соответствия.

Техническое задание


Теперь несколько критериев именно для нашего устройства, исходя из некого ТЗ на разработку.
  1. Габариты: не должны превышать 90×60 мм. О толщине пока не говорим — она должна быть минимально возможной.
  2. Масса: 35–45 граммов.
  3. Управление: кнопка включения/выключения записи.
  4. Индикация записи/ошибок, чтобы знать, когда сел аккумулятор или закончилось место на носителе.
  5. Запись одновременно с двух аналоговых петличных микрофонов на разных каналах. Длина проводов до одного метра.
  6. Хранение файлов: внешняя microSD карта либо внутренний носитель.
  7. Время записи: 20 часов.
  8. Выгрузка файлов на ПК: USB-C (+ зарядка аккумулятора).

Весь софт будет писать Алексей (a3x). Мы с ним частенько делаем парные проекты.

Когда с ТЗ все ясно, можно приступать к реализации проекта. Самым сложным кажется будет уложиться в массу и в часы работы устройства, так как емкость аккумулятора зависит от его объема, и, соответственно, массы.

Аудио


Первым делом я приступил к разработке аудио-части. Из техзадания известно, что нам необходимо иметь два независимых выносных микрофона. Это тянет за собой использование аудиокодека. Я даже не стал рассматривать цифровые микрофоны с каким-либо длинным проводным интерфейсом. Точнее мы об этом подумали и идею отмели.

Обычно в проектах, связанных с записью/воспроизведением звука, я использую один из двух кодеков: ADAU1761 или SGTL5000. Оба они, так или иначе, покрывали все наши потребности. Первый из них помимо стандартных входов/выходов имеет мощный встроенный DSP-процессор для работы со звуком. Незаменимая вещь, если нужно не просто принять и/или вывести звук, но и обработать его, микшировать каналы, добавить шумодав, фильтры и т. д. Второй для более простых решений, но, как мне кажется, более распространенный.

Посмотрел я на стоимость этих чипов и ужаснулся. По прикидкам стоимость SGTL5000 будет выше, чем все остальное, включая аккумулятор. Начал присматриваться к другим производителям и открыл для себя Nuvoton NAU88C22YG. Отличный 24-битный стерео кодек. Вот его-то я и буду использовать в этом проекте. Некоторое время назад имел дело с I2S усилителем TAS2505IRGER — это по факту кодек без аудио входов. Рассудил, что должно быть что-то подобное для микрофонов, но, к сожалению, ничего устраивавшего по цене и наличию не нашел.

gxc0jiovgu3iczwnxbsql5nq8mq.png
Рис. 1. Структурная схема NAU88C22YG.

Из структурной схемы видно, что все необходимое у нас присутствует, а цена позволяет забыть о наличии аудиовыходов.

zuxcfmdce9oocl5wwu22-te78zm.jpeg
Рис. 2. Схема включения кодека NAU88C22YG.

Схема стандартная, но так как это макет, предусмотрел два режима работы кодека (внешний генератор, либо MCLK от микроконтроллера). На всякий случай добавил цифровой микрофон MP34DT06JTR (который не заработал, как мы не пыжились, из-за отсутствия Sigma-Delta modulators (DFSDM) в контроллере), параллельно входам для петличных микрофонов «повесил» электретный (для тестов). Даже сделал возможность вывода звука на разъемы, что мы, конечно, не проверяли. Рабочей оказалась схема с внешним генератором на 12,288 МГц и кодеком в режиме мастера (подробности в статье у Алексея, которая выйдет позже).

Микроконтроллер


Было сильное желание взять чип, с которым неоднократно работали ранее, но победил здравый смысл и желание реализовать 20 часов записи. После некоторых изысканий был выбран STM32L432KCU6, который мы забили «под завязку».

apcuqtz2hhgm0b0bm0xtsn9x3ak.jpeg
Рис. 3. Схема распределения GPIO микроконтроллера STM32L432KCU6.

Казалось бы: кодек, SD-карта, светодиод (или два) и кнопка. Но все GPIO кончились. Нужно ведь зарядку мониторить, индикацию сделать, отслеживать заряд аккумулятора и уметь этот монитор отключать, чтобы энергию беречь.

Кнопка включения заведена на вывод PA0 микроконтроллера (WakeUp), что позволит уводить его в глубокий сон (режим stop) между сеансами записи, не используя при этом переключатель для полного обесточивания.

Получается кодек подключен по SAI (более универсальный, чем I2S), конфигурится по I2C. На прототипе решили установить не только разъем для microSD-карты, но и микросхему SD-карты (MKDN128GCL-ZA). Работают по SPI, выбираются «Chip Select» — разными пинами контроллера. Не знаю пригодиться или нет, но реализовал режим отключения питания кодека и накопителя. Напряжения питания формирую LDO: TP6217C33M5G (800 мА) и RT9193–18GB (300mA, Ultra-Low Noise для питания кодека).

Из непредвиденного — это GPIO PA2. Оно управляет питанием SD-карты через пару транзисторов (P + N). При установке этого пина (лог. 1) в любом месте кода происходит отвал отладчика. С чем связано — так и не поняли. Другое GPIO с этими же транзисторами работает отлично, то есть в схеме ошибки нет это все программисты виноваты.

Печатная плата


Как я уже говорил, места на плате вагон. Экономить смысла не вижу, поэтому взял да и установил аккумулятор прямо на плату.

4f2j_7s3j7rusk8yhcikssqnre8.png
Рис. 4. 3Д вид платы с аккумулятором.

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

Также добавил несколько крепежных отверстий и разъем для программирования: помимо обычной штыревой линейки для прошивки во время отладки, установил классический «Segger 10p J-Link Debug» для завода. Один светодиод — около разъема USB-C (индикация процесса/окончания зарядки), второй — между разъемами микрофонов (индикация включенной записи). На другой стороне компонентов нет. Есть где ужаться по габаритам, особенно если просто выкинуть все лишнее.

Плату решил разводить на четырех слоях, так как из-за наличия PDM микрофона и других отладочных вещей никак не получалось нормально отделить аналоговые линии от цифровых на двух слоях. Макет — имею право. На данном этапе необходимо проверить возможность самой реализации по микросхемам, габаритам, массе и времени непрерывной работы. Будет два слоя — отлично, меньше меди. Плату можно сделать 1 мм —тоже экономия массы.

Для SPI и SAI интерфейсов сделал контроль длин, чтобы точно исключить проблемы с передачей данных, а то и так много подводных камней.

Масса и время работы


На данный момент мы имеем аккумулятор 800 мАч. Время непрерывной записи одного канала звука составило приблизительно 16,5 часов (16 бит, 16 кГц). Причем это без каких-либо ухищрений со стороны программного обеспечения.

Масса устройства без корпуса составляет 36 граммов не считая прошивки. В конечной версии необходимо будет обрезать лишний кусок платы под аккумулятором, но в целом, думаю, укладываемся. Толщина платы диктофона с учетом разъемов и аккумулятора получилась 6 мм.

Когда рисовал схему, сделал грубые прикидки энергопотребления. По расчетам получается примерно 14 часов, но это так — плюс-минус лапоть. Хотя почти сошлось.

399uwdx_6tjbl87pat3nhto0hxi.png
Рис. 5. Расчет потребления.

Сейчас мы работаем исключительно в «Run Mode». Скорее всего придется поиграться с настройками кодека в разных режимах работы — все покажут дальнейшие тесты.

Итоги


Проект оказался довольно интересным. Носимыми устройствами занимаемся достаточно редко, что немного расстраивает. Еще предстоит много работы по софту, так как добавив второй канал записи мы неизбежно потеряем во времени записи звука. Увеличив аккумулятор — получим прирост в массе. Возможно, придется перейти на контроллер STM32L452, чтобы копить больший буфер и реже писать на SD-карту.

Отдельная тема — это корпус. Для сохранения минимальной массы необходимо отказаться от крепежных винтов в пользу защелок, учесть толщину и многое другое, но, как говорится, это уже совсем другая история.

cl4ctiwscq2mnrvwck7glb2nvho.jpeg
Рис. 6. Внешний вид платы диктофона (фоткал на утюг).

Спасибо за внимание и успехов!

© Habrahabr.ru