Тёмный

ARDUINO КАК Работает DDS Генератор? Подробно об алгоритме DDS 

Подписаться
Просмотров 7 тыс.
% 323

DDS генератор на Arduino Nanao. Прямой Цифровой Синтез
Статья musbench.com/all/dds-audio-generator-arduino/
Самое подробное объяснение алгоритма DDS - Прямой Цифровой Синтез Аналоговых сигналов. Сегодня мы рассмотрим цифровой метод генерации аналоговых сигналов на примере генератора звуковой частоты на основе платы Arduino Uno. Данный генератор спроектирован в основном с целью демонстрации работы принципа работы DDS алгоритма. Прошивка написана исключительно на языке Си для Arduino без ассемблерных вставок. Тем не менее, даже этот простой генератор создает синусоидальный сигнал в диапазоне частот от нуля до 30 кГц, что перекрывает весь диапазон звуковых частот (более совершенный генератор на контроллере ATMegа с диапазоном до 300 кГц будет описан в одном из следующих видео.
Донаты для канала: www.donationalerts.com/r/mrshanti
Отличный DDS Генератор из Китая ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-omhsyd48zEo.html
-
Bluetooth термометр на Arduino studio.ru-vid.comypJLxh9rkxA/edit
Proteus 8 Visual Designer Серво мотор ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-l4BLiVUU1SU.html
Arduino в Proteus БЕЗ Кода! Часть 2 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-qfxoM8nAar4.html
-
Телеграм канал t.me/mbselectronics Чат канала t.me/mbs_electro
Хороший 3D принтер s.click.aliexpress.com/e/_Dk4KoTr
ABS Пластик для 3D печати s.click.aliexpress.com/e/_DejvcFf
PLA Пластик для 3D печати s.click.aliexpress.com/e/_Dkl6iZx
Мои Путешествия goo.gl/6JoHxh
-
Credits:
ES_Abandoned City 5 - Merlean.mp3
ES_Exotic Drones 2 - Gunnar Johnsйn.mp3
from epidemicsound.com
Licensed for Scalelab MCN partner

Опубликовано:

 

30 апр 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 47   
@MbsElectronics
@MbsElectronics Год назад
Донаты для канала: www.donationalerts.com/r/mrshanti Статья и все файлы к этому ролику musbench.com/all/dds-audio-generator-arduino/ Телеграм канал t.me/mbselectronics Чат канала t.me/mbs_electro Хороший 3D принтер s.click.aliexpress.com/e/_Dk4KoTr ABS Пластик для 3D печати s.click.aliexpress.com/e/_DejvcFf PLA Пластик для 3D печати s.click.aliexpress.com/e/_Dkl6iZx Мои Путешествия goo.gl/6JoHxh
@ihtiandr9
@ihtiandr9 2 месяца назад
как всегда все доступно и понятно .. нормальным человеческим языком
@akademiklime9266
@akademiklime9266 Год назад
Гениально маэстро! Лайк и подписка!
@electronic7979
@electronic7979 Год назад
Nice video
@safocl9768
@safocl9768 4 месяца назад
2:05 -- а можно представить ассемблерный код, который будет быстрее работать чем сгенерированный компилятором?
@SIM31r
@SIM31r Год назад
1:30 точность особо важна для старших разрядов резисторов, младшие особо не важны уже. Если есть куча резисторов, можно отобрать самые точные (одинаковые) в старшие разряды, а в младшие любые.
@iloverobotics113
@iloverobotics113 Год назад
Добрый день, Олег. Спасибо за интересное видео. Быть может вы знаете как подключить камеру к микроконтроллеру с радиомодулем и передать на другой микроконтроллер видеосигнал?
@gimeron-db
@gimeron-db Год назад
Из ардуинки напрашивается сделать синтезатор. Вместо потенциометра прикрутить линейку резисторов, под капотом частоту вычислить как 440 * 2^(K*R/12), а "инструменты" зашить в виде таблиц для синтеза сигнала. Для поддержки одновременного нажатия клавиш придётся усложнять клавиатуру и процедуру синтеза (считать сумму всех сигналов для каждой клавиши). Клавиатуру можно сделать матричную, только для каждой кнопке добавить по диоду, чтобы не было ложных срабатываний.
@SIM31r
@SIM31r Год назад
Уже есть такой музыкальный синтезатор, он очень сложный. Так как оптимизирован каждый бит и такт микроконтроллера, малейшая правка кода рушит всю программу вызывая непонятные глюки. Лучше такое делать на более мощных МК с математическим сопроцессором. Там останется место и для оптимизации и результат будет лучше.
@MbsElectronics
@MbsElectronics Год назад
Есть проект AVRSynth, на 16-й меге. В одном из след. роликов выложу про DDS генератор на mega8 там до 300 кгц, но DDS функция на ассемблере а компилятор не ардуино, другой. Ассемблерные вставки в GCC на кортом основан Ардуино - это вынос мозга. Для проектов на самостоятельных контроллерах я юзаю другой (платный) компилятор. Там можно писать на обычном ассемблере без этих двоеточий, амперсандов и пустых точек...
@gimeron-db
@gimeron-db Год назад
38:35 - Кажется, вместо goto можно было бы использовать простой бесконечный цикл for (;;) { ... }
@MbsElectronics
@MbsElectronics Год назад
можно попробовать по разному и сравнить быстродействие
@rmatveev
@rmatveev Год назад
А не рассматривали вариант PWM выход + двойной (или даже тройной) RC фильтр? Линейность лучше, компонентов меньше.
@goldirus
@goldirus Год назад
работа алгоритма понятно. Но из неё следует, что чем выше частота, тем ниже сигнал становиться похож на оригинал (синусоиду). Тоже собственно и при снижении частоты ниже исходной
@SIM31r
@SIM31r Год назад
При снижении частоты вроде нормально всё, осциллограф просто не показал сразу синусоиду, так как интервал маленький был в настройках.
@MbsElectronics
@MbsElectronics Год назад
Естественно, так как при повышении частоты пропускаются отсчеты в таблице. Но это компенсируется ФНЧ на выходе.
@AtlantisRouTou
@AtlantisRouTou Год назад
Офигеть, МБС перестал паузить между словами )
@antisoveticus
@antisoveticus Год назад
Простой хитроумный - это оксюморон.
@donatasf9496
@donatasf9496 Год назад
Вместо потенциометра конечно, и проще и лучше энкодер влупить..... есть библиотека GyverEncoder, работает очень хорошо - проверено....
@MbsElectronics
@MbsElectronics Год назад
Конечно, но потенциометр бесплатно. И можно поупражняться в прерываниях от АЦП. Вообще можно хоть две кнопки использовать
@goldirus
@goldirus Год назад
так и не понял как работает этот цап на делителя напряжения, и для чего использовать столько выходов
@MbsElectronics
@MbsElectronics Год назад
Про то как работает цап нужно делать отдельный ролик. Для данного же видео нужно просто принять тот факт что на выходе ЦАП мы имеем напряжение, пропорциональное двоечному числу в регистре порта D микроконтроллера
@MbsElectronics
@MbsElectronics Год назад
Можете погуглить на тему "Цифроаналоговые преобразователи (ЦАП) с суммированием токов"
@goodwill7643
@goodwill7643 Год назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-IDrWtgTb3D4.html
@SIM31r
@SIM31r Год назад
тут длинная лекция ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-MQeK5ee8Zfk.html
@SIM31r
@SIM31r Год назад
@@MbsElectronics несколько часов назад вышел ролик, Ютуб в рекомендации вывел, сумматор на резисторах: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-TPLAJ5IVNEY.html
@user-yb5pu1gu1f
@user-yb5pu1gu1f Год назад
В следующем видео надо будет прикрутить сюда однобитный ЦАП
@SIM31r
@SIM31r Год назад
@@R1CBU в динамике там сложно всё. Синусоида может по фазе поплыть и т.п. Можно и комбинировать дельта преобразователь и R-2R, чтобы точность повысить.
@R1CBU
@R1CBU Год назад
@@SIM31r почему она поплывет если фазу считать правильно, изменяя только ее приращение. Ну и небольшой oversample не помешает.
@SIM31r
@SIM31r Год назад
@@R1CBU ну если нужно от 0 до максимального уровня быстро фронт сделать, дельта-сигма не сможет, будет плавно поднимать напряжение, что аналогично сдвигу по фазе выходного сигнала. Для медленных сигналов да, всё хорошо будет.
@MbsElectronics
@MbsElectronics Год назад
Случайно удалил здесь чей-то интересный комментарий, хотел ответить, нажал не на ту кнопку... Там было про PWM. Можно его использовать, но там свои проблемы с быстродействием и т.д. Все современные промышленные генераторы используют DDS как самый точный метод установки частоты.
@MbsElectronics
@MbsElectronics Год назад
У простых DDS синтезаторов вроде этого есть проблема с дрожанием фазы. Это легко проследить, если посмотреть как он пропускает ячейки таблицы (либо по несколько раз выводит одну и ту же на низких частотах). С этим приходится мириться. Там где важна высокая стабильность фазы, такой генератор применять нельзя.
@Olaf72KOG
@Olaf72KOG Год назад
Простите? А зачем искать в интернетах таблицу для синусоиды если можешь посчитать ее сам? Более того можешь посчитать любую функцию.
@MbsElectronics
@MbsElectronics Год назад
Всё уже посчитано за нас)
@MbsElectronics
@MbsElectronics Год назад
Конечно можно было бы рассчитать массив в начале работы программы. Но зачем тратить память контроллера, если есть готовая.
@Olaf72KOG
@Olaf72KOG Год назад
@@MbsElectronics я про дельфийский вариант. И ещё, таблицу на Дельфи позволить редактировать, и тогда можно dds произвольной формы, передавая массив в ардуинку через ком. Из предопределенных пилы, шумы, Син с крутилкой, квадрат с двумя крутилками (ШИМ), правда не знаю что с ним на звуковом диапазоне делать, но в качестве примера, более чем. Эмм, спасибо большое за Ваш труд. С уважением и благодарностью.
@R1CBU
@R1CBU Год назад
А можно вообще не считать таблицу, а пользоваться CORDIC и считать на лету. Для DDS самое то.
@Olaf72KOG
@Olaf72KOG Год назад
​@@R1CBU На восьмибитной атмеге в Си есть сдвиг ствола? или уйдем в асм? Кордик для квадрата в первой итерации и для сина в 4-5. а для остального все равно массив? Но вопрос целесообразности не в этом. Практически большинство дешевых DDS предлагают захардкодженные синусоиду, пилу, квадрат, белый и розовый шум, шахматку и полоску для тв. Зачем что то вычислять? ИМХО Прикольно в связке с компом на компе готовить массив а на адуинке генерить. Прошивка для ардуинки в таком раскладе должна быть весьма простой. а значит место под массив будет более чем достаточным. Вопрос в производительности ардуинки и точности R2R реализации.