Разрабатывать и собирать это устройство в мои планы не входило. Ну вот просто никак! У меня уже есть два предварительных усилителя. Оба меня вполне устраивают.
Но, как обычно происходит у меня, стечение обстоятельств или цепь неких событий, и вот нарисовалась задача на ближайшее время.
Содержание статьи / Table Of Contents
Это было немного нестандартно, но место на панели под регуляторы не предусматривалось, поэтому в качестве одной из идей дальнейшего совершенствования устройства коллегой было предложено использование либо электронного темброблока или аудиопроцессора, либо электронных потенциометров.
У меня несколько предвзятое отношение к любым гибридным аудиопроцессорам. Они все, как правило, питаются однополярным напряжением, как правило не выше 5 В, что требует применения развязывающих электролитических конденсаторов (а у меня в тракте нет ни одного), и есть ограничения по размаху входного напряжения. И эти доводы я изложил в устной форме товарищу.
А вот идея с потенциометрами была воспринята не как совсем идиотская, а наоборот интересная. Но тут тоже нас ожидал легкий казус.
Потенциометров производится просто громадное количество. Но большая часть из них, как и аудиопроцессоры, питаются стандартно для применения с TTL-логикой. То есть однополярка и не выше 5 Вольт. Мне же нужно работать с двухполярным аудиосигналом, да еще и при питании ОУ в ±15В.
Из ближайших найденных оказались потенциометры фирмы Microchip – MCP41HV51-104E, 104 — означает сопротивление — 100 Ком.
![](/uploads/posts/2017-03/medium/1488651943_mcp.jpg)
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! Есть на свете добрые и не жадные люди, что делают нашу жизнь немного проще.
![](http://cp.datagor.ru/uploads/posts/2016-02/thumbs/1454927643_stlink.jpg)
Ещё заказал программатор — прочитал, что без него будет проблема с прошивкой. Называется «программатор STLink»
А также отладочную плату:
Дальше, когда все это прибыло, пришло время разобраться, как это зацепить к оболочке 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 ⇣ 216
↑ Ссылки
Сайт Роджера Кларка, разработчика полезных библиотекНа этом пока все. В следующей статье я расскажу о связке двух чудных чипов АК4137+АК4490 под управлением STM32.
Не переключайтесь! :bye:
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.