В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Предварительный усилитель-коммутатор с цифровым управлением (STM32 + MCP41HV51) Обновлено!

📆5 июня 2018   ✒️AlexD   🔎25.599   💬54  
Предварительный усилитель-коммутатор с цифровым управлением. Применяем STM32 с программированием через оболочку Arduino, электронные потенциометры от Microchip, графический TFT.

Разрабатывать и собирать это устройство в мои планы не входило. Ну вот просто никак! У меня уже есть два предварительных усилителя. Оба меня вполне устраивают.
Но, как обычно происходит у меня, стечение обстоятельств или цепь неких событий, и вот нарисовалась задача на ближайшее время.
Начало цепи событий было положено давно, когда мы пилили с коллегой-программистом темброблок для его автомобильного ЦАПа. Темброблок был больше статическим корректором АЧХ, и регулировка этой АЧХ планировалась с помощью подстроечников на плате, по принципу «отрегулировал на месте и закрыл крышку корпуса».

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

У меня несколько предвзятое отношение к любым гибридным аудиопроцессорам. Они все, как правило, питаются однополярным напряжением, как правило не выше 5 В, что требует применения развязывающих электролитических конденсаторов (а у меня в тракте нет ни одного), и есть ограничения по размаху входного напряжения. И эти доводы я изложил в устной форме товарищу.

А вот идея с потенциометрами была воспринята не как совсем идиотская, а наоборот интересная. Но тут тоже нас ожидал легкий казус.
Потенциометров производится просто громадное количество. Но большая часть из них, как и аудиопроцессоры, питаются стандартно для применения с TTL-логикой. То есть однополярка и не выше 5 Вольт. Мне же нужно работать с двухполярным аудиосигналом, да еще и при питании ОУ в ±15В.

Из ближайших найденных оказались потенциометры фирмы Microchip – MCP41HV51-104E, 104 — означает сопротивление — 100 Ком.

Microchip – MCP41HV51-104E. Они мелкие, но вполне «паябельные»,
шаг ног 0,5 мм, рядом для сравнения PGA2311

А что, прикольно! Управление по SPI, развязка аналоговой и цифровой части, аналоговая часть питается от ±18 В, заявлена возможность применения в аудио. Как не заказать такое чудо? Ради эксперимента даже…

Концепции на тот момент не было никакой, я вообще ковырял очередной ЦАП, и мне требовалось в нем мерить fs на ходу, поэтому я, по совету коллеги, решил заказать и пощупать контроллер STM32. Что такой есть, я слышал, но не пробовал.
И я начал искать, смотреть и читать.

Оказалось все несколько сложнее, чем я предполагал. Под STM32 напрочь отсутствует среда разработки начального уровня. Да, есть мощный софт типа Keil, но он платный (есть бесплатная версия с ограничением по размеру кода 32 КБ) и сложный для меня, есть ещё несколько вариантов программ, но мне надо помимо голого процессора ещё как-то его подружить с дисплеем TFT на ILI9341. Тут как обычно ждала засада…
С этим TFT в лоб не работает ничего из STM32! То есть народ радостно подключает LCD 1602, а про tft ни слова.
И только сторонний напильник в лице ugfx под RTOS мрачно на меня поглядывает. Не-е-е, я пока не просто не готов к этому, а даже не знаю с какой стороны подойти к этой ugfx!

Зато, что удивительно, решение проблемы мне подсказали сами китайцы. Я начал поиск с задачи — какой процессор заказать? Надо что-то «паябельное», не сильно большой объем памяти, невысокая цена. Так сказать, начальный уровень для чайника вроде меня.
Искать пришлось недолго — STM32F103C8T6 — не самый мощный, но и не самый слабый.
72 МГц тактовая, 20 КБ RAM, 64 КБ FLASH.

Более того, существуют готовые модули на STM32F103C8T6, и, что ещё интереснее — оно по цене конкурирует с Arduino Nano!

На плате есть всё для полноценной работы. В описании было заявлено Arduino, и я, зная что там можно написать все что угодно, как на том сарае, на всякий случай вбил в поиск эту фразу.
Ха! Оно и правда имеет возможность программироваться через среду Arduino! Есть на свете добрые и не жадные люди, что делают нашу жизнь немного проще.


Ещё заказал программатор — прочитал, что без него будет проблема с прошивкой. Называется «программатор STLink»



Заказал ставший уже привычным дисплей на ILI9341


А также отладочную плату:

Есть конечно фирменная STM Discovery, но если есть дешевле, то выбор однозначен


Дальше, когда все это прибыло, пришло время разобраться, как это зацепить к оболочке Arduino.
Итак, для начала идем на страничку разработчика библиотек, нам нужны библиотеки и процедура установки.
Библиотеки качаем здесь.
А руководство по установке здесь.

В результате должно получиться так:

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

Были небольшие проблемы с поиском SPI, в примерах не указано, куда подключать тот же tft. Пришлось поковырять сеть и документацию. Но все заработало. Первым примером, что я использовал после загрузки библиотек и подключения дисплея был скетч из примеров, что лежит по адресу \Arduino\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_ILI9341_STM\examples\graphicstest
Скорость работы меня поразила! По сравнению с ATMega328 просто летает.

Библиотека, как видно из названия, это просто адаптированная под STM32 версия графической библиотеки от Adafruit, хотя и довольно сильно перепиленная. Но главное, оно работает на уже привычной мне программной платформе! Поэтому можно ваять дальше.

А дальше набор схем. Для начала надо определиться с техзаданием. Итак.
Жил-был предусилитель.

В принципе ничего особенного. Три входа, коммутация входов через реле от галетника, четыре одиночных ОУ, пассивный неотключаемый темброблок и ушной усилитель. Работал прекрасно. Второй пред уже сделан позже, там более продвинуто все, и тоже работает нормально. Делать третий — это перебор. Поэтому самый первый был разобран, и его запчасти было решено использовать в новом месте.

Схема преда с цифровым темброблоком (исправлено)

Осталось нарисовать схему.
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.


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

Громкость на PGA2310. От PGA2311 отличается возможностью работы аналоговой части от +/-15В. В остальном один к одному. На выходе раздельный буфер на выход и на наушники. ОУ+ BUF634. Компактно и достаточно просто.
Путь прохождения сигнала по одному из каналов указан цветными линиями.
Потенциометры и регулятор громкости сидят на одной SPI шине.

Питать все это хозяйство буду от уже привычного мне резонансного БП на FSFR1700.

Как его изготовить с минимальным ущербом для себя и окружающих, я как-то рассказывал здесь. Проблем быть не должно, но можно использовать что-то своё.
Выходные напряжения — цифра 8-10 В, аналог — 2×18-20 В.
От цифрового питания запитаю и реле, они пятивольтовые. Соединяться все это будет так:

Ну и напоследок самое интересное — блок управления всем этим безобразием. Управляться все это будет четырьмя кнопками и энкодером.
Ну на самом деле кнопок хотелось больше, но они закончились, осталось всего четыре, да и те разного цвета.

Поэтому расклад такой:
1. Кнопка select – переключает входы по кольцу «1-2-3-1-2-3».
2. Кнопка bypass – включает режим «bypass» — обход регулятора тембра.
3 и 4. Кнопки выбора того, что будет регулировать энкодер.
Нажал «LO» — регулируются низкие частоты. После трех секунд «неактивности», фокус управления передается на громкость. То же самое и для «HI» – высоких частот. Нажатие на энкодер — режим «mute».

На схеме указан модуль с контроллером по принципу «вид сверху». На борту всё есть, поэтому указаны только назначения ног.

Обратите внимание, на борту у контроллера две шины SPI. Одна используется для дисплея, вторая для управления потенциометрами и регулировкой громкости. Шины можно конфигурить раздельно, как по режиму работы, так и по скорости обмена.
Также никуда не подключен UART. Он оказывается всегда активен, и как его отключить я не нашел пока, поэтому ноги 26-29 висят в воздухе. Более подробно про назначение ног можно прочитать на сайте leaflabs.com. Ну и кому интересно — может и поюзать эту среду разработки. Но там для меня не оказалось нужных мне библиотек, поэтому только для информации.

Также большой плюс этого контроллера — выводы мало того, что работают на 3,3 Вольт, что не требует развязки по уровням с дисплеем, но и почти все входы имеют "5V tolerance», что тоже иногда удобно. Поэтому схема такая простая с виду. Подсветка дисплея включена напрямую к выходу БП через резисторы, что позволяет разгрузить стабилизатор 3,3В.

Осталось собрать все это в кучку.

Впервые в жизни столкнувшись и электронными потенциометрами, опасался, что на выходе устройства возникнет аномальная постоянка. Мало ли что там напридумывали в управлении этих потенциометров? Но оказалось напрасно я переживал — все отлично!
Теперь, когда все собрано, можно начинать программировать.

Это, так сказать, наиболее сложная и креативная часть проектирования.

Все дело в том, что в процессе проектирования схемы я только примерно знал, что я хочу от этого устройства и как оно примерно будет работать. А так как программирование — процедура более гибкая, чем придумывание схемы и разработка и сборка платы, то я был относительно спокоен — вроде все предусмотрел в «железе».

Для начала нужно заставить работать схему. Включить питание. Проверить на отсутствие соплей на плате. Напряжения на стабах. Связь по SPI. То есть как-то порегулировать громкость. Порегулировать любую группу потенциометров. И когда все эти процедуры будут отлажены — можно начинать ваять меню и логику.

Управление PGA2310 не сложное — нужно отправить по SPI двоичное число, эквивалентное нужному уровню громкости. С МСР41 несколько сложнее, хотя в результате все равно все сводится к посылке числа. Всего шагов изменения сопротивления — 256. И можно управлять в двух режимах — уменьшение или увеличение на один шаг, или программирование нужного числа, а значит и установка «движка» потенциометра в нужную позицию. Я выбрал второй
вариант.

Теперь индикация результата:

Я уже привык, что это будет линейка из серии прямоугольников. Они заполняются зеленым цветом или очищаются. По горизонтали индикатора их как раз 50 шт. Поэтому нужно все привязать к этому числу.

На фото оно несколько не так, как в реальности — ширина сегментов одинаковая. Фотограф из меня как и программист.

Теперь характеристика регулирования. Она линейная, но так как у нас есть 256 шагов регулирования, то я решил сделать по аналогии с управлением PGA2310.
В случае с PGA мне нужно было сделать массив из 50 (в реальности 51) чисел в диапазоне от 0 до 190-195.
Выше PGA начинает не осаблять, а усиливать сигнал. Так как усиления хватает и без нее, то в режим усиления не заходим. Зато можно сделать любую характеристику регулирования.
Для громкости кривая не линейная. А вот для МСР нужна линейная. Поэтому делаю шаг 5.
То есть 255/5 = получается 51 шаг. Как раз то что надо. И представляю это в виде массива чисел, которые будет отдавать контроллер для PGA или для MCP.

Volumes[51]={0, 10, 20, 30, 40, 50, 60, 70, 75, 80, 85, 90, 95, 100, 104, 108, 112, 116, 120, 
124, 128, 132, 136, 140, 144, 148, 151, 154, 157, 160, 163, 166, 169, 172, 
174, 176, 178, 180, 181, 182, 183, 184, 185, 186, 187, 
188, 189, 190, 191, 192, 193};


Для PGA более плавно идет регулировка возле максимума, для МСР — линейно.
tones[51]={5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 
105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 
180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 
240, 245, 250, 255};

Перескок через 5 значений на самом деле не заметен на слух.

Все эти таблички завязаны за поворот энкодера. Энкодер уменьшает или увеличивает значение счетчика от 0 до 100. От значения счетчика зависит отрисовка шкалы от 0 до 50 (счетчик энкодера, деленный на 2) и параллельно отсылаются данные в соответствии с таблицей. То есть для значения счетчика энкодера например 24 — на шкале 12 делений. Если это громкость — то в PGA летит 95, а если тембр — то 65. Если счетчик дойдет до 100 или ниже 0, то значение его вернется к 100 или к 0.
Своего рода «ограничители».
Таблицы можно подстраивать под себя, меняя характеристику регулирования.

Остальные «тонкости» откомментированы с самой программе. Единственный момент — работа с GPIO. В отличие от ATMega 328, где прерывание зацеплено за две ноги, в STM32 более широкий выбор ног для прерываний. Поэтому пришлось моему коллеге-программисту копнуть доку. И поправить процедуру опроса энкодера, перенесенную с Ардуино в неизменном виде, под новый контроллер. И ноги, куда подключен энкодер без изменений в процедуре обработки энкодера менять нельзя — работать не будет. В двух словах работает это так: читаем значение всех ног в двоичном виде, потом отсекаем все, кроме ног энкодера, и с полученным результатом работаем дальше.
Если нужен энкодер на других ногах, то и отсекать программно надо другие ноги.

Немного поменялись команды по отображению шрифтов. Шрифтов всего осталось четыре, один из которых только числовой, зато красивый.
По шрифтам примеры есть в демонстрационных скетчах, так что что и как — понять несложно.

Пара слов про программирование.
Четыре штыря напротив USB входа на плате контроллера — это вход для STLink. Нужен четырехпроводный кабель. Ноги подписаны. Через бесплатную утилиту STM32 ST-LINK Utility можно напрямую общаться с контроллером. Можно его стереть и так далее.
Поэтому программировать STM32 удобнее через него, а не через USB. Да и работает оно быстрее. Но программируется оно из оболочки Arduino, надо только указать способ загрузки.

После допиливания и отладки можно перенести девайс из состояния «гора плат на столе» в состояние «можно попользовать в стойке».

И попробовать послушать.

Источником чарующих звуков явилась очередная поделка/переделка на лихой связке SRC4192+DF1706+2*PCM1701 (читай мои статьи). На нём я проводил тренировки по измерению частоты семплов на ходу и переключение режимов работы ЦФ и SRC без участия оператора.
Там тоже STM32, но уже в другой роли — SPI там нет, только дрыгание ногами в статике.

Звук предусилителя получился своеобразный. Какой-то непривычно верный или честный. В общем, сначала я долго привыкал, но замерить что там происходит с сигналом я не мог. Только на слух. Зато появилось яркие ощущения «различности» источников.
С тех пор девайс работает у меня в стойке.

Использовались три источника — РСМ63, РСМ58/РСМ1701 и АК4490. Иногда подключался АК4399. Каждый немного играл под настроение.
Вставки между девайсами остались с лета — когда жарко, в таком бутерброде все перегревается, я и боюсь за жизнь внутренностей. На данный момент я их убрал — пред не греется вообще.

Тот Creative, что я брал «поюзать» для измерений, неожиданно или ожидаемо через две недели после окончания гарантийного срока осчастливил нас своей кончиной.

Точнее с виду оказался вполне себе живой, но внутренний источник питания -5В для всех ОУ сначала начал включаться через раз, а потом и вовсе помер окончательно. Ни прогрев феном, ни «ласковые» слова, ни кривой стартер не помогали. Пришлось прибить гвоздем на стену в назидание остальным.

Долго мой коллега-программист выбирал что-то на смену. Причем нужен был девайс только для измерения. После долгих выборов и перевыборов он приобрел «Zoom UAC-2». И сразу отдал мне на тестирование — измерить что-нибудь. Ну раз уж упомянул — скажу пару слов. Девайс шикарен. И сделан хорошо и в управлении прост и предсказуем. Балансные входы и выходы не использовались, запаял «джеки» под небаланс.
Один минус — он свои мега ТТХ показывает только под ASIO. В любом другом режиме — все характеристики ухудшаются на 10 дБ. Почему так — для меня загадка.
Да в чем проблема то? — спросите вы. Проблема в том, что текущая версия «наколенной измериловки» RMAA с этим самым ASIO нормально не работает. Или не переключает режимы работы карты или вообще вылетает с ошибкой. Причем тестировалось это на двух разных компах с Windows 7 — х86 и х64 архитектуры.
Третьего не нашлось, но судя по схожему поведению — это тенденция. Поэтому измерил таки я это все в режиме ММЕ. Опять же чисто для информации. Цифры не такие красивые, но более информативны графики.

Для начала АЧХ:

Режим измерения — белый loopback, зеленый — отключен темброблок, голубой — НЧ и ВЧ 95% от максимального подъема, малиновый — НЧ и ВЧ 5%.
Я ожидал, что спад и подъем на ВЧ будет больше, но на слух нормально. Решил пока не трогать ничего.
Всплеск на 500Гц и провал на 40Гц — это работа драйвера.

Уровень шумов:

Ну такая «шумность» для меня неожиданна. Странный артефакт после 50КГц портит все цифры в суммарном результате. Я не знаю что это.
Ну 50Гц понятно — не от батарей питаемся — это наводка из воздуха.

Динамический диапазон:

Что тут должно быть в идеале — я не знаю, поэтому просто картинка.

И в заключении — THD:

Здесь виден рост искажений при задранных НЧ и ВЧ. Подозреваю на перегруз АЦП измерителя, так как RMAA калибруется по уровню на частоте 1кГц, где темброблок почти не заметен.В остальном параметры не хуже параметров самой карточки.

Результатом я доволен, и самое главное я себе ответил на вопрос — почему пред звучит «не так». Просто его характеристики получились неожиданно хорошими, что было непривычно для моего восприятия и для моих поделок, несмотря на то, что там ИБП и цифровой интерфейс упрвления.

Файлы

Внимание! Проект сложный. Представленные файлы могут содержать ошибки. Требуется осознанное повторение.
🎁 Платы, схемы, прошивка для МК одним архивом (05/06/2018 Обновлено!)  274.69 Kb ⇣ 201

Ссылки

Сайт Роджера Кларка, разработчика полезных библиотек

На этом пока все. В следующей статье я расскажу о связке двух чудных чипов АК4137+АК4490 под управлением STM32.
Не переключайтесь! :bye:

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 173 читателя.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Вариант подключения датчиков и темброблок для гитары Gibson Les Paul и подобных... Доброго времени суток, коллеги! Это моя первая статья, поэтому прошу строго не судить. Разумная...
Схема на Датагоре. Новая статья Ламповый пятиполосный графический эквалайзер в слим-корпусе, 6Н2П+6Н1П... Более пяти лет работает у меня дома ламповый усилитель — двухтактник на 6П14П (смотри мою статью...
Схема на Датагоре. Новая статья Программа P-CAD. Электронное моделирование. А.С. Уваров... Программа P-CAD. Электронное моделирование. А.С. Уваров Издательство: Диалог-МИФИ Год: 2008...
Схема на Датагоре. Новая статья Ищу схему усилителя УО1506 из установки ВРТУ 1000... Добрый день. Ищу какие либо данные или схему на усилительный блок / усилитель УО1506 из войсковой...
Схема на Датагоре. Новая статья Универсальный генератор на TL494 (прямоугольник и пила)... Генератор предназначен для лабораторных исследований при разработке и наладке самых различных...
Схема на Датагоре. Новая статья Простой ESR (ЭПС) измеритель быстрого приготовления... ESR-метр или прибор для измерения ЭПС - эквивалентного последовательного сопротивления. Как...
Схема на Датагоре. Новая статья Предварительный усилитель-корректор для винила со стандартной характеристикой RIAA... Надеюсь, кого-то из сограждан может заинтересовать такой архаичный инструмент, как предварительный...
Схема на Датагоре. Новая статья Проект УМЧЗ «Омега»: полный усилитель на TDA7295 с темброблоком и софтстартом... Наконец то решил собрать усилитель для себя – не спеша с душой и в корпусе. А то всё, что делал...
Схема на Датагоре. Новая статья PowerTrans - программа для расчета параметров трансформатора линейного БП... Еще одна программа для расчета параметров трансформатора. Существует множество программ для расчета...
Схема на Датагоре. Новая статья Tillman's FET Guitar Preamp: активная электроника в гитаре Yamaha Pacifica... В этой статье хочу рассказать о своём опыте оснащения электрогитары преампом Дональда Тиллмана (J....
Схема на Датагоре. Новая статья Ламповый усилитель «Покемон»: 6Н23П + 6П14П на одной плате и в тонком корпусе... На дне рожденья моего отца я услышал, как «звучат» китайские активные колонки. Выкрученные на 80%...
Схема на Датагоре. Новая статья Снова ламповый PP на 6П7С и снова ИБП!... Мне уже довелось публиковать на страницах уважаемого портала свой усилитель на 6С4С с импульсным...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

Назад Вперед
<
Читатель Датагора

StalKer-NightMan

<
Читатель Датагора

GN

<
Читатель Датагора

dynazzz

<
Читатель Датагора

nazarr

<
Читатель Датагора

farg4

<
Читатель Датагора

AlexD

<
Читатель Датагора

Dormidont

<
Читатель Датагора

Datagor

<
Читатель Датагора

Dormidont

<
Читатель Датагора

Daywer

<
Читатель Датагора

Datagor

<
Читатель Датагора

Dormidont

<
Читатель Датагора

AlexD

<
Читатель Датагора

Dormidont

<
Читатель Датагора

AlexD

Назад Вперед

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой