MIDI-контроллер: шум потенциометров, питание

takeoff
Offline
Зарегистрирован: 27.06.2016

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

Делаю для себя проект MIDI-контроллера под софтовые аудио инструменты/эффекты, которые склепал на компе. Большое западло крутить мышкой все ручки/кнопки, поэтому решил вынести всё управление на внешнее устройство: все команды от кнопок/потенциометров идут с UNO через сериал в специальное приложение на винде, которое уже переводит команды в MIDI формат, и ими контролируется софт.

Реализация: идет луп по 16-ти потенциометрам, 30-ти кнопкам - они висят на мультиплексорах, подключенных к аналоговым входам. Плюс еще есть 27 светодиодов на сдвиговых регистрах (на цифровых входах) и планирую добавить экран 16*2.

Код почти готов. Картинка панели: 

Теперь вопросы:

1) Что будет с питанием при такой нагрузке? (Я проектировал в миниатюре - на 4 потенциометрах и кнопках и 8 светодиодах). Необходимо ли добавлять внешнее питание? Если да, то какое и как?

2) У потенциометров есть шум. Важно от него избавится, потому что от каждого из них идут лишние команды дальше в компьютер. Есть ли способы? Слышал об усреднении, но боюсь, что если постоянно его делать для 16-ти потенциометров, у них упадет скорость отклика, а это важно. К тому же, в следующем проекте (уже на меге) будет около 50-ти потенциометров. Какие аппаратные/софтовые решения посоветуете?

3) (опционно) Может какие-то советы по более лучшей реализации?

4) (опционно) Куда, блин, ваще схему перенести с макетки? На плату какую-то? Есть у кого ссылка почитать о том, что происходит после проектирования?



 

Наперед гран мерси.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Питание рассчитывается по схеме, а не по рисунку лицевой панели.

2. Выход потенциометра зашунтировать конденсатором. Это аппаратно. Программно - можно вычислять медиану из 3-7 измерений.

3. Пока обсуждать нечего.

takeoff
Offline
Зарегистрирован: 27.06.2016

1. Есть миниатюрная схема. На ней 8 светодиодов, 4 потенциометра, 4 кнопки, 1 сдвиговый регистр, 2 мультиплексора.

(Уже сейчас есть со светодиодами проблемы, скорее всего не программные - при нажатии последней (4ой) кнопки загорается и соответствующий номер светодиода и остальные (5, 6, 7, 8), и все 8 светодиодов начинают гореть ярче. Вот думаю, что это как-то с питанием может связано. Не могу нормально тестить - не хватает места на макетке)

 

В финальной сборке вот такой список:

- 27 светодиодов на 4 сдвиговых регистрах 74HC595 (все висит на трех цифровых пинах)

- 27 резистров 220 Ом к светодиодам

- 16 потенциометров 10 кОм на 2 мультиплексорах 74HC4051 (по 8 потенциометров на 1 мультиплексор - каждый мультиплексор на отдельном аналоговом входе)

- 30 кнопок на 4 мультиплексорах 74HC4051 (по 8 кнопок на 1 мультиплексор - каждый мультиплексор на отдельном аналоговом входе)

- 30 резистров 10 кОм к кнопкам

- Дисплей 16*2 (6 цифровых пинов)

 

Меня терзают сомнения, что это все потянется. Мне бы хотя бы подсказку по какой формуле рассчитывается питание. 

+ Если внешнее питание будет через блок, то там надо чтоб было выше напряжение или сила тока?

Пардон за школьные вопросы :)

 

2) Пара уточнений. Какими именно конденсаторами шунтировать? И если высчитывать медиану из 7 значений для 16 потенциометров, и еще крутить луп по 30 кнопкам при этом, не отразится ли это на скорости отклика при кручение ручки? И так есть небольшая задержка из-за программы, которая переводит из сериала в миди, не хотелось бы ее увеличивать.

Спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

При таком количестве подключаемой периферии логичнее было бы использовать Мегу 2560. У нее, кстати, как раз 16 аналоговых входов.

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

В принципе должно хватить стандартного БП 5В 2А.

Немножко озадачивают резисторы 220 Ом на светодиоды. Во-первых, по совокупности только они при таких номиналах будут "кушать" полампера. Но самое главное, мне кажется, что они будут просто слепить. Для индикации обычно достаточно резисторов от килоома и выше.

Кстати, у Вас почти одинаковое количество кнопок и светодиодов. Может заинтересовать такая конструкция: http://ru.aliexpress.com/item/Freeshipping20pcs-Tactile-Push-Button-Swit...

По поводу места на макетке мне обычно хватает одной компактрой (как у Вас с кнопеами). Но я не пренебрегаю пайкой:

- светодиоды у меня спаяны с резисторами, кусочком провода 15-20 см и заканчивается это все штырьками от разъема. Соответственно вся конструкция занимает одну дырку на шине питания и одну дырку в том месте, которое нужно индицировать - в Вашем случае выходную ногу сдвигового регистра. Итого весь регистр - 8 горизонталей.

- потенциометры: припаиваю по три провода, оконцованные штырьками от разъемов. Занимает по одной дырке в шинах земли и питания и, собственно, один входной пин Ардуины.

По поводу задержек:

- одна MIDI команда занимает обычно 2-3 байта и принимается/отправляется порядка 1 мс.

- один сдвиговый регистр заполняется примерно 180 мкс. Если их 4 в ряду - будет более 0.7мс. Это уже ощутимо. Поэтому лучше подключать их не каскадом, а индивидуально, чтобы если нужно зажечь/погасить 1 светодиод, то обновлять состояния только 8 светодиодов, а не всех 32 выходных линий.

- измерение напряжения на одном потенциометре примерно 110 мкс. Это если мерять один раз и не усреднять. На движок потенциометра рекомендую поставить конденсатор 0.1 мкф на землю. Возможно, этого хватит, чтобы бороться с шумами. Если недостаточно - попробуйте медиану по 3 измерениям.

Скорость отклика на клавишу желательно не более 2 мс, в крайнем случае 5 мс. Дуцмаю, что на другие органы управления за глаза хватит 10 мс. В общем, я бы постарался сделать так, чтобы один проход loop() был не более 2 мс. За это время мы можем отослать одну команду MIDI - 1 мс, получить состояние 8 кнопок - 0.18 мс, вывести индикацию на 8 светодиодов - еще 0.18 мс и прочитать состояние двух потенциометров 2*0.11=0.22. Итого по максимуму около 2.1 мс. При этом полный цикл опроса кнопок или установки светодиодов (4 прохода loop()) у нас займет ~8.5 мс, а потенциометров - ~17 мс. Если беспокоят именно потенциометры, можно их опррашивать по 4 за один проход цикла, тогда длительность цикла вырастет до 2.3 мс, а для всех органов уроавления он составит ~10.5 мс. Собственно так и нужно делать: опрашивать не все органы управления, а чередуя по группам.

takeoff
Offline
Зарегистрирован: 27.06.2016

Большое спасибо! Куча полезной информации - буду усваивать.

П.С. 220 Ом на светодиоды только потому, что я читал, что это для них оптимальный номинал. Мне яркость не критична, и если так можно уменьшить питание - я только за.

П.П.С. Отличная ссылка на кнопки-леды.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

takeoff, потенциометры -слишком олдскульно.  21 век на дворе. Ладно бы ими микшировать громкость аналоговых аудиоканалов. Но регулировать напряжение на ацп, которое ещё и трястись будет по несколько LSB туда-сюда. -Совсем не годно. Давно всё на энкодерах делают. Возможностей в разы больше, хочешь энкодером каналы микшируй, хочешь эффекты переключай, хочешь инструменты перебирай. Конечно это тяжёлее и технически и программно выйдет, придёться поднапрячься. Зато без проблем в дальнейшем.

takeoff
Offline
Зарегистрирован: 27.06.2016

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

К тому же, думаю, на всех моих миди-инструментах стоят именно потенциометры (теперь вот придется перепроверить :)). 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

takeoff пишет:

П.С. 220 Ом на светодиоды только потому, что я читал, что это для них оптимальный номинал. Мне яркость не критична, и если так можно уменьшить питание - я только за.

Тут нужно заботиться не об уменьшении питания, а о собственном комфорте: яркая светящаяся точка в поле зрения раздражает. А если их еще и много - это будет реально затруднять работу.

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

 

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

m-zzz
Offline
Зарегистрирован: 30.05.2015

dimax пишет:

 регулировать напряжение на ацп, которое ещё и трястись будет по несколько LSB туда-сюда. -Совсем не годно. 

Ну и какие проблемы? Кроме фильтрации на железячном уровне(конденсатор на входе АЦП) все равно надо будет из примерно тысячи входных уровней, сделать 128 (0-127).. Ипусть хоть утрясется "туда-сюда", все одно-медиану вычислять, и округлять при уменьшении разрядности... 

m-zzz
Offline
Зарегистрирован: 30.05.2015

andriano пишет:

Тут нужно заботиться не об уменьшении питания, а о собственном комфорте: яркая светящаяся точка в поле зрения раздражает. А если их еще и много - это будет реально затруднять работу.

Полностью поддерживаю предыдущего оратора))

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

andriano пишет:

энкодеры обладают минимум на порядок меньшим пространственным разрешением по сравнению с потенциометрами

Как правило, это так и есть.. если речь идет о дешевых китайских моделях "с кликом"

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

Минус, о котором упомянул ТС, у них правда тот же самый- нет ограничения угла поворота и соотв, нет тактильных ограничений. Максимум (минимум) уже достигнут, а крутить еще можно сколько угодно..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

m-zzz пишет:

Как правило, это так и есть.. если речь идет о дешевых китайских моделях "с кликом"

Так есть ВСЕГДА, когда речь идет об энкодерах и потенциометрах одного ценового дианазона.

Цитата:

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

Минус, о котором упомянул ТС, у них правда тот же самый- нет ограничения угла поворота и соотв, нет тактильных ограничений. Максимум (минимум) уже достигнут, а крутить еще можно сколько угодно..

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

http://ru.aliexpress.com/item/Photoelectric-Speed-Sensor-Encoder-Coded-D...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Кстати у борнса есть весёленькие энкодеры, с встроенными светодиодами, от 1 до 3х штук LED в одном энкодере, можно цветом индицировать величину "накрутки", прям как раз для всяческих миди контроллеров :)

Trezor
Offline
Зарегистрирован: 18.12.2019

Привет! Вы собрали свой проект(midi controller)? Поделитесь пожалуйста схемой и скетчем? Тоже ищу что то похожее, мне достаточно 16 ручек, но лучше как можно больше)

Вот похожие:
https://forum.arduino.cc/index.php?topic=343970.0

https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/

 

m-zzz
Offline
Зарегистрирован: 30.05.2015

--- Вообще-то потенциометр и энкодер (валкодер) - это совершенно разные устройства управления.

КЭП?!! ))

Вообще то , то что я писал, было именно про энокдеры, там прямо так и написано было, это я так, для невнимательных..

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

m-zzz
Offline
Зарегистрирован: 30.05.2015

Однако энкодером оно от этого быть не переставало... просто другого принципа действия.

Описанная мною модель абсолютного многооборотного энкодера, на выходе дает не импульсы, а плавно изменяющиеся аналоговые уровни (sin/cos)

Trezor
Offline
Зарегистрирован: 18.12.2019

Да я совсем не про это спрашивал, и знаю чем энкодеры отличаются от переменных резисторов, имел как то опыт с mjoy16. Мне просто проект интересует, хотя бы с 16ю "ручками". Схемку и скетч)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Trezor пишет:

Да я совсем не про это спрашивал, и знаю чем энкодеры отличаются от переменных резисторов, имел как то опыт с mjoy16. Мне просто проект интересует, хотя бы с 16ю "ручками". Схемку и скетч)

Ну, основа схемы там простейшая: если нужно 16 ручек, значит, параллельно между питанием и землей включаются 16 потенциометров по 10 кОм, с движков которых подается напряжение на аналоговые входы Ардуино, желательно, Меги. Питание потенциометров и Ардуино - обязательно одно и то же (а источник опорного напряжения - питание). Параллельно входам устанавливаются керамические конденсаторы по 0.1 мкФ.

Основа скетча - analogRead(). Но, в принципе, желательно еще избавиться от дребезга и ограничить поток MIDI команд некоторой величиной, например, не посылать команду от одного контроллера чаще одного раза в 15 мс.