STM-32 Минимальная аудио плата

    В ожидании часов спроектировал девайс на STM32. По функциональности задумывалось реализовать простой диктофон или плеер и посмотреть на сколько возможна обработка звука на STM32F103 семействе, хотя бы с использованием Fixed-Point.



    Для реализации минимальной аудио платы я взял контроллер который имеет ЦАП, АЦП и может работать с СД картой не только по SPI но и желательно через SDIO. STM32F103RCT6 подходит. Заказал 5 штук на Али за 7$ с копейками, на случай если что-то пойдет не так. Дисплей и горсть электретных микрофонов лежит в запасах. Кварцевые резонаторы думаю взять в ЧипДип.

    Разрабатывать в среде разработки STM32CubeIDE32 очень удобно. Можно сконфигурировать HAL в CubeIDE, а потом делать схемотехнику соединений.



    Характеристики контроллера


    STM32F103RCT6 3xADC 1xDAC, SDIO, USB. На нем есть еще I2S. В дальнейшем можно подключить аудио чип.

    Для дебага и заливки используем выводы SWDIO SDCLK. Можно прошивать через UART или USB, но я не пробовал STM32F103 Bootloader (загрузчик). STM32 — входим в bootloader по кнопке.

    STM32F103RCT6




    Схема подключения контроллера. Дисплей подключается по I2C1. Перемычкой SJ3 можно выставить адрес по которому можно обращаться к дисплею 0x7A или 0x78.

    128x64 OLED




    Карточка подключается по SDIO. Можно также подключить по SPI, но скорость обмена будет медленнее. SDIO в моем случае работает по 4-ем линиям и коме того SPI интерфейс для карты памяти не «родной» Я подтянул кверху часть выводов, остальные подтянутся программно. Без программной подтяжки будет задействована одна линия.

    SD CARD




    Усилитель для микрофона и наушников это TS922 двойной операционный усилитель. Как я уже писал в статье он тянет до 80 мА, что вполне достаточно для наушников. Вторая часть микросхемы это усилитель микрофона. Конденсаторы в цепи обратной связи это фильтр высоких частот. Коэффициент усиления K = 1 + Rос/R или 1 + 5100 / 510 = 11 на примере усилителя для наушников. Как рассчитать другие элементы есть в той же статье. Я сделал общий делитель напряжения для задания смещения на входе операционника. тем самым сэкономив пару-тройку компонентов. Хорош ли такой подход? Было исправлено по совету Хабровчан

    Amplifiers




    Питание сделано через USB LM1117-3.3V.



    Добавлено 6 кнопок и некоторые выводы выведены наружу.



    P.S. Пока проектировал плату на stm32f103 наткнулся на серию STM32F411. По цене в 2-3 доллара полноценное ядро CortexM4!
    Arm Cortex-M4 32b MCU+FPU, 125 DMIPS, 512KB Flash, 128KB RAM, USB OTG FS, 11 TIMs, 1 ADC, 13 comm. interfaces

    На нем уже можно и с DSP поиграться. Реализовать IIR фильтр и ревербератор и много еще чего.

    Realtime Audio DSP on STM32F4



    Но это уже будет другая история.

    Autodesk Eagle:



    STM32AudioLCDMinimal

    Замечания и предложения приветствуются.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 45

      +5
      Лучше не экономить на совмещении цепей смещения ОУ по крайней мере в каскадах противоположного назначения — микрофонном и выходном. Я понимаю, если был бы стереовыход и одна цепь на смещение для обоих выходных ОУ — тогда crosstalk был бы незаметен. А тут выход ЦАП будет неплохо раскачивать среднюю точку (т.к. его выходное сопротивление — 27кОм против 15кОм резисторы делителя в параллель). Коэффициент усиления микрофонного каскада судя по номиналам — больше 200, поэтому по НЧ мы должны получить очень заметную ОС.
      Конечно, шунтирование делителя 1u0 и НЧ-фильтр в цепи ООС 330 * 3u3 ситуацию сгладит, но все равно — даже если в нижнем диапазоне мы получим на выходе в АЦП порядка -20..-30dB от выхода ЦАП — это будет адом. Я бы промоделировал аналоговую часть этого решения в каком-нибудь симуляторе, прежде чем класть на печать. Если уже поздно — хотя бы поставить электролит не меньше 100u в делитель
        0
        Лучше не экономить на совмещении цепей смещения ОУ по крайней мере в каскадах противоположного назначения — микрофонном и выходном.

        Возможно, схема в статье уже обновлена… и в ней — раздельные цепи смещения для усилителей.
        Хотя объединить, в принципе, — можно. Сделать инвертирующие усилители с общей цепью смещения, в которую не поступают сигнальные токи. C11 встанет вместо C25. А нижный вывод R10, наверное, можно будет подключить напрямую к микрофону, выкинув C13, C15, C16, R12 и R13.
        На IC3G2, пожалуй, — лучше изобразить ФНЧ второго порядка.

          0
          Да, автор уже обновил схему. Инвертирующие усилители сделать можно было бы, но их сложно сделать одновременно с большим коэффициентом усиления и с высоким входным сопротивлением. Хотя… для выходного усилителя выход ЦАП нагружен на 27 кОМ, коэффициент усиления 10 — значит резистор ОС 270кОм — в приниципе, вполне катит.
          Микрофонный — к.у. больше 200, выходное электрета — пара кОм, нагружать нужно ЕМНИП минимум килоом на 10, значит в цепи ООС — больше 2МоМ, а это уже многовато — будет сильно срезать ВЧ.
            0

            В данном случае получится нагрузка микрофона на трансимпедансный усилитель. КМК, сопротивление в ОС может быть порядка десятка кОм.

              0
              Если бы электретный микрофон был бы источником тока — то да. Но по переменке по схеме включения микрофона — выходное сопротивление равно величине верхнего плеча резистора подтяжки, после конденсатора фильтра. То есть микрофон — источник напряжения с внутренним сопротивлением 2.2 кОм.
              Значит, если мы сделаем входной резистор в инверсном включении ОУ подобного номинала, то ни за что получим ослабление сигнала в 2 раза еще на входе, который затем придется усиливать не в 200, а в 400 раз. Поэтому входное сопротивление усилителя нужно делать в несколько раз выше, чтобы не вводить зря сильного ослабления
                +1

                На практике не исследовал. Но "ковбои" — не видят препятствий.

                  0
                  Посмотрел ref design ковбоев — у них внутреннее сопротивление микрофона используется в качестве одного из плечей делителя ООС. Если оно специфицировано, его отклонение нормировано не хуже, чем нам нужно, и его величина не зависит от звукового давления (иначе введем нелинейные искажения) — то конечно так можно делать.
        0
        Не подумал. Думал на делителе будет жестко половина напряжения, 10u и 0.1u полностью справятся, что если стабилитрон поставить или LM1117-1.8v вместо резисторного делителя?
        может поднять R8 R9 до 100k?
        Уже на фабрике. Мне еще не удавалось с первой итерации все как надо без ошибок, так что это как одно из исправлений пойдет
        Спасибо
          +1

          Резисторы смещения 470к и выше. Между ЦАП и выходным буфером — не видно разделительного конденсатора.
          АЦП, на сколько помню, хочет выходное перед собой до 50кОм.
          Выходному усилителю надо Ку от силы х4.
          Входному — потенциометр на гейн и прогнуться между выходным мика и требованиями АЦП.


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

          0

          Электроника тут — это самое простое.
          Веселье будет с софтом — usb и dma.


          Выход можно заставить качественнее звучать используя сигма-дельта надстройку над ШИМ, если есть оверсэмплинг.


          А DSP типа Spin FV-1 на фиксированной точке легко эмулируется. Там из затрат — только имитация кольцевого буфера. А где он не нужен (фильтры, компрессоры) — все несложно.

            0
            Выход можно заставить качественнее звучать используя сигма-дельта надстройку над ШИМ, если есть оверсэмплинг.


            Зачем ШИМ, в контроллере же 12-bit D/A converters
            или можно как то хитро сконфигурировать ЦАП?
              0
              Извиняюсь, глаз замылен на CBT6, в нем нет i2s и ЦАП.
              Выше писал, что схожим методом (игрой младшего бита в сигму-дельту) ненапряжно делал 13 бит на 405м. на 103 тоже должно подойти.
              12 бит — очень хорошее качество, само по себе, бобинный магнитофон. На которых записано много великой и не очень музыки, вплоть до 90х.
              Даже 8 бит — качество кассетника. Но это все ЦАП и вариации. С АЦП у STM32 все не очень хорошо.
          +2
          Как боретесь с шумом по питанию от SD-карты (чириканье при чтении/записи) и при работе OLED (постоянное гудение)?
            0
            У Вас аналоговая и цифровая земля не разделены? Вот навскидку: Design Considerations for Mixed-Signal PCB Layout
            Grounding Data Converters and Solving the Mystery of «AGND» and «DGND»
              +1
              Нет, дело не в разделении земель, при сильных помехах по питанию это не полное решение. Проблема в подобных конструкциях (МК+SD+OLED) в последнее время довольно распространена, много тем в интернете, но таких, где автор нашёл решение и отписался о нём, пока не попадалось. Народ предлагает обвешивать все потребители наборами конденсаторов 10-0.1-.01 мкф, ставить дроссели на питание, даже менять частоту рефреша OLED, но что-то не очень помогает. Некоторые предлагают радикальные решения, типа отказа от OLED; также в продаже немало 'малошумящих' SD карт для аудиотехники.

              За ссылки спасибо, конечно.
                0
                дык, питать всех от низкошумных LDO и всё. Дроссели (на НЧ, а не ферритовые бусины) — само-собой, как и кондеры с низким внутренним.
                  0
                  В моём случае эксперимент показал, что питание от отдельных LDO не помогает совершенно — было три штуки, на МК, SD/OLED и усилитель отдельно. Дроссели тоже практически не влияют на уровень шума.
                    +1
                    виновата разводка внутри корпуса и внутри кристалла — это плата за совмещенные функции портов ВВ — сильные токи цифровых выходов шумят на конечных сопротивлениях топологии. Нужен либо внешний ЦАП, либо… еще один копеечный STM32, который будет заниматься чисто цифро-аналоговым преобразованием, получая поток в цифровом виде от основного МК. Если это удастся сделать без квитирования приема с его стороны (то есть без единой ноги порта, настроенной на вывод), то должно получиться тихо :)
                      +1
                      STM32 надо учиться укладывать STM32 спать, до конца измерений АЦП, тогда может и будет толк.
                      ЦАП на 405х вполне выжимает 13 бит, если младшим битом играть в сигму-дельту и не использовать встроенный ОУ. А 13дБ, это уже ближе к компакт-диску. С АЦП там, к сожалению, все ощутимо грустнее.
                      +2
                      Значит, надо поработать над разводкой и экранированием еще.
                      В моих проектах типовой OLED (ssd1306 на i2c, или как он там) вообще не влиял на шум. Кодеком был ADAU1701.
                      WM8731 АЦП шумноват, хотя 70+дБ выжимал вполне. Для микрофонных дел — его более, чем достаточно. Но, для асахи зато i2c тянуть не надо.
                      С АК4556 все вообще великолепно. ЦАП 20 бит — без напрягов. АЦП — на уровне.
                      А референсные схемы на нем четко говорят, питать аналоговую часть через «электронный дроссель», т.е. повторитель с небольшим дропом, тогда шума будет ощутимо меньше.

                      Но, мы в команде прям реально заморочены на качестве.
                        0
                        У меня и у других страдальцев типовой SSD1306 (у меня i2c) не то, что шумит — он буквально гудит на частоте около 100 Гц с изменениями в зависимости от изображения. Не только по питанию, но и физически — слышно голым ухом. Изменение частот развёрток и прочих настроек меняет частоту гудения.
                          +2
                          Гул — в АЦП или ЦАП? АЦП на входе надо рубить постоянку, лучше 4-6 порядком. Иначе гуляющее смещение дает гул.

                          Дисплей питать отдельно. Если он вдали на проводах, то сажать на 5В через повторитель (1-1.5 вольт дропнется и будет 3.5 — 4В, ему — все равно) и кондеры пожирнее, и покачественнее на повторитель поставить. А может и повторитель с LDO после.

                            0
                            Про 4й порядок — это уже оцифрованный сигнал фильтруется и вырезается все, что ниже 10-15 Гц, если что.
              0
              На нем есть еще I2S. В дальнейшем можно подключить аудио чип.

              Лучше сразу аудиочип воткнуть, тогда можно без ОУ обойтись.

                0
                Это уже будет не Minimal
                Так то я не против поставить akm4452 или akm4490
                Заказал на Али. Посмотрим
                  0
                  Тогда полная халява, только питание кодека отфильтровать не хуже, чем в даташите. LDO на 3 вольта был, на сколько помню.
                +1
                Я недавно делал мини проект с использованием i2s Цап + усилитель на микросхемке Max98357. 3 ватта и i2s интерфейс в крошечной микросхемке. Читал звук из spi flash и выводил в i2s через dma. Понравилась такая связка.
                  +6
                  Заказал 5 штук на Али за 7$

                  Запомните господа, никогда НИКОГДА не покупайте популярные микросхемы дороже 100 рублей на али, а особенно МК 103 серии или avr attiny.
                  Что на хабре, что на других ресурсах (изиэлектроникс к примеру) куча статей с глючными МК, купленными на китайских развалах.
                  Скупой платит трижды. Ну не может быть все так хорошо с чипами, которые делает одна фирма, продающимися ДЕШЕВЛЕ чем на офф сайте. Это брак или копия, решайте сами.
                  www.st.com/content/st_com/en/sample_and_buy/sample-and-buy/buy-from-estore/estore-results.html?searchText=STM32F103RCT6
                  В лучшем случае это перемеркированные GD32F103, в худшем это дико рандомные баги.
                  В целом по приходу чипов можно проверить на контрафакт — unique id будет одинаковый.
                  Хотя возможно уже китайцы и об этом позаботились.
                    –1
                    … ошибка выжившего применительно «куча статей с глючными МК, купленными на китайских»
                      +1
                      Это опасный соблазн, когда утверждается что «у меня все работает» поскольку никто в полной мере не задействует всю периферию во всех ее конфигурациях, не заполняет весь флеш и ОЗУ.
                        0
                        «у меня все работает» нет смысла идеализировать, устройство должно выполнять в полной мере поставленные/предъявляемые задачи\ТЗ\тесты\надежность, не более.
                          +1
                          Забиваю МК и ОЗУ под завязку. Имею обратный опыт. И коллег, которые прибегают за моими личными запасами «неправильных» МК, когда от статики или иных причин сгорают все правильные и новые едут в дороге.
                          Попадались уже прошитые чипы. Но снести прошивку заняло 5 минут.
                          Попадались старые, паста и кварцевая печь с ними не очень дружили, припаивали руками, в итоге. В остальном, али чипы вполне сносные.
                          stm32h7 там купил, норм, хоть и 400МГц, а не 480.
                          Но, кумира себе не творю.
                        0
                        Запомните господа, никогда НИКОГДА не покупайте популярные микросхемы дороже 100 рублей на али, а особенно МК 103 серии или avr attiny.

                        Оно так, но здесь проблема шире. Товарищ вначале ныряет, а потом только разбирается куда нырнул: «Пока проектировал плату на stm32f103 наткнулся на серию STM32F411. По цене в 2-3 доллара полноценное ядро CortexM4!» Типа — программирую год на C#, а вчера внезапно наткнулся на то что есть оператор цикла. Смысл кидаться на первую попавшуюся микросхему контроллера, — не гречка, всю не разберут. В чип/дип ходит, можно было посмотреть, что там есть, взять к примеру NUCLEO-F303RE за 1200р (раньше 800р) www.chipdip.ru/product1/8001825934
                        АЦП, ЦАПы, ОУ на самом процессоре, добавить надо совсем немного. Зачем надо постить про то как сделать дорого и плохо то что уже и так давно есть дешево и хорошо?
                          0
                          Вы говорите о готовой плате. И на ней нет дисплея. Размеры устройства после добавления 6-ти кнопок и дисплея вырастут в 2-3 раза
                          Плата на STM32F030R8T6 и это Cortex®-M0 а не Cortex®-M3
                          И где там
                          ОУ на самом процессоре,
                          ?

                          Мне знакомый тоже рекомендует Raspberry взять и не мучатся. Что скажете?

                          Зачем народ такие огороды городит, ума не приложу
                          The STM32F103 Audio Test Board

                          image
                            +1
                            кнопки ничего не стоят, с чего там цене растит? OLED тоже 140р в розницу. Цветной IPS — едва дороже.
                            И зачем вам цена? Тиражировать планируете?
                              0
                              Плата на STM32F030R8T6 и это Cortex®-M0 а не Cortex®-M3
                              И где там
                              ОУ на самом процессоре,
                              ?

                              При чем здесь STM32F030R8T6?
                              У меня ссылка на NUCLEO-F303RE с STM32F303RE.
                              «Mainstream Mixed signals MCUs ARM Cortex-M4 core with DSP and FPU»
                              «The devices offer four fast 12-bit ADCs (5 Msps), seven comparators, four operational amplifiers, two 12-bit DAC channels»

                              Идея в том, что «Mixed signals» проект хорошо бы делать на базе микроконтроллера предназначенного для этого, а не на базе микроконтроллера устаревшего морально много лет назад. И, чтобы не делать глупых ошибок и сделать побыстрее, лучше стартовать с платы предназначенной для этого — платы разработчика. Сделал, погонял в разных обстоятельствах, определился что нужно. ну тогда и заказывай в Китае, хоть в Ухане, хоть где еще, там наверное скидки будут.
                              +2
                              И к чему девборда nucleo? Получить девайс с кучей разноцветных продков на макетке?
                              Конечно никто не делает диктофон и плеер чтобы сделать лучше чем в смартфоне — в хобби разработке важная академическая составляющаю — научится работать с МК, ЦАП, АЦП, проектировать печатную плату, прошивку. Это очень увлекательно. Ну и что что хуже чем iPod?

                              Просто в недоумении когда на DIY отвечают что надо готовое купить.
                              0
                              Это не брак и не копия, это распай. Отсюда и цена. Китайцы их выпаивают, кислотой смывают припой с выводов и химически осаждают олово. Поэтому ножки чуть тоньше, чем у оригинала, и отвратительно паяются, по сравнению с оригиналом. Часто микросхемы приходят с прошивкой внутри или даже залоченые.
                                0
                                Возможно. Но, возможно и остатки для производства или списанный ЗИП.
                              –1
                              del
                                0
                                Возник вопрос с подключением кнопок. По приведенной схеме — один контакт кнопки на вывод порта процессора. А второй вывод — ? (На корпус, на плюс или ...). Специалисты быстро доделают куда надо, но материал статьи должен быть полностью корректен. Есть и начинающие читатели…
                                  0
                                  Да. Один конец кнопки надо посадить на землю. А контроллере подтянуть ногу вверх. Я исправлю. Спасибо
                                    0
                                    > P.S. Пока проектировал плату на stm32f103 наткнулся на серию STM32F411. По цене в 2-3 доллара полноценное ядро CortexM4!
                                    Тогда посмотреть еще на серию STM32F303. Нет SDIO, но зато присутствуют аналоговые компоненты (OPAMP). В режиме усилителя можно даже программно задавать к-т усиления, правда из ряда: 2-4-8-16. Нужно больше — включить каскадно.

                                    Only users with full accounts can post comments. Log in, please.