Alvaros
.
- Регистрация
- 14.05.16
- Сообщения
- 21.452
- Реакции
- 101
- Репутация
- 204
Наконец то у меня добрались руки до сборки минимального аналога Espressif Systems плат на ESP32 микроконтроллере.
На плате расположен микрофон, усилитель для этого микрофона на одном транзисторе. Усилитель для динамика на трех транзисторах с выходным каскадом работающим в режиме AB. OLED дисплей 128x64 SSD1306
Плата проектировалась и разводилась в 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
Теперь уже можно запустить что-то со звуком. Что касается примеров рассчитанных на внешний ЦАП тут все просто, в настройках конфигурации добавляем 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();
В частности это изменение для примера
Есть пример который выдает синусоидальный сигнал
Замена использования внешнего АЦП на внутренний так же возможна, но это будет несколько сложнее. Я это делаю примерно так
#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;
Продолжение сборки и запуск примеров в видео:
Используя эти подходы по замене внешнего ЦАП и АЦП на встроенный мне удалось запустить такие примеры как:
И многие другие
На плате предусмотрена разводка под джойстик 4+1 кнопки, так что можно реализовать мини консоль Arduboy
Запустить
В заключении хотел отметить, что я вывел на плате некоторые неиспользованные порты GPIO для подключения периферии. Возможность подключения внешнего ЦАП и АЦП все еще остается, что надо проверить
Материалы по теме
На плате расположен микрофон, усилитель для этого микрофона на одном транзисторе. Усилитель для динамика на трех транзисторах с выходным каскадом работающим в режиме AB. OLED дисплей 128x64 SSD1306
You must be registered for see links
предоставляет богатую функциональную 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. Например сканирования сети
Далее распаиваем усилитель для динамика и микрофона. Про использование усилителей для микрофона и динамика можно прочитать в статье
You must be registered for see links
Настраиваем резистором 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();
В частности это изменение для примера
You must be registered for see links
позволяет получить на этой плате BlueTooth динамикЕсть пример который выдает синусоидальный сигнал
You must be registered for see links
Замена использования внешнего АЦП на внутренний так же возможна, но это будет несколько сложнее. Я это делаю примерно так
#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;
Продолжение сборки и запуск примеров в видео:
Используя эти подходы по замене внешнего ЦАП и АЦП на встроенный мне удалось запустить такие примеры как:
You must be registered for see links
You must be registered for see links
You must be registered for see links
И многие другие
На плате предусмотрена разводка под джойстик 4+1 кнопки, так что можно реализовать мини консоль Arduboy
Запустить
You must be registered for see links
пока не удалось. Но думаю у меня возникли проблема с настройками протокола. Так что пока в процессе. Но опять же, библиотека SIP в примере закрытая. Есть пример на Github
You must be registered for see links
с другой и открытой реализацией SIP библиотекиВ заключении хотел отметить, что я вывел на плате некоторые неиспользованные порты GPIO для подключения периферии. Возможность подключения внешнего ЦАП и АЦП все еще остается, что надо проверить
Материалы по теме
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links



