Русский
Русский
English
Статистика
Реклама

ESP32 development board с кастомным дизайном

Наконец то у меня добрались руки до сборки минимального аналога Espressif Systems плат на ESP32 микроконтроллере.

На плате расположен микрофон, усилитель для этого микрофона на одном транзисторе. Усилитель для динамика на трех транзисторах с выходным каскадом работающим в режиме AB. OLED дисплей 128x64 SSD1306



Espressif Audio Development Framework предоставляет богатую функциональную SDK которая работает все стабильнее с каждым релизом. Не без своих косяков конечно. Есть у нее и минусы. Например некоторые библиотеки предоставляются без исходных кодов. В линейке плат не было версии с использованием внутреннего ЦАП и АЦП для обработки звука. Конечно для чего-то серьезного такой подход не подойдет. И разрядность встроенного АЦП 12 бит и ЦАП 8 бит накладывает некоторые ограничения. Да и шумят эти встроенные модули не слабо. Но хотелось попробовать сделать если уж не VoIP телефон, то пример Google Translator и TTS Text-To-Speech постараться запустить. Как это у меня получилось читайте под катом


Плата проектировалась и разводилась в Eagle Autodesk.



ESP32 Module Amplifiers



OLED Display



Поднимать плату будем традиционно с питания. Распаиваем разъем питания, стабилизатор напряжения питания и конденсатор на выходе это стабилизатора. Замеряем напряжение питания. На входе 5V после стабилизатора должно быть 3.3V

Плата задумывалась работать в переносном варианте с питанием от аккумулятора. Для этого предусмотрен чип IC2 отвечающий за заряд батареи TP4056 и схема барьера на полевом транзисторе Q3 и диоде Шоттки D3. Стабилизатор питания сделан на HT7833. Он обеспечивает малое падение напряжения и достаточный для питания схемы ток

Цепь зарядки нас пока не интересует, поэтому кинем перемычку с разъема питания прямо на вход HT7833. Померяем что на выходе и приступим к распайке самого модуля ESP32



Надо распаять цепь Reset и кнопку PROG которую надо удерживать для перевода контроллера в режим программирования. Пины для подключения UART адаптера RX-TX нужны для соединения платы с компьютером

Теперь можно подключать плату к компьютеру через USB-to-UART адаптер и запустить какой нибудь пример esp-idf. Например сканирования сети



Далее распаиваем усилитель для динамика и микрофона. Про использование усилителей для микрофона и динамика можно прочитать в статье Микрофонный усилитель и УНЧ для ЦАП и АЦП микроконтроллера

Настраиваем резистором R15 половину напряжения на эмиттерах T3 и T4 в схеме усилителя динамика. У меня подошел резистор 33К. R17 можно поставить поменьше 1K 4.7K если усиления будет недостаточно. Он ограничивает усиление и выступает в качестве делителя напряжения

Для усилителя микрофона резистором R10 подбираем на коллекторе транзистора T2 напряжение в районе 0.6V...1.2V. Чем больше смещение при слабом сигнале, тем больше потери на разрядности АЦП. Так как у нас один каскад усилителя на одном транзисторе, амплитуда сигнала будет не большая. Я поставил 100К и получил 0.85V. Полная амплитуда сигнала full-scale voltage будет 1.7V что можно компенсировать аттенюатором на входе АЦП взяв например ADC_ATTEN_DB_2_5

Напомню про градации аттенюатора на входе АЦП ESP32

  • 0 dB attenuation (ADC_ATTEN_DB_0) gives full-scale voltage 1.1 V
  • 2.5 dB attenuation (ADC_ATTEN_DB_2_5) gives full-scale voltage 1.5 V
  • 6 dB attenuation (ADC_ATTEN_DB_6) gives full-scale voltage 2.2 V
  • 11 dB attenuation (ADC_ATTEN_DB_11) gives full-scale voltage 3.9 V


Теперь уже можно запустить что-то со звуком. Что касается примеров рассчитанных на внешний ЦАП тут все просто, в настройках конфигурации добавляем I2S_MODE_DAC_BUILT_IN

i2s_config_t i2s_config = {        .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN,...


Или при использовании esp-adf audio development framework

struct i2s_stream_cfg_t i2s_cfg = I2S_STREAM_INTERNAL_DAC_CFG_DEFAULT();


В частности это изменение для примера pipeline_bt_sink позволяет получить на этой плате BlueTooth динамик

Есть пример который выдает синусоидальный сигнал dac-cosine

Замена использования внешнего АЦП на внутренний так же возможна, но это будет несколько сложнее. Я это делаю примерно так
#define I2S_STREAM_CFG_1() {                                              \    .type = AUDIO_STREAM_WRITER,                                                \    .task_prio = I2S_STREAM_TASK_PRIO,                                          \    .task_core = I2S_STREAM_TASK_CORE,                                          \    .task_stack = I2S_STREAM_TASK_STACK,                                        \    .out_rb_size = I2S_STREAM_RINGBUFFER_SIZE,                                  \    .i2s_config = {                                                             \        .mode = I2S_MODE_MASTER  | I2S_MODE_RX | I2S_MODE_TX | I2S_MODE_ADC_BUILT_IN | I2S_MODE_DAC_BUILT_IN,                    \        .sample_rate = SAMPLE_RATE,                                                   \        .bits_per_sample = I2S_BITS_PER_SAMPLE,                                                  \        .channel_format = I2S_CHANNEL_FMT,                           \        .communication_format = I2S_COMM_FORMAT_I2S_MSB,                            \        .dma_buf_count = 4,                                                     \        .dma_buf_len = 512,                                                     \        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,                               \    },                                                                          \    .i2s_port = I2S_NUM_0 \}


И заменяю дефолтный конфиг esp-adf framework на свой

i2s_stream_cfg_t i2s_cfg = I2S_STREAM_CFG_1();i2s_cfg.type = AUDIO_STREAM_READER;


Продолжение сборки и запуск примеров в видео:



Используя эти подходы по замене внешнего ЦАП и АЦП на встроенный мне удалось запустить такие примеры как:
pipeline_http_mp3
pipeline_bt_sink
google_translate_device



И многие другие

На плате предусмотрена разводка под джойстик 4+1 кнопки, так что можно реализовать мини консоль Arduboy

Запустить VoIP пока не удалось. Но думаю у меня возникли проблема с настройками протокола. Так что пока в процессе. Но опять же, библиотека SIP в примере закрытая. Есть пример на Github sip_call с другой и открытой реализацией SIP библиотеки

В заключении хотел отметить, что я вывел на плате некоторые неиспользованные порты GPIO для подключения периферии. Возможность подключения внешнего ЦАП и АЦП все еще остается, что надо проверить

Источник: habr.com
К списку статей
Опубликовано: 28.06.2020 02:16:08
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Diy или сделай сам

Гаджеты

Программирование микроконтроллеров

Производство и разработка электроники

Электроника для начинающих

Esp32 звук контроллер гаджет diy

Категории

Последние комментарии

© 2006-2020, personeltest.ru