Модернизируем синтезатор своими руками

Цифровой синтезатор своими руками | Мастер Винтик. Всё своими руками!

Модернизируем синтезатор своими руками

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

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

При использовании резисторов с разными значениями на выходе можно получить различную форму периодических сигналов. Однако из-за того, что система цифровая, и сигнал генерируется ступенчато, то в выходном сигнале могут присутствовать гармоники частоты дискретизации.

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

Принцип работы синтезатора сигнала

Схема цифрового генератора

Тактовые сигналы, которые имеют максимальную частоту 6,4 мГц сформированы астабильным мультивибратором на логических элементах G1..G3 микросхемы IC1. Перестройки частоты осуществляется потенциометром P1, в то время как для изменения частоты по декадам используется переключатель К/1.

Микросхема IC1 состоит из набора скоростных КМОП элементов, вместо неё можно использовать менее скоростные ТТЛ логические элементы, скорректировав значение сопротивления R2=270 Ом.

На микросхемы IC1..IC3 подаётся напряжение питания +6 вольт (по паспорту 74AC00 её максимальное напряжение питания может составлять 6 вольт, для серии 4000 — 15 вольт). Чем больше питающее напряжение, тем больше максимальная рабочая частота микросхем. Для делителя IC2 максимальная рабочая частота будет составлять 6,4 МГц при напряжении питания 6 вольт.

Микросхема 74AC00 может выдержать долговременное повышенное напряжение питания до 6..6,5 В (особенно при слабом нагружении выхода).

Тактовая частота задающего генератора в 32 раза больше, чем частота синтезируемого синусоидального сигнала. При максимальной тактовой частоте 6,4 МГц это будет соответствовать частоте синусоидального сигнала 200 кГц. Двоичный счётчик IC2 делит частоту входного сигнала на 32.

С выхода Q4 счётчика IC2 сигнал подаётся на вход первого сдвигового регистра IC3, с его выхода Q3B сигнал поступает на вход DA следующего сдвигового регистра IC4.

Состояния выходов сдвиговых регистров изменяются синхронно с тактовыми импульсами, поступающими с выхода задающего генератора IC1.

Давайте рассмотрим осциллограмму сигналов на входах и выходах сдвигового регистра IC3:

Сигналы на входах CpA, CpB, DA и выходах Q0A..Q3A, Q0B..Q3B сдвигового регистра IC3.

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

К выходам сдвиговых регистров подключена матрица резисторов R3…R30, которая производит цифро-аналоговое преобразование сигнала и формирует синусоиду.

Сигнал на входе счётчика ID2, на его выходе и синусоида в точке соединения резисторов R3..R30.

Если использовать другие номиналы резисторов то можно будет сформировать любые другие периодические сигналы, например, сигнал треугольный формы. Сумма всех токов с выхода резисторной матрицы поступает на вход усилителя IC5. Синусоидальный выходной сигнал должен быть со средним значением ноль вольт (т.е. без постоянной составляющей выходного сигнала).

Сдвиг уровня сигнала осуществляется с помощью подачи на прямой вход операционного усилителя напряжения смещения с помощью делителей R31 и R32.

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

Труднее всего осуществлять фильтрацию в нижнем диапазоне частот: проблема решается путём компромиссов. Здесь применяется активный фильтр третьего порядка на операционном усилителе IC6 и пассивных элементах R37…R39, C15…C17 в цепи обратной связи.

То же самое можно сказать и о других фильтрах, частоты которых лежат в диапазонах 200 Гц…2 кГц, 2 кГц…20 кГц, 20 кГц…200 кГц, которые очищают синусоидальный сигнал.

Вообще для каждого фильтра необходим свой усилитель, но поскольку всё равно необходимо коммутировать цепи тактового генератора переключателем К/1, то используются коммутируемые полосовые фильтры в цепи IC6, коммутируемые переключателями К/2 и К/3.

Операционный усилитель TL080 (IC6) усиливает сигнал, поступающий на его вход в два раза по амплитуде, он имеет низкий уровень искажений и линейную частотную характеристику до частот 300 кГц.

Интегрирующая цепь R36, C14 подавляет всплески сигнала, образующиеся в основном на высоких частотах. Сопротивление резистора R36 относительно невелико, что бы амплитуда сигнала не уменьшалась под нагрузкой.

Для питания операционных усилителей необходимо симметричное стабилизированное напряжение питания, поэтому кроме источника +6 В применяется ещё и источник -6 В.

Сборка и настройка синтезатора

Рисунок печатной платы изображён на рисунках ниже.

Печатная плата

Конденсаторы, используемые в самом высокочастотном диапазоне должны быть припаяны с очень короткими выводами, в первую очередь это касается C5!

Тактовый генератор обеспечивает стабильность частоты порядка 10-3…10-4.  Перемычка на входе IC2 переключается в верхнее по схеме положение, и на вход IC2 подаётся частота с синтезатора. Значение частоты должно быть в 32 выше, чем частота синтезируемой синусоиды.

Настройка синтезатора

Вместо переключателя K временно устанавливают короткие перемычки (что бы провода, ведущие к переключателю не мешали), настраивая прибор на третий диапазон.

Убедитесь, что тактовый генератор работает и на выходе IC5 присутствует ступенчатое синусоидальное напряжение, а на выходе IC6 присутствует синусоидальный сигнал.

Если при максимальном положении потенциометра P2 наблюдается несимметричное ограничение сигнала, то придётся подобрать резистор R34.

Далее следует отрегулировать потенциометр P2 так, что бы сигнал не был ограничен.

Теперь надо проверить уровень постоянной составляющей сигнала, которая должна быть равна нулю, это проверяют осциллографом с включённым режимом по постоянному току (так называемый открытый вход), для регулировки подбирают величину сопротивления R31 (или уменьшить сопротивление R32 до 1,6 кОм и включить последовательно с ним подстроечный резистор 470 Ом для регулировки, отрегулировать, измерить сопротивление подстроечного резистора, прибавить к нему 1,6 кОм и таким резистором заменить резистор R32).

Амплитуда сигнала при перестройке на каждом диапазоне не должна изменяться более чем на 1%. На самом верху диапазона может наблюдаться некоторое его снижение (несколько процентов).

Для подстройки этого фильтра можно припаять конденсатор ёмкостью 100 пФ параллельно конденсатору C22 со стороны фольги.

Не забудьте так же проверить, что изменение амплитуды по диапазонам не превышают 1%! Такие же настройки следует провести и на других диапазонах.

При необходимости, конечно, может быть добавлен дополнительный диапазон частот 0,2…2 Гц. Для этого используют отдельную плату. Номинал конденсатора для задающего генератора должен иметь ёмкость 3 мкФ, сопротивления фильтра — по 150 кОм, ёмкости фильтра — 866 нФ, 280 нФ и 352 нФ. Переключатель K должен быть заменён на пятипозиционный.

Если всё работает, то можно подключить переключатель диапазонов, используя короткие проводники. Вполне возможно, что из-за паразитных ёмкостей проводников переключателя в верхнем диапазоне придётся уменьшить ёмкость конденсатора C5.

Устройство смонтировано в небольшом металлическом корпусе. Источник питания состоит из трансформатора с двумя вторичными обмотками (2×10..12 В, 1..2 Вт), выпрямителя на диодах 1N4001, электролитических конденсаторов 470 мкФ и двух интегральных стабилизаторов напряжения 78L06 (положительный) и 79L06 (отрицательный).

Для выходного разъёма генератора используется байонетный BNC коннектор. Общий провод печатной платы гальванически соединён с корпусом. Плата блока питания крепится винтами к корпусу. Ручка настройки должна быть оснащена большой шкалой. Выключатель питания — обычный тумблер.

Для выхода сигналов тактовой частоты f0 и f0/32 можно сзади корпуса установить разъёмы RCA или BNC. Для подключения внешней задающей частоты сигнала f0 там же можно разместить ещё один разъём.

Эскиз передней панели

Передняя панель

На ось переменного резистора точной настройки можно надеть шкалу, изготовленную из белого картона, проградуированную делениями, что упростит использование прибора, калибровку шкалы осуществляют с помощью частотомера.

И в заключение необходимо проверить коэффициент гармоник, обычно составляющий не более 0,1%, но если точнее подобрать сопротивления R30…R33, то можно получить коэффициент нелинейных искажений лучше чем 0,07%.

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

Hobby Elektronika 2000, №7-8

  • Серебритель воды.
  • Серебритель воды предназначен для получения «серебряной» воды в домашних условиях в профилактических и лечебных концентрациях. Прибор состоит из таймера, стабилизатора тока электродов, стабилизатора напряжения питания и опускаемых в сосуд с водой электродов.Подробнее…

  • РЕГУЛЯТОР ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ
  • При хранении ульев с пчелами зимой нужно поддерживать определённую постоянную температуру и влажность. Чтобы автоматизировать режим обогрева и вентиляции помещения, чтобы пчелам было комфортно Источник: http://www.MasterVintik.ru/cifrovoj-sintezator-svoimi-rukami/

    Самодельный музыкальный синтезатор

    Модернизируем синтезатор своими руками
    Идея в том, чтобы разработать и собрать электронный синтезатор с некоторыми функциями, эффектами и т.д. Это мой старый школьный проект, и я переделал и изменил его. .В интернете есть много схем любительских синтезаторов. Большинство основано на 555 или какой – то схеме генератора. Ограничение таких решений в том, что такая схема генерирует только один тон одновременно. Чтобы играть реальные аккорды, необходимо нажимать несколько клавиш одновременно, соответственно получая несколько тонов одновременно. То есть, для 12 тонов, необходимо 12 генераторов частоты. Если клавиатура имеет 48 клавиш, то требуется 48 генераторов тонов.Спасением может быть логическая CMOS микросхема 4060. 4060 представляет собой 14 канальный двоичный счётчик/делитель со сквозным переносом и генератор. Блок схема внутренних функций 4060 из даташита выглядит так. Выход Qn является n-ным значением счетчика, представленным как 2n, например Q4 24 = 16(1/16 тактовой частоты) и Q5 25 = 32 (1/32 тактовой частоты).О частотах хроматизмов можно прочесть здесьМасштабы октав связаны. Первая октава C1 (16.3Hz) составляет половину второй октавы C2 (32.7Hz) и так далее. Микросхема 4060 может разделить их тактовую частоту через Qn выходы. Нам понадобится 12х4060 генераторов тона, и будет поддерживаться 7 октав(12×7 = 96 тонов, бинго).Таким образом, первоначальный проект такой. Конструкция состоит из 12×4060 генераторов тона, dsPIC для звуковых эффектов и контроля, усилителей.На первой схеме показаны генераторы тона  4060. Тактовая частота может быть рассчитана по формуле f = 1 / (2xPixR2xC1). Я планирую использовать 4 октавы (48 тонов) начиная с С3 (130Hz)  до B6 (1975Hz). Вы можете сами выбрать требуемые величины. Я подготовил схему с  6 выходным тонам.Следующие схемы являются простым блоком питания 7805 и усилителем LM386. Ничего особеннного.Первый шаг заключается в подготовке физических кнопок и ПП. Кнопки взяты от клавиатуры выброшенной китайской игрушки. К сожалению, в игрушке использовались матричные кнопки. Я также сделал ПП для кнопок.Печатная плата:Подготовленная плата для кнопок с оригинальным размером кнопок:А вот сборка:Схемы и провода:Первоначальная сборка закончена.Для настройки частоты я использовал свой Nexus 7 и приложение-тюнер gStrings. Спасибо разработчику за такое полезное приложение. Необходимо настроить только одну октаву. Когда C3, C4 или любая другая нота настроена, остальные настроятся автоматически из-за делителя частоты.Наконец, после выходных и большого количества кофе, первая фаза проекта получилась такой:Следующие шаги:-Вы можете заметить пустое пространство между платами. Да, это место для звуковых эффектов и контроля dsPIC.-Также мне нужно сделать верхнюю крышку.Мысли:- Кнопки не такие мягкие, как оригинальная клавиатура. Необходимо найти более подходящее решение для конечного варианта устройства.- Усилитель на LM386 не сочетается с тонами. Я заметил некоторые искажения при низком уровне громкости. Позже я заменю его на подходящий стерео усилитель. Я хочу иметь левые и правые октавы с разделенными эффектами и звуковым выходом.

    Список радиоэлементов

    Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнотIC1-IC6

    D4-D39

    C1-C12

    R1, R4, R7, R10, R13, R16

    R2, R5, R8, R11, R14, R17

    R3, R6, R9, R12, R15, R18

    IC1

    D1-D4

    C1

    C2

    C3

    R1

    IC1

    C1

    C2

    C4, C6

    R1

    Схема 1
    Микросхема4060N6Поиск в UtsourceВ блокнот
    Выпрямительный диод1N414836Поиск в UtsourceВ блокнот
    Конденсатор0.01 мкФ12Поиск в UtsourceВ блокнот
    Резистор10 кОм6Поиск в UtsourceВ блокнот
    Подстроечный резистор10 кОм6Поиск в UtsourceВ блокнот
    Резистор100 кОм6Поиск в UtsourceВ блокнот
    Схема 2
    Линейный регуляторLM78051Поиск в UtsourceВ блокнот
    Выпрямительный диод1N41484Поиск в UtsourceВ блокнот
    Конденсатор0.1 мкФ1Поиск в UtsourceВ блокнот
    Электролитический конденсатор470 мкФ1Поиск в UtsourceВ блокнот
    Электролитический конденсатор220 мкФ1Поиск в UtsourceВ блокнот
    Резистор330 Ом1Поиск в UtsourceВ блокнот
    Схема 3
    усилительLM3861Поиск в UtsourceВ блокнот
    Конденсатор0.05 мкФ1Поиск в UtsourceВ блокнот
    Конденсатор0.1 мкФ1Поиск в UtsourceВ блокнот
    Электролитический конденсатор10 мкФ2Поиск в UtsourceВ блокнот
    Резистор10 Ом1Поиск в UtsourceВ блокнот
    Добавить все

    Скачать список элементов (PDF)Оригинал статьи none Опубликована: 2012 г. 0 Вознаградить Я собрал 0 0 x

    • Техническая грамотность
    • Актуальность материала
    • Изложение материала
    • Полезность устройства
    • Повторяемость устройства
    • Орфография

    0

    Средний балл статьи: 0 Проало: 0 чел.

    Источник: http://cxem.net/sound/music/music33.php

    Музыкальный синтезатор своими руками за 70$

    Модернизируем синтезатор своими руками

    Представьте, что у вас в наличии 70$ и вам на эту сумму надо собрать крутой синтезатор или электронный музыкальный инструмент. Вы можете покупать что хотите, но общая цена закупок не должна переваливать за 70 зеленых.

    Вы может подумаете: «это не реально, что можно сделать на эти гроши?», но на каждом муговском фестивале проходит именно такой конкурс! И вы не поверите, что создают одаренные ребята – встречайте, победитель конкурса MoogFest 2017 года — Zappotron Super-Sequencer от Рассела Крамера.

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

    Конечно, из года в год бывают разные по качеству и уровню изобретения от победителей, но в этот раз мы были сильно удивлены гениальной и новаторской идеи от Рассела Крамера.

    Он решил создать чудо-секвенсер из кинескопа от телевизора, магнитофона, а также сам лично разработал некоторые внутренние схемы. Имя ему «Zappotron» (от слова Zapper – световой пистолет от Нитендо):

    Данный музыкальный инструмент берёт за основу методы сэмплирования и на основе их строится секвенция. Звуковые образцы записываются на аудиокассету (их две штуки), после чего они проигрываются и микшируются с помощью специальной клавиатуры и лучевого пистолета.

    Рассела Крамера: «Первым важным правилом конкурса является бюджет в размере 70 долларов США, второе важное правило – питание конструкции должно быть от батареи не более 9 вольт.

    Мои схемы будут работать с любым телевизором NTSC CRT, кроме настенных версий, у которых питание требует больше 9в. Мне пришлось пойти на блошиный рынок, и я там смог найти 19-сантиметровый «Citizen Portable».

    Я выторговал его у продавца за 5$ из-за того, что он был черно-белый и с проблемой…».

    А проблема была вот в чём — единственным источником входного сигнала является антенна. Телевизор не имеет коаксиального или композитного гнезда. Гнездо на передней панели — 3,5 мм выход для наушников. Поэтому, Крамеру пришлось полностью разобрать покупку и перепаять под свои нужды, а именно —  для работы телевизора в формате NTSC, который он не поддерживал.

    После огромного проделанного труда, настало время подключения zapper – светового пистолета от Нинтендо. С более старыми световыми пушками, такими как Atari 2600 и Sega MasterSystem, вы можете обмануть любую игру, просто нацеливаясь пистолетом на яркий свет по краю экрана.

     Игровая консоль создает белый контур над создаваемой мишенью, и когда вы нацеливаетесь выше, чем цель, то она думает, что пистолет направлен именно туда, куда надо попасть. Nintendo не хотела, чтобы в её игре Duck Hunt так легко можно было бы читерить, поэтому они разработали zapper для обхода этого момента.

     Он реагирует только на вспышки продолжительностью около миллисекунды, а значит статические источники света ему не помеха. Краммер: «Я разобрал световой пистолет и взглянул на внутреннюю плату.

     Почти все работы по обнаружению света выполнялись чипом IR3T07A, но я не смог найти в интернете информацию по данной микросхеме, поэтому я начал выкапывать и пытаться найти способ заставить zapper реагировать на статические источники света, а не просто мигать».

    После некоторого времени поисков Расселу удалось найти все радиодетали (удаление одного кондёр и замена транзистора на нужную модификацию), которые отвечали за чувствительность светового пистолета — их замена позволила полностью подстроить zapper под свои нужды. 

    Вообще, цена Zapper всего 2 канадских доллара – это была вторая покупка после телевизора! Все остальные деньги, а именно 63$ были потрачены на микросхемы.

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

    Изображение на телевизоре строится за счёт использовании конденсаторов, применяемых с модуля S&H и другими разработками Рассела: «Мне нужно было отобразить напряжение, хранящиеся в конденсаторах, на экран. Делается это с помощью оконной схемы. Метод окна сравнивает два аналоговых напряжения.

    Если я сравню напряжение, хранящееся в конденсаторе с пилообразным источником сигнала – я получу разницу, которую с помощью дополнительной схемы можно вывести на экран и получить такое изображение»: 

    Все остальные схемы Крамера улучшали возможности по секвенции: пропуск шага, манипуляции с шагом и многое другое. После чего в Zappotron были присоединены две деки от кассетного бумбокса, управление которыми шло на прямую от внутренней схемы, описанной ранее.

    Рассел: «Я постоянно ремонтирую такие магнитофоны для людей, которые используют их для бесплатных танцевальных вечеринок, и у меня осталось в запасе пару дек, так что будем считать, что я на них ничего не потратил!».

    Вообще, Zappotron является очень сложной радиотехнической конструкцией, так как Крамер с инженеровал большинство внутренних комплексных компонентов – аналоговый микшер, обработка сигнала от кинескопа и многое другое – всё это можно досконально изучить на сайте.  За свою победу, фирма Moog подарил Расселу музыкальный инструмент – minimoog. Подарок, который полностью достоин своего получателя:

    Наше сообщество в Контакте Твиттере Фэйсбуке Ютубе Дзен

    Похожее

    Источник: http://sergeitrunov.ru/muzyikalnyiy-sintezator-svoimi-rukami-za-70/

    Новая жизнь старого синтезатора. Часть 1

    Модернизируем синтезатор своими руками

    Несколько лет тому назад умер смертью храбрых мой старый синтезатор Yamaha PSR-GX76. Случилось это из-за того, что я по ошибке подключил к нему блок питания 24 В вместо положенных 12 В.

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

    В нескольких статьях я расскажу как проходило движение от идеи вдохнуть в него новую жизнь до реализации и демонстрации полученных результатов.

    Вскрытие

    Типичный синтезатор состоит из нескольких основных частей: модуль звукогенератора (содержащий обычно микросхему самого звукогенератора и память с сэмплами инструментов), модуль аудио-усилителя и модуль, сканирующий клавиатурную матрицу синтезатора.

    Модуль звукогенератора (видна память, сам звукогенератор на обратной стороне)

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

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

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

    И тут мне пришла в голову идея вместо того, чтобы отремонтировать старый модуль звукогенератора, выкинуть его и сделать свой собственный, целиком и полностью настраиваемый, с Linux-ом и Wi-Fi'ем.

    Выбор платформы — основы для нового синтезатора

    Загоревшись этой идеей, я начал подбирать платформу, на базе которой будет создаваться новый «мозг» синтезатора. Начал поиски с относительно простых отладочных плат на STM32, так как изначальная идея была в реализации с нуля прошивки, реализующей синтез звуков.

    Критерием отбора являлось наличие как минимум нескольких десятков мегабайт памяти, слот для SD-карты, аудиовыход и возможность подключения LCD-дисплея. Затем возникла идея использовать что-то помощнее, и я вспомнил про валяющуюся без дела Raspberry Pi.

    Но она не подошла в итоге по нескольким причинам: отсутствие возможности без танцев с бубном «из коробки» подключить LCD-дисплей, отсутствие достаточного количества GPIO-пинов, сравнительно низкая частота процессора.

    Но к тому моменту я уже понял, что нужно двигаться в направлении Linux, потому что для него уже написано немало программных синтезаторов, и в частности, особо заинтересовавшие меня LinuxSampler и FluidSynth. Поэтому я продолжил поиски, уже отбросив «маломощные» платы на STM32, и спустя несколько часов непрерывных поисков я нашел ЕГО, и понял — это то, что нужно.

    Итак, в качестве платформы был выбран и приобретен в Китае мини-компьютер EmbedSky E8 miniPC, в комплекте с 4.3-дюймовым резистивным сенсорным LCD-дисплеем.

    Технические характеристики его представлены в таблице, цена вопроса 48 долларов США:

    Размеры100х65х20 мм (без учета разъемов)
    ПроцессорSamsung S5PV210 Cortex-A8 (1 ГГц)
    Оперативная память512 МБ *
    EMMC Flash-память4 ГБ
    USB-порты4 порта USB 2.

    0, 1 порт USB OTG

    Вход/выход до 48 КГц, WM8960
    HDMIHDMI 1.3 1080p@30 FPS
    Ethernet100 Mbit
    Последовательный порт3 порта 3.

    3V, один порт со стандартными уровнями RS232

    ЧасыПоддержка часов реального времени (плюс батарейка)
    Карта памятиИнтерфейс для карты памяти SD
    Кнопки2 программируемые кнопки
    КамераСпециальный порт для подключения видеокамеры
    Светодиоды4 программируемых светодиода
    IrDAВстроенный ИК-приемник
    Дисплей40-пин FPC для подключения LCD (поддержка резистивного и емкостного экрана)
    50-пиновый разъем17 линий GPIO, 4-х канальный ADC, SPI, 2 PWM, дополнительный интерфейс SD

    * — объем доступной в системе памяти со стандартным ядром — около 390 Мб (в дальнейшем это ограничение было снято — детали в следующей статье). Надо сказать, я был приятно поражен тем объемом документации, который поставляется на двух DVD-дисках вместе с мини-компьютером: на дисках присутствует полная принципиальная схема, документация на каждую используемую микросхему, включая полную документацию на процессор, руководство пользователя (на китайском, но все и так понятно) различные инструкции (например, по установке Ubuntu и даже по разработке с Qt). Кроме того, имеются исходные коды ядра Linux 3.0.8, исходный код системы Android, некоторого ПО от EmbedSky, GCC 4.4.3, исходный код Qt и еще много интересного. На плате предустановлено сразу две ОС — Linux и Android 4.0.4, выбор какую загружать осуществляется через загрузчик U-Boot. Android был мною безжалостно снесен, и вся имеющаяся eMMC Flash-память использована под простой Linux. Стоит отметить, что изначально плата настроена на работу с емкостным экраном. Для того, чтобы переключить ее на резистивный интерфейс, необходимо перепаять две перемычки на обратной стороне платы рядом с LCD-разъемом. Собственно, это было первое, что я и сделал с платой после проверки ее работоспособности. Далее выяснилось, что образ Linux, зашитый в eMMC тоже по-умолчанию настроен на использование емкостного датчика. Убил несколько часов, копаясь в конфигах Qt и Tslib, но в итоге тач все-таки заработал как положено.

    С платой поставляется Qt версии 4.5 — довольно старая версия. Я люблю все новое, поэтому для работы над своим проектом, я решил скомпилировать для ARM Qt последней версии 5, а поскольку много времени тратить на разработку тоже не очень хотелось, то дополнительно я решил, что буду все писать на Python, так что мне понадобилась также библиотека PyQt5. Процессор Samsung S5PV210 имеет встроенный 3D-ускоритель с поддержкой OpenGL ES 2.0, но, к сожалению, Samsung предоставляет драйвера для OpenGL только для ОС Android, поэтому использовать Qt 5 с поддержкой OpenGL ES не получилось (попытался скопировать нужные DLL с образа Android, но одна из библиотек имела зависимость от libhardware.so и далее до бесконечности), так что я остановился на Linux в качестве платформы для вывода графики. С компиляцией Qt 5 особых проблем не возникло, за основу я взял конфиг для Raspberry Pi и вырезал все, что связано с OpenGL ES. Затем я собрал Python 2.7.6, используя инструкцию отсюда.

    При сборке для ARM библиотеки PyQt5 возникла проблема — оказалось, что библиотека имеет зависимость от заголовков OpenGL даже если Qt была собрана без поддержки OpenGL. Пришлось пропатчить библиотеку так, чтобы убрать зависимость.

    Соответствующий патч был опубликован в списке рассылки PyQt. Возможность сборки без OpenGL будет также добавлена в upstream в ближайшее время.

    После сборки PyQt5 я успешно протестировал на устройстве примеры из поставки Qt, портированные на Python и распространяющиеся в составе PyQt.

    Мой графический интерфейс к LinuxSampler и FluidSynth, написанный на PyQt5

    Далее последовала кросс-компиляция LinuxSampler и его зависимостей: libaudiofile, libfftw, libgig, libsndfile, libsamplerate. В libsndfile была обнаружена интересная фича, названная в коде библиотеки «Ultimate sanity check» — assert на то, что тип off_t имеет размер 8 байт.

    В моем случае это оказалось не так. К счастью, простое удаление этой “проверки на вменяемость” полностью решило проблему.

    Интересно, почему она делает эту проверку во время выполнения а, не прерывается на этапе configure — все равно ведь работать не будет, зачем тогда компилировать?

    Дополнительно был скомпилирован JACK в качестве драйвера вывода звука для LinuxSampler. Для него потребовались патчи arm-timestamp.

    patch и atomic.patch отсюда. Также я компилировал с такими флагами для GCC, чтобы включить поддержку расширений NEON для ARM: -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ffast-math -funsafe-math-optimizations -O3.

    На данной стадии у меня работал JACK и LinuxSampler, через который я мог проигрывать MIDI-файлы с помощью jack-smf-player. Вместе с графическим интерфейсом (см.

    выше) был написан питоновский модуль для работы с LinuxSampler по протоколу LSCP, а также с помощью SWIG сгенерирован биндинг для libgig, которая позволяет загружать GIG-файлы, и, в частности, выяснить какие внутри есть инструменты, чтобы их можно было выбрать из списка в интерфейсе на Qt.

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

    В следующей статье я расскажу:

    • Как устроена клавиатурная матрица синтезатора
    • Как я менял сгоревший МК сканера клавиатуры на ATmega, про прошивку прямо с платы, и как микроконтроллер общается с LinuxSampler
    • Как я делал ядро с поддержкой Realtime Preemption на основе стокового и как решались многочисленные возникшие проблемы
    • Как проходило общение с техподдержкой фирмы EmbedSky Tech
    • Как удалось снизить задержку (latency) звука при нажатии на клавиши синтезатора с нескольких десятков до нескольких миллисекунд

    Все описанные в этой и следующей статье манипуляции с незначительными отличиями можно проделать также и с использованием других подходящих ARM-платформ включая Raspberry Pi, для изготовления своего собственного универсального синтезатора из старой MIDI-клавиатуры. Из преимуществ последней можно отметить наличие более мощного аппаратного FPU и возможность сборки Qt 5 с поддержкой OpenGL ES 2.0.

    Следующая статья >>

    Источник: https://habr.com/post/214147/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.