![]() |
![]() |
||||||||||||
Цифровая детская рация
Автор: ZUB "Общий объём работы всегда будет увеличиваться, чтобы заполнить собой всё отпущенное на работу время. Первый закон Паркинсона" От устройства - детской рации, хотелось получить нечто компактное, моломощное, да такое, что бы никакой условный охраннник из ближайшего супермаркета не смог прослушать наши с дочкой секретные шпионские переговоры. Для этого было решено передавать звук в цифре китайским модулем на микросхеме Si4432. Так же у меня давно лежали без дела цифровые микрофоны от какой-то старой нокии. Это цифровой PDM (Pulse-density modulation) микрофон. На его вход CLK подаются тактовые импульсы, а с выхода снимается цифровой сигнал в виде последовательности импульсов, плотность которых пропорциональна амплитуде звука. Для преобразования этой последовательности одноразрядных выборок с высокой частотой дискретизации в PCM сэмплы необходимо "обенять" частоту на разрядность. Делается это при помощи децимации - прореживания. Прореживание - это просто выбор одной из каждых М выборок. Это снижает частоту дискретизации в М раз. Пока сигнал не имеет частот выше половины выходной чатоты дискретизации, децимация выполняется без потерь. Однако, если присутствуют частоты, превышающие половину выходной частоты дискретизации, они будут наложены на выход, вызывая наложение спектров (алиасинг). Решение состоит в том, чтобы объеденить прореживание с фильтром нижних частот, где фильтр нижних частот имеет достаточно высокий уровень подавления в полосе заграждения, чтобы обеспечить приемлемый уровень искажения от наложения спектров. Для этого применяются CIC (cascaded integral-comb filters CIC) или по-русски – каскадные интегрально-гребенчатых фильтры Хогенауэра. CIC фильтр сам по себе есть не что иное, как фильтр нижних частот (ФНЧ). То есть такой фильтр пропускает нижние частоты спектра, обрубая верхние за частотой среза. АЧХ фильтра строится по закону ~sin(x)/x. Главное преимущество CIC фильтров состоит в том, что они совсем не требуют операций умножения (в отличие от другого типа фильтров, например, КИХ). Так же его особенностью является то, что при децимации таким фильром растёт разрядность выходного сигнала пропорционально порядку фильтра, то есть и происходит тот самый "обмен" частоты на разрядность. Принято считать полосу частот голоса человека от 300 Гц до 3400 Гц, для чего достаточно иметь частоту дискретизации 8кГц. Частота тактовых импульсов для микрофона выбрана 512 кГц, то есть при прореживании на 64 мы получим частоту дискретизации 8 кГц. В Application note от ST (AN5027) описаны варианты подключения такого микрофона к микроконтроллерам STM при помощи следующих интерфейстов:
Для устройства хотелось использовать микроконтроллер STM32F103RBT6 (опять же, потому что они у менябыли), хотя вполне хватило бы и контроллера STM32F103C8T6, как на довольно популярной плате BLUE PILL. Из всего вышеперечисленного у этого контроллера есть толко SPI модуль. В аппноте от ST предлагается настроить SPI в режиме Receive only master и тактировать микрофон от тактового выхода SPI. Для получения необходимой частоты CLK используются множители и делители PLL микроконтроллера. Однако в STM32F103RBT6 синтезатор довольно скудный и получить тактовую частоту в 512 кГц не получается. Поэтому для тактирования был применен более гибкий в настройках таймер и его ШИМ выход, настроенный на частоту 512 кГц. Интерфейс SPI настроен как Receive only Slave, и на его тактовый вход подается (физически замкнув ножки выхода ШИМ и входа SPI CLK) ШИМ. Этот же сигнал подается и на тактовый вход микрофона. Прием битов в SPI модуль микроконтроллера осуществляется по 16 бит, вызывая в программе прерывание. Для передачи сырых 16-ти разрядных выборок с частотой дискретизации 8кГц по радиоканалу понадобилась бы довольно высокая скорость передачи данных, более 128 кбит/c, а значит снижение чувствительности трансивера Si4432 и уменьшение радиуса действия рации, а так же расширение занимаемой полосы частот. Для решения этой проблемы применяются кодаки, позволяющие сжимать передаваемый звук, с потерями качества или без. В качестве такого решения был выбран кодак SPEEX, по причине имеющейся библиотеки для STM и довольно подробного описания в различных статьях радиолюбителей. Вывод звука осуществляется при помощи ШИМ, что дает разрядность 11 бит при частоте 35 кГц. Далее сигнал фильтруется фильтром нижних частот на ОУ и подается на УМ. Так же был опробован выриант с микроконтроллером STM32F103RCT6, у кторого на борту имеется 12-ти битный ЦАП. Однако глобальной разницы в качестве воспроизводимого звука я не услышал. В рации предусмотрено 5 частотных каналов, переключаемых кнопкой "channel". При переключении каналов синтезированный женский голос произносит номер выбранного канала, что позволило отказаться от использования дисплея. В прошивке на каналы назначены следующие частоты: 1. 433.325 МГц 2. 433.625 МГц 3. 434.775 МГц 4. 446.005 МГц 5. 446.100 МГц Частоты можно поменять в исходнике в файле "main.h". Мощность передатчика 20dBm, скорость передачи 12 кБит/с, частота девиации 20 кГц, включена проверка контрольной суммы. Все настройки трансивера можно поменять в файле Si4432.h. Потребление устройства удалось сделать довольно низким, в режиме приема устройство проработало от старой батареи Sony-Ericsson 900мАч двое суток, для этого используется режим сна у контроллера с пробуждением по внешнему прерыванию либо от кнопок либо от трансивера при принятом валидном пакете. При неактивности более 1 минуты (не был принят валидный пакет или не была нажата кнопка) трансивер переходит в режим сна с периодическим просыпанием и приема пакетов. То есть, когда устройство спит, после бездействия более 1 минуты, приемник принимает не непрерывно а периодически, то просывпаясь то вновь засыпая, поэтому первые пакеты при приеме скорее всего не будут приняты и возможна потеря первых пару сотен миллисекунд разговора. Фото того, что получилось: Кнопки применены от старых мобильных телефонов, толкатели - от кнопок пульта телевизора. Возле трансивера находится двухцветный светодиод, для индикации приема (зеленый) либо передачи (красный). Корпус применен стандартный, производства Gainta, модель G1906. Под платой находится Li-Ion аккумулятор. Зарядка выполнена на микросхеме LTC4054. Усилитель на микросхеме TPA6211.
После сборки устройства выяснилось, что при передаче с закрытой крышкой, в которой имеется отверстие с трубочкой для прохождения звука в микрофон, звук получался бубнящим и низкочастотным, за счет большого объема пространства внтури корпуса Для решения этой проблемы придуман специальный "пиптых" из вспененного материала: После такой доработки звук нормализовался.
Еще немного фоток устройства:
На плате предусмотрены разъемы для програмирования и подключения UART. Так же через UART выводятся принимаемые пакеты, что позволяет произвести запись переданного звука в формате speex на компьютер. Пример такого принятого и декодированного звука прилагаю в архиве. Прилагаю архив с печатной платой (P-CAD 2006) и проектами для STM32CubeIDE.
Файлы: Все вопросы в Форум.
|
|
||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |