С 2023 года я перестал описывать свой опыт сборки синтезаторов и модулей. Отчасти из-за того, что начал делиться им на стримах, а отчасти потому, что процесс давно перестал был минным полем из граблей и превратился скорее в сборку конструктора Лего по инструкции.
Но Tides смог меня удивить.
Это техническая, «сухая» статья о сборке, отладке и калибровке. Тут не будет принципов работы, впечатлений и выводов. Если интересно такое, то у нас был стрим по Tides:
Важные детали этой сборки:
- Я использовал оригинальные производственные файлы из репозитория MI для Tides 2. Оригинальную схемотехнику, разводку, BOM и даже дизайн панели. Если для вас такое неприемлемо, то можно обратить внимание на проекты uTidesII, или TidesV2 на выводных компонентах.
- Ради науки откалибровал DAC, хотя уверен, что в большинстве клонов таким не заморачиваются.
- Всё, что касается кода, компиляции и прошивки было сделано под Mac на ARM. Для прошивки я использовал китайский ST-Link v2 и консольный тулинг stlink.org.
Дизайны в оригинальном репозитории MI сделаны под массовое производство, а не как DIY конструкторы на Thonk, поэтому не ждите там подробных туториалов и тысячи фотографий для каждого шага.
1 Роботам-то она не нужна.
В качестве иллюстрации этих слов: для полярных SMD компонентов на шелкографии нет даже отметки ориентации1. Поэтому вам обязательно понадобится Eagle CAD, чтобы сверяться с оригинальной разводкой. Впрочем, без него вы в любом случае не сможете сгенерировать gerber-файлы, которых в репозитории тоже нет.
И последнее: компоненты на плате в размере 0402. Я паял такие раньше, но, видимо, не в таком количестве. Такие мелкие компоненты сложно даже вынуть из ленты, чтобы не потерять, поэтому работа с ними требует гораздо большего фокуса, а следовательно и энергии, чем обычно. Ещё она требует подходящего пинцета, паяльника и припоя в тонкой нитке. Всё, давайте уже начинать.
Закупка компонентов
Сама плата двуслойная. Gerber-файлы я сгенерировал в Eagle и сразу отправил в JLC. Проблем с результатом не было. Это самая простая часть.
При закупке компонентов всегда есть соблазн найти в интернете «корзину для Маузера», или ещё какой-то список готовых ссылок на магазины, чтобы заказать всё в один клик, а не тратить полдня, собирая нужное через поиск. Я нашёл две такие корзины и обе были достаточно плохо подобраны, чтобы я потом перепроверял все компоненты из списка дважды и всё равно допустил ошибку. Лучше бы собирал всё с нуля самостоятельно.
Особенность, из-за которой корзина и BOM постоянно не сходятся в том, что в списке есть резисторы и конденсаторы одного наименования, но в разных корпусах — отметьте себе.
В остальном в соурсинге без сюрпризов. Благодаря тому, что это оригинальная, «продакшен», разводка MI, вообще все компоненты будут установлены на одну сторону одной единственной платы. Всё будет тесно, а исправить пайку такой мелочи после установки гнёзд и потенциометров будет крайне сложно.
Зато нет никакой механики: в сборке полностью отсутствуют винты, гайки и разные переходные гребёнки.
Я заказывал алюминиевую панель в «Алюмофото». Результатом недоволен, но знаю, что они умеют делать хорошо. Дизайн панели без логотипов и названий можно найти прямо в репозитории. Механически панель подошла идеально.
Сборка и прошивка
Сборку я проводил в несколько этапов:
- Установил все SMD компоненты, кнопки и гребёнку питания;
- Прошил микроконтроллер, чтобы убедиться, что он в принципе определяется и прошивается;
- Установил гнёзда, светодиоды, потенциометры и панель. А уже после этого калибровал DAC.
Имена компонентов есть на шелкографии и они соответствуют BOM, но искать там что-то глазами сложно, поэтому я активно использовал Eagle. Можно выбрать в списке все компоненты нужного номинала и он подсветит их на плате.
Ориентацию диодов рядом с гребёнкой питания можно посмотреть в схемотехнике. Единственное, что мне пришлось переделать — двуцветные светодиоды на выходных каналах. Я установил их задом-наперёд, но нужно было ставить короткой ногой в сторону правого края платы.
На плате нет стандартного порта для прошивки, зато тот, который есть, сделан под удобный шаг пинов 2.54мм. Так же есть пара пинов для UART, но вам они вряд ли понадобятся если вы не собираетесь производить модуль массово.
Порт прошивки удобно расположен у края платы. У меня получалось работать с ним без запайки пинов и даже с установленной панелью. Однако, у этого порта нет пина питания 3V3 и вам нужно будет подавать питание на модуль через шлейф вашего ящика. Не забудьте отключить остальные свои модули на время экспериментов и всегда прозванивайте гребёнку питания модуля перед первым подключением к шлейфу.
В репозитории нет скомпилированной прошивки. Поэтому, вот скомпилированный бутлоадер и прошивка для Tides v2 в формате Intel hex. В ней используются дефолтовые калибровочные точки для DAC. Но об этом читайте ниже. Этой прошивки хватит, чтобы проверить работоспособность модуля и позже, при наличии желания или шила в жопе, откалибровать DAC.
- Стираю память микроконтроллера:
st-flash erase
- Записываю бутлоадер:
st-flash --format ihex write tides2_bootloader.hex
- Записываю прошивку:
st-flash --format ihex write tides2.hex
- Модуль замигает тремя лампочками. Это значит, что он в factory test режиме. Чтобы сбросить factory test и перейти в рабочий режим, достаточно просто переподключить питание.
Что ещё за калибровка?
В большинстве еврорек модулей есть микросхемы ADC и DAC. По-русски, АЦП и ЦАП: аналого-цифровой и цифро-аналоговый преобразователи. Потому что мало одной парной аббревиатуры, теперь у нас есть две для удобства запутывания. ADC на входных гнёздах модуля конвертирует аналоговый сигнал в цифровой, а DAC на выходных гнёздах, наоборот — цифровой в аналоговый.
ADC и DAC нуждаются в калибровке примерно так же, как ваш Moog нуждается в настройке осциллятора, только методики для ADC и DAC чуть сложнее, хотя основаны на тех же принципах построения обратной связи. ADC калибруется на всех модулях MI одинаково: простой подачей эталонного напряжения. Вот короткая документация от разработчика.
2 На самом деле оригинал этого репозитория был удалён и у нас остались только форки.
С DAC на модулях MI всё сложнее. Такая калибровка для модулей MI Tides, Marbles и Stages выполняется на производстве, а в официальной документации описания процедуры нет, поэтому, чтобы понять как именно это работает, нужно ковыряться в исходниках. К нашему счастью кто-то первый и второй2 уже поковырялся до нас.
Если коротко, то для калибровки DAC вам нужно:
- Перевести модуль в factory test режим;
- Точным мультиметром замерить напряжение на всех 4 выводах;
- Записать результат в специальную таблицу, которая по формуле рассчитает поправочные коэффициенты для каждого выхода;
- Записать эти коэффициенты в исходный код прошивки, скомпилировать её и залить в модуль.
На производстве это всё происходило в автоматическом режиме, через UART, но производственного софта и дизайна оснасток в открытом доступе нет.
Примечательно, что в ранних модулях MI, например в Yarns, DAC калибровался так же, как ADC, только процедура была гораздо более длинной и на 4 выхода нужно было выполнить 40 измерений.
Не думаю, что производители клонов и обычные самоделкины заморачиваются калибровкой DAC. Я выполнил её из спортивного интереса. Ниже будет полное пошаговое описание.
Mutable dev environment
Прежде чем что-то откалибровать нам нужна возможность собирать прошивки MI из исходников. К счастью для нас вместо того, чтобы настраивать окружение вручную, есть подготовленная виртуальная машина из которой это можно сделать, и инструкция к ней. Вот все ссылки:
- Репозиторий MI с виртуальной машиной и инструкцией как её развернуть и использовать
- Репозиторий MI с исходниками прошивок для всех модулей
- Короткое интро о том как этим пользоваться для нужд Tides
Всё вышеперчисленное отлично работало в 2023, когда я собирал свои первые модули MI. С тех пор я поменял архитектуру своей машины с Intel на ARM, и связка VirtualBox + Vagrant перестала работать. Наверняка это можно как-то починить, но я не нашёл решения наскоком, зато нашёл порт этого окружения в Docker-контейнер, который завёлся у меня с пол-пинка.
- По инструкции из репозитория разворачиваем контейнер на хостовой машине;
- Клонируем на хостовую машину репозиторий с исходниками и всеми подмодулями:
git clone https://github.com/pichenettes/eurorack.git && cd eurorack && git submodule init && git submodule update
- Переходим в директорию
/eurorack
и собираем прошивку командой:SKIP_PROGRAMMING=true mutable-env make -f tides2/makefile hex
Забираем готовый билд в директории eurorack/build/
. Ключ SKIP_PROGRAMMING=true
нужен для того, чтобы пропустить процедуру прошивки после сборки. Впрочем, вы можете не пропускать её, если заранее настроите программатор.
Похожим образом можно собрать бутлоадер для Tides. Его исходники в соседней папке. Стираем память микроконтроллера → зашиваем бутлоадер → зашиваем прошивку, командами описанными выше.
Ура! Теперь мы можем собрать из исходников любую прошивку для любого модуля MI. Давайте уже попробуем откалибровать DAC.
Калибровка DAC
Вот форк репозитория Tides2_stuff в котором есть почти вся информация, которая понадобится для калибровки DAC на Tides. Прежде чем выполнять её, убедитесь что модуль полностью рабочий и правильно собран и вы умеете компилировать прошивки из исходников и заливать их в микроконтроллер. В общем: обязательно прочитайте всё, что написано выше.
Помимо программатора вам понадобится мультиметр с точностью хотя бы 20 тыс отсчётов.
Важная деталь: factory test режим включается только после полной перепрошивки микроконтроллера и сразу после отключения питания будет сброшен. Чтобы попасть в factory test снова вам нужно будет снова выполнить последовательность erase → write bootloader → write firmware. В factory test модуль мигает тремя лампочками, перепутать его с рабочим режимом сложно.
Замеры 3V в режиме factory test
Во время калибровки мы исправляем исходники в /eurorack/Tides2/
, руководствуясь инструментами из /Tides2_stuff/
. Процедура выглядит так:
- Модифицируем файл
/eurorack/Tides2/factory_test.cc
, как описано в/Tides2_stuff/CalibrationNotes.txt
, или просто заменяем один файл другим. Это активирует режим калибровки DAC внутри factory test. - Компилируем прошивку. Выполняем erase → write bootloader → write FW. Модуль должен остаться в factory test с мигающими лампочками.
- Мультиметром последовательно измеряем напряжение на всех 4 выходах модуля. Причём для каждого выхода дважды: ручка Frequency до 12 часов заставит модуль показывать 1V, а после 12 часов на выходах будет 3V. Делаем 8 замеров, записываем результаты.
- Получившиеся результаты копируем в табличку
/Tides2_stuff/Tides2_calibration.xls
. Не путаем точки с запятыми. Итоговые калибровочные поправки рассчитаются в правых колонкахScale
иOffset
. - Открываем файл
/eurorack/Tides2/settings.cc
и внутриSettings::Init()
инициализируем следующую структуру и переносим туда все поправки рассчитанные в таблице. В примере ниже мои поправки, вам таблица рассчитает другие. Снова не путаем точки и запятые. Если не понимаете, в какое место файла это вставить, можно посмотреть пример в/Tides2_stuff
.persistent_data_.dac_calibration[0].offset = 32782.1f; persistent_data_.dac_calibration[0].scale = -4008.2f; persistent_data_.dac_calibration[1].offset = 32777.2f; persistent_data_.dac_calibration[1].scale = -4025.2f; persistent_data_.dac_calibration[2].offset = 32876.1f; persistent_data_.dac_calibration[2].scale = -4025.1f; persistent_data_.dac_calibration[3].offset = 32834.4f; persistent_data_.dac_calibration[3].scale = -4055.0f;
- Дальше можно всё это просто скомпилировать и прошить, но мы не такие. Давайте дополнительно выполним верификацию этой калибровки. Для этого в
/eurorack/Tides2/factory_test.cc
раскомментируйте вот эту строчку внутри секции//AJH
:dac_code = settings_->dac_code(j, (float)(abs(((int)(pot_val*8.0f)))) - 2.0f);
Теперь, когда модуль снова загрузится в factory test, ручка Frequency будет менять напряжение на выходах от -2V до 5V с шагом 1V и вы сможете убедиться, что результат стал значительно точнее и калибровка работает.
- Выполняем erase → write bootloader → write FW. Модуль должен остаться в factory test с мигающими лампочками. Мультиметром проверяем результат для всех, или почти всех, выходов меняя напряжение ручкой Frequency. Убеждаемся, что значения теперь гораздо более точные чем до калибровки.
- Удаляем всю секцию
//AJH
в/eurorack/Tides2/factory_test.cc
. - Выполняем erase → write bootloader → write FW. Пропускаем factory test простым выключением-включением питания — этот режим нам больше не нужен.
- Вы восхитительны. Теперь не забудьте снова откалибровать ADC.
Я обещал не делать выводов, но главное, что усвоил: собирать модули Mutable Instruments по оригинальным дизайнам из оригинального репозитория — это вообще не то же самое, что собирать их из интерпретаций Antumbra, или Jakplugg. Из похожих вызовов в моих планах на будущее всё ещё остались оригинальные Marbles и Blades.
Надеюсь, вы узнали что-то новое. Всем open source.
⚠️ Каменты в режиме эксперимента. Нужна регистрация на GitHub и необходимо дать разрешение боту Giscus. Если это неприемлемо, можно комментировать прямо на GitHub.