МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus Prime для платы Марсоход3

Цветомузыка в FPGA

Поздравляем с Новым Годом! Новый Год 2019 стучится в двери и мы к нему уже готовы: FPGA проект "цветомузыка" готов и можно звать гостей на дискотеку. На этих видео смотрите, как оно работает:

Вот еще такое видео записал:

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

Исходники проекта можно взять вот здесь, на гитхабе: https://github.com/marsohod4you/light-music

Топ модуль проекта выполнен в виде вот такой схемы:

Quartus Prime Top Module Schematics of Light-Music Project

Схема выглядит мелковатой, но думаю если откроете ее в отдельной вкладке браузера, то кое-что сможете рассмотреть. Красным цветом я добавил подписи к модулям. На схеме есть модуль АЦП FPGA MAX10 под названием fiftyfivenm_adcblock_top_wrapper. От него оцифрованный сигнал идет на три цифровых КИХ фильтра: низкие частоты (LOW PASS1), средние (MID PASS) и высокие (HIGH PASS). Границы частот я подбирал экспериментальным путем. Я прочитал довольно много статей про цветомузыку и смотрю, каждый инженер выбирает границы фильтров, как ему больше нравится, четких правил нет. Конечно это понятно: сколько людей - столько и мнений. В моем случае дело еще осложняется тем, что я принимаю аудио сигнал на микрофон, через самодельный микрофонный шилд к плате Марсоход3bis. Естественно, что я не знаю амплитудно частотную характеристику своего микрофонного усилителя на шилде. Да и микрофон может вносить изменения в спектр сигнала. С цифровых фильтров сигнал поступает на широтно-импульсные модуляторы PWM (Pulse Width Modulation). С модулей PWM сигналы выводятся на светодиоды платы Марсоход2bis, правда они там все желтые, но для отладки  - пойдет. Главный же эффект делается на интеллектуальной светодиодной RGB ленте и этой лентой управляет модуль colorsRGB.

Модули colorsRGB, pwm, fir_filter и некоторые другие написаны на Verilog HDL.

Должен сказать, что канал низких частот был пожалуй самым не простым в этом проекте. Я сперва думал, что можно будет поставить просто фильтр низких частот, однако, что-то пошло не так: я заметил, что красный цвет у меня всегда сильно "гудит" от низких частот, похоже 50Гц. тогда я пытался сделать цифровой полосовой фильтр, чтобы отсечь все частоты ниже 50Гц. Эта задача оказалась очень не простой при частоте дискретизации около 50кГц требуется очень много звеньев КИХ фильтра. В результате многочисленных экспериментов я сделал двухступенчатый фильтр. Сперва сделал фильтр низких частот на 800Гц, потом после него сделал ресамплер - то есть понизил частоту дискретизации в 16 раз. И уже потом на более низкой частоте дискретизации делал полосовой фильтр низких частот.

Расчет фильтров я делал в онлайн калькуляторе t-filter.

В результате у меня получились вот такие частотные характеристики для низких частот. Первый фильтр:

frequency response 800Hz Low pass filter for color music

Второй каскад низкой частоты, выход которого и есть красный канал на цветомузыке:

frequency response band pass filter for color music

Для фильтра средних частот (зеленый канал) я выбрал дапазон 700-2700Гц:

frequency response mid pass filter for color music, green channel

Для высоких частот (синий канал) выбрал 3000-15000Гц.

frequency response high band filter for color music, blue channel

Мне остается только добавить, что этот проект выкатился уже в четыре статьи на нашем сайте, эта статья и плюс вот эти:

1) изготовление платы микрофонного усилителя для платы марсоход3bis в домашних условиях методом ЛУТ

2) построение цифрового КИХ фильтра с большим числом звеньев (у меня до 512), модуль на Verilog, и симуляция фильтра в icarus verilog

3) управление светодиодной лентой.

 

Комментарии  

0 #7 x86128 01.05.2019 07:45
Цитирую ИгорьМ:
Добрый день.
в Assignments => Device => кнопка Device And Pin Options => вкладка Configuration => Configuration mode установить ...Image with Memory Initialization...

Спасибо! Тоже вылезло но в другом проекте. Добавил эту настройку и образ памяти загрузился как надо!
0 #6 nckm 14.01.2019 10:42
Цитирую ИгорьМ:

Но возник еще один вопрос.
У вас в проекте 2 ревизии max10_50 и max10_8
в qsf файлах для этих ревизий разные чипы.
max10_50.qsf
set_global_assignment -name DEVICE 10M08SAE144I7P
max10_8.qsf
set_global_assignment -name DEVICE 10M08SAE144C8G
и разные assignment.
Для max10_50 Quartus выдает ошибку для ног FTD[4], FTD[2], IO[17], IO[16], LED[6], LED[5].
Assignment этих ног на GND или VCCIO

Честно говоря не пробовал под 50й макс. Надо попробовать.
Если какие назначения мешают их можно вообще убрать из Assignment Editor, но в "Assignments => Device => кнопка Device And Pin Options => вкладка Unused Pins => поставить As Input Tristate.
+1 #5 ИгорьМ 14.01.2019 08:02
Добрый день.
Спасибо за направление:
"Assignments => Device => кнопка Device And Pin Options => вкладка Configuration => Configuration Scheme => утановить в Internal Configuration."
Но этого не достаточно, нужно выбрать:
в Assignments => Device => кнопка Device And Pin Options => вкладка Configuration => Configuration mode установить ...Image with Memory Initialization...

Но возник еще один вопрос.
У вас в проекте 2 ревизии max10_50 и max10_8
в qsf файлах для этих ревизий разные чипы.
max10_50.qsf
set_global_assignment -name DEVICE 10M08SAE144I7P
max10_8.qsf
set_global_assignment -name DEVICE 10M08SAE144C8G
и разные assignment.
Для max10_50 Quartus выдает ошибку для ног FTD[4], FTD[2], IO[17], IO[16], LED[6], LED[5].
Assignment этих ног на GND или VCCIO
0 #4 nckm 13.01.2019 17:00
Цитирую ИгорьМ:
Здравствуйте. Уже лучше.
Но скомпилировать не удается.
Error (16031): Current Internal Configuration mode does not support memory initialization or ROM. Select Internal Configuration mode with ERAM.
Locate Node: altsyncram_u7a1.tdf
q_a[15..0] : output;

Странно.. Сделал чистый git clone и могу компилировать с Quartus Prime 18.0.
Но если такая ошибка, то можно попробовать задать в меню Assignments => Device => кнопка Device And Pin Options => вкладка Configuration => Configuration Scheme => утановить в Internal Configuration.
0 #3 ИгорьМ 09.01.2019 14:24
Здравствуйте. Уже лучше.
Но скомпилировать не удается.
Error (16031): Current Internal Configuration mode does not support memory initialization or ROM. Select Internal Configuration mode with ERAM.
Locate Node: altsyncram_u7a1.tdf
q_a[15..0] : output;
0 #2 nckm 09.01.2019 06:52
Цитирую ИгорьМ:
Добрый день.
Решил скомпилировать ваш проект.
Скачал по ссылке.
Запустил в Quartus Prime Lite Edition 17.0.0
Выдает 2 ошибки:
1. Error (12006): Node instance "inst163" instantiates undefined entity "clocker". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.
В проекте отсутствует clocker.
2. Error (12006): Node instance "inst127" instantiates undefined entity "div4". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.
Тоже самое к div4. Этот блок, похоже, в проекте не учавствует. По всей видимости его надо удалить.

Сорюшки.. добавил недостающие файлы. Попробуйте git pull.
0 #1 ИгорьМ 07.01.2019 08:31
Добрый день.
Решил скомпилировать ваш проект.
Скачал по ссылке.
Запустил в Quartus Prime Lite Edition 17.0.0
Выдает 2 ошибки:
1. Error (12006): Node instance "inst163" instantiates undefined entity "clocker". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.
В проекте отсутствует clocker.
2. Error (12006): Node instance "inst127" instantiates undefined entity "div4". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.
Тоже самое к div4. Этот блок, похоже, в проекте не учавствует. По всей видимости его надо удалить.

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



ВКонтакте  facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Проекты Проект Марсоход3 Цветомузыка в FPGA