ARDUINO Цветомузыка на MSGEQ7 и на фильтрах

Цветомузыка на MSGEQ7 и на фильтрах
ЦМУ на MSGEQ7. Также сюда добавляю второй проект ЦМУ на фильтрах.
ссылка на плату и схему https://oshwlab.com/technotrasher/colormusic
За год была проведена большая работа.
Итак ЦМУ на MSGEQ7.
1. Двухканальная схема. стерео.
2. Ручная регулировка шумов. предустановки шумов.
3. 7 режимов цму. в которых есть под-режимы.
4. 10 вариантов световых эффектов.
5. регулировки эффектов и режимов.
6. за "спектр" отвечают микросхемы MSGEQ7. достать рабочие сложно. (Купить более менее рабочие MSGEQ7 - по поиску на алиэкспресс "Модуль анализатора звука Aispark")
7. Аудио компрессор и система контроля клипинга взята тут - kompressor_SSM2167. прочтите обязательно, кто будет собирать.
8. описание режимов в начале скетча.
9. работа возможна с 300 светодиодами!
10. регулировка параметров с пульта и возможность сброса настроек "когда, что то нажал и все поломалось"
11. режим тишины с подсветкой (можно отключить), время срабатывания так же выставляется в скетче.
12 . Использованы статьи. тут для понимания работы MSGEQ7.
13. работа от микрофона. включается с пульта! на плате есть возможность отрегулировать чувствительность и время срабатывания микрофона.
14. режимы работы отображаются светодиодами на плате. на плате возможно механическое отсоединение сигнала с микрофона либо "байпас"
компрессора.
15. регулировка уровня входного сигнала линейным стерео потенциометром.
17. кнопки с платы убраны все, кроме переключения из ждущего режима. нужно для аварийного режима. если перестал работать пульт, а нужно включить хоть что то.
никаких энкодеров и т.д. скетч в первую очередь адаптировался под большую ленту. была битва за каждый байт и даже бит. и дорабатываться будет дальше.
18. Параметры сохраняются в память при отключении ЦМУ. в том числе режимы, шумы, настройки для режимов.
19. питание ленты обособлено от питания ардуино. вы не "сожжете" ардуино, забыв подключить внешний БП и программируя её через USB.
20.

Если вы нашли ошибку или знаете, как что то доработать - напишите об этом.

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


Этап второй ЦМУ на фильтрах. проект делается совместно с poty
проект сложен для сборки.
что сделано - плата. бетта версия. постоянно вносятся изменения. часть отлажена и уже работает.
модуль сбора данных. частично отлажен. работа продолжается.
ЦМУ на фильтрах можно повторять. работает! плату можно заказывать. недавно были изменены некоторые номиналы конденсаторов в фильтрах.
плата доступна тут .
скетч colorMusic_v8_filter.rar
эффектов очень много. все описано вначале скетча. могу сказать, что есть эффекты от Лумазоид ЦМУ. :)
 

Вложения

Изменено:

Комментарии

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
от 5В будем питать только ленту. и все. все остальное питаем от 12В. вопрос откуда там в блоке - организация двуполярного питания - и +7В и -5В.
изначально же писали +10 -10. остальное исправил.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
вопрос откуда там в блоке - организация двуполярного питания - и +7В и -5В.
С помощью виртуальной земли (в схеме формирователь есть), так расделяется напряжения с однополярного БП 12в: +7 и -5 вольт, относительно виртуальной земли. Которая, в свою очередь соединяется с массой БП на +5в, которая одновременно является землей для ардуино и матрицы/ленти. Что же тут не ясно? Вполне кошерная схема.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
@technotrasher, можно сделать и так, как Вы предлагаете, но схему придётся немного усложнить:
Питание Ардуино.png
AMS1117 можно заменить на любой 5В стабилизатор, главное, чтобы он мог работать с низкими выходными токами и имел не менее 12В входного напряжения.
Смысла в этом немного, но как вариант - почему бы и нет?
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
У меня есть простая идея, правда, не уверен, что она сработает. Если взять схему, приведённую в последнем моём сообщении, то имеем полностью работающую структуру без учёта адресной ленты. Как можно подключить к этому ленту?
1. Можно взять внешний изолированный блок питания на 5В, подключить минус этого блока питания к земле GNDD, плюс - к питанию ленты +5В, цифровой вывод Arduino - к управляющему входу ленты. Всё будет работать, но нужны именно изолированные блоки питания 5В и 12В (изолированные = не соединены земли).
2. Если используется неизолированный блок питания (например, 12В получается из 5В, питающего и ленту тоже, с общей землёй -5В и -12В - соединены между собой), то напрямую соединять цифровой вывод Ардуино и управляющий вход ленты нельзя - между ними 5В смещения виртуальной земли. Однако, мы легко можем поставить в эту цепь стабилитрон на 5В и получить на его выходе обычные логические уровни! Стабилитрона на 5В нет в природе, но мы можем смещение виртуальной земли сделать 5,1В и тогда применить стандартный стабилитрон на 5,1В.

P.S. Во втором случае можно применить оптопару, например, TLP2362. На это решение меня натолкнул @kach-99. Оказалось, что оптопары с высоким быстродействием существуют! :)
 
Изменено:

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
У меня же давать пояснения вам - нет ни малейшего желания.
Я и не прошу. Вы вообще обещали не вмешиваться, не мне кстати.
Вопрос к poty можно ли на пиковый детектор подать синусоидальный сигнал через разделительный конденсатор?
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
@VictorArx, напрямую - нет (из-за наличия диода), потенциально вариант использования конденсатора для блокирования постоянной составляющей в этом варианте существует. Но получается довольно топорно, детали нужно применять довольно большие и в каждом канале отдельно. Проще транспонировать сигнал с Ардуино на уровень земли ленты, основная проблема здесь - высокая частота сигнала для ленты, нужно тщательно выбирать решения.
 

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
так. схема готова. все изменения внесены. теперь нужно просмотреть её. там наверняка могут быть ляпы. и я начну разводку. источником +12В буду использовать хайлинк. прямо на плату.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
@technotrasher, посмотрел (сразу скажу, что внимательно посмотреть не дали, только то, что бросилось в глаза):
  • в позиции 1940X/340Y стоит резистор 10кОм, который идёт от верхних выходов полосовых фильтров, его нужно сделать 100Ом; чтобы завершить с резисторами: с нижних выходов ОУ полосовых фильтров после 1N5817 стоят резисторы 1кОм, их лучше сделать в районе 200 Ом (точное значение неважно 150-300);
  • 100nF, которые стоят в части, отвечающей за формирование виртуальной земли параллельно 470мкФ, лучше поставить вблизи выводов ОУ, можно прямо между + и -; чтобы завершить с землями: GND и GNDD в схеме должны быть соединены!!!
  • на вход LM2903DRG будет поступать постоянная составляющая со смещения затворов FDV303N, я не смотрел этот узел, просто предупреждаю, чтобы понимали что там может быть; хотя бы конденсаторы в эти соединения добавить с моей точки зрения;
  • выходы блока микрофона и переключателя стерео каналов по АС запараллелены, не уверен, что это прокатит; выход переключателя входов имеет возможность отключения, а вот микрофон прикручен всегда (отключение его от питания не выключает его выходные цепи из пути сигнала).
Дальше - просто соображения:
  • применяется большая номенклатура диодов: BAS32, SS24BC, 1N5817 (1N4148 здесь стоит в стороне, так как нам нужно получить 1В смещения, а все остальные диоды, кроме BAS32, имеют прямое падение напряжения около 500мВ) - я бы как-то привёл всё к одному знаменателю, легче будет закупаться;
  • в качестве задела на будущее - соединить Offset с A7 - так мы можем оценить, какое напряжение сейчас находится на REF и действовать сообразно.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
@poty, Утро доброе. Потихоньку собираю Вашу схему на полосовых фильтрах. Возникло пару вопросов, просьба сильно не пинать. Какую роль играет резистор R5 в пиковом детекторе? Я поэтому и подумал, что это интегратор. Учитывая падение напряжения на диоде 0.7 v, нельзя ли расcчитать коэффициент ОУ , чтобы на выходе была амплитуда 5.7 v и после диода будут те же 5 v и обойтись без напряжения смещения. И последний вопрос. Не лучше вместо ПД применить УВХ. Спасибо.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
@VictorArx, по большей части Ваших вопросов - это теоретическая часть. Я заранее прошу прощения у @technotrasher, если ему в его ветке моё сообщение будет не нужно, прошу сказать, я удалю.
R5 не является интегратором. В теории, с идеальным операционным усилителем, его там не должно быть вовсе. Однако, в реальном мире всё не так идеально. ОУ, при работе на ёмкость, на определённых частотах может уходить в возбуждение, потому что ООС из-за сдвига фазы на нагрузке, превращается в ПОС. Собственно, резистор уменьшает влияние ёмкости на обратную связь (которая подключена непосредственно на выход ОУ, имеющий малый выходной импеданс). В курсе РТЦ, который я проходил в далёких 80-х прошлого века, все ОУ являлись усилителями напряжения, соответственно, во всех были на выходе встроены интегрирующие цепи, обеспечивающие завал выходного уровня с крутизной 6дБ/октаву в опасной зоне самовозбуждения (зависит от многих параметров ОУ). Сейчас стали доступны так называемые "ОУ с токовым входом", в которых можно без этого при определённых условиях обойтись. Но это - тема для длинных трудов, страниц эдак на 1000.
Учитывая падение напряжения на диоде 0.7 v, нельзя ли расcчитать коэффициент ОУ , чтобы на выходе была амплитуда 5.7 v и после диода будут те же 5 v и обойтись без напряжения смещения.
Ваш вопрос распадается на 2 части:
1. Можно ли при данном питании (12В) сделать амплитуду сигнала 5,7В?
2. Что это улучшит?
Ответ на первый вопрос очевиден. Разность напряжений от пика до пика для сигнала, амплитудой 5,7В, равна 11,4В. Ограничение применённого ОУ (а в такой схеме есть смысл применять относительно дешёвые ОУ) по плюсовой шине - 1,5В. Итого, напряжение питания должно быть не ниже 11,4 + 1,5 = 12,9В, т.е., мы не проходим почти на вольт. Можно было бы пожертвовать 0,7В от сигнала (и это можно легко сделать в данном случае просто убрав Offset), но в полный рост встаёт вопрос номер 2.
При амплитуде сигнала 5В нечувствительность схемы к низким амплитудам сигнала будет -17дБ (в предлагаемом диапазоне 5,7В это будет -18дБ). Т.е., сигнал по динамическому диапазону должен был сжат на эти 17-18дБ (напомню, что даже с винила динамический диапазон сигнала - 40-60дБ, с CD теоретический уровень - больше 90дБ, при этом - теоретический предел входа АЦП МК 60дБ, практический - около 50дБ). "Ценой" одного диода я могу убрать это ограничение, получив на нём этот самый offset, так почему я от этого должен отказываться?
Понятие "ПД" я расшифровал из контекста, за "УВХ" пришлось лезть в Интернет. А почему Вы считаете, что у нас нет УВХ? Будете удивлены, когда прочитаете даташит на Atmega 328p - там ровно этот метод и применяется, я об этом говорил на первой странице данной темы. Но УВХ - это метод сэмплирования, а не метод определения пикового значения. Я хочу, чтобы Вы повнимательнее посмотрели на "ТЗ" от @technotrasher. Фактически, зная это или нет, он выдал важное дополнительное условие пикового детектирования: постоянную времени цепи накопления, над которой мне пришлось думать больше всего (сама-то схема вообще ничего оригинального из себя не представляет, как и её расчёт). Потому Вы видите разные сопротивления резисторов, включенных параллельно конденсаторам пикового детектора - они как раз и выполняют функцию определения постоянной времени разряда конденсатора для определения минимально допустимой динамики изменения (и измерения) пикового сигнала. Одним из несомненных преимуществ программной обработки сигнала, за который ратует @kDn, как раз и является то, что эти величины (пиковое детектирование и динамику использования) можно легко менять программно, после УВХ АЦП МК. Но АЦП с УВХ является в этом деле лишь "сэмплером", не пиковым детектором.
 
Изменено:
  • Лойс +1
Реакции: VictorArx

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
Изменения внес. расположение элементов - что к чему ближе будет учтено при разведении дорожек на плате.
 

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
есть вопрос к программистам. у меня тут тупик.
эффект радуга. есть минимум четыре варианта.
код -

if (millis() - myTimer1 >= 30) {
myTimer1 = millis();
this_color -= 1;
}
fill_rainbow( leds, NUM_LEDS, this_color, RAINBOW_STEP ); // RAINBOW_STEP 1 - 30

RUNNING_SPEED - тут скорость эффекта. 30.
NUM_LEDS - колличество светодиодов
RAINBOW_STEP - шаг радуги. тут так -
«this_color» - это начальный оттенок, а «RAINBOW_STEP» - это дельта-оттенок между светодиодами. Таким образом, светодиод [0] будет иметь оттенок 0, а следующий светодиод будет иметь оттенок 5, затем оттенок 10 и т. Д.

так вот. у меня 180 светодиодов. радуга получается только из красного и зеленого цвета!!! есть ставлю 50 все отлично работает.
есть выношу код в отдельный скетч - все отлично!
настройки
setup:
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS).setCorrection(CORRECTION);
if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);
FastLED.setBrightness(64);

нехватка памяти? не уверен. память устройства 79 на динамическая 74.
пока не могу разобраться.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
Не исправлено:
100nF ... параллельно 470мкФ ... поставить вблизи выводов ОУ ... между + и -; ... GND и GNDD ... должны быть соединены!!!
...
соединить Offset с A7
Между Vout и GND AMS1117-5.0 поставить сопротивление 510Ом, иначе можем не пройти по минимальному току регулятора.
Потенциально (не обязательно) - для уменьшения нагрузки на аудиовыход = увеличить пары 10кОм/24кОм на затворах FDV303N, можно раз в 10.
IRML6302: должно быть затвор-резистор_100Ом-[ 1. резистор 10кОм на землю; 2. провод на D4]
Всё остальное по моей части - в норме.

По FastLED:
Как объявлены leds, NUM_LEDS, this_color, RAINBOW_STEP?
И вот это непонятно:
память устройства 79 на динамическая 74.
 
Изменено:

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
#define NUM_LEDS 180
byte this_color;
byte RAINBOW_STEP = 2;
работает все остальное. только радуга не получается.
память при компиляции.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
Если 79 байт - это всё, что остаётся, думаю, этого не хватает.
Но можно последовательно наращивать количество светодиодов, чтобы понять когда сломается.
Либо делать динамическое выделение промежуточных массивов данных. Скетч есть где посмотреть?
 

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
перестаёт работать четка на 50. точнее перестают появляться оттенки цвета. только красный и зеленый остаётся.

проверил на счет памяти. нет. не она. убрал опрос пульта. памяти стало 56% и 67%. увы. цвета не появились. где то ещё проблема.
 

Вложения

poty

★★★★★★✩
19 Фев 2020
3,222
937
@technotrasher,
изображение_2021-09-11_124848.png
Управление, разумеется, "обратное": логическая 1 на выходе - нет питания нагрузки, 0 - нагрузка подключена.

По поводу FastLED: а не может это быть комбинацией коррекции гаммы, яркости и ограничения тока?

P.S. А почему использовали двухканальные ОУ? 4-х канальные были бы удобнее, к.м.к.
 
Изменено:

technotrasher

★★★★✩✩✩
14 Ноя 2019
510
227
я тоже об этом думал. странно 50 светодиодов и все. попробую поменять.
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
Для отладки можно попробовать сравнить результат работы fill_rainbow с ожидаемыми значениями. Допустим, 0-вое, 49-ое, 50-ое, 99-ое...
 

poty

★★★★★★✩
19 Фев 2020
3,222
937
@technotrasher, имеется в виду, что в RGB-пространстве для определения цвета необходимо 3 байта, по одному на каждую составляющую цвета.
Есть ещё HSV-пространство, в котором цвет представлен градусами цветового колеса (0-360 градусов, hue) и насыщенностью ( байт, saturation), т.е. в стандартных терминах - те же 3 байта.
В FastLED 0-360 сжаты в 0-255 (1 байт) двумя разными способами и хранение цвета превращается в 2 байта. Использованная функция учитывает только сжатую hue-составляющую, saturation=255, потому и тип переменной - байт.
 
  • Лойс +1
Реакции: technotrasher