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

Поділитися
Вставка
  • Опубліковано 29 кві 2023
  • DDS генератор на Arduino Nanao. Прямой Цифровой Синтез
    Статья musbench.com/all/dds-audio-ge...
    Самое подробное объяснение алгоритма DDS - Прямой Цифровой Синтез Аналоговых сигналов. Сегодня мы рассмотрим цифровой метод генерации аналоговых сигналов на примере генератора звуковой частоты на основе платы Arduino Uno. Данный генератор спроектирован в основном с целью демонстрации работы принципа работы DDS алгоритма. Прошивка написана исключительно на языке Си для Arduino без ассемблерных вставок. Тем не менее, даже этот простой генератор создает синусоидальный сигнал в диапазоне частот от нуля до 30 кГц, что перекрывает весь диапазон звуковых частот (более совершенный генератор на контроллере ATMegа с диапазоном до 300 кГц будет описан в одном из следующих видео.
    Донаты для канала: www.donationalerts.com/r/mrsh...
    Отличный DDS Генератор из Китая • UNI-T UTG932 FUNCTION ...
    -
    Bluetooth термометр на Arduino studio.ua-cam.com/users/videoypJL...
    Proteus 8 Visual Designer Серво мотор • Proteus 8 Visual Desig...
    Arduino в Proteus БЕЗ Кода! Часть 2 • Arduino в Proteus БЕЗ ...
    -
    Телеграм канал t.me/mbselectronics Чат канала t.me/mbs_electro
    Хороший 3D принтер s.click.aliexpress.com/e/_Dk4...
    ABS Пластик для 3D печати s.click.aliexpress.com/e/_Dej...
    PLA Пластик для 3D печати s.click.aliexpress.com/e/_Dkl...
    Мои Путешествия 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

КОМЕНТАРІ • 47

  • @MbsElectronics
    @MbsElectronics  Рік тому +1

    Донаты для канала: 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

  • @user-vm8xq3ud3n
    @user-vm8xq3ud3n Місяць тому

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

  • @akademiklime9266
    @akademiklime9266 Рік тому +1

    Гениально маэстро! Лайк и подписка!

  • @electronic7979
    @electronic7979 Рік тому +1

    Nice video

  • @SIM31r
    @SIM31r Рік тому

    1:30 точность особо важна для старших разрядов резисторов, младшие особо не важны уже. Если есть куча резисторов, можно отобрать самые точные (одинаковые) в старшие разряды, а в младшие любые.

  • @iloverobotics113
    @iloverobotics113 11 місяців тому

    Добрый день, Олег. Спасибо за интересное видео. Быть может вы знаете как подключить камеру к микроконтроллеру с радиомодулем и передать на другой микроконтроллер видеосигнал?

  • @safocl9768
    @safocl9768 2 місяці тому

    2:05 -- а можно представить ассемблерный код, который будет быстрее работать чем сгенерированный компилятором?

  • @rmatveev
    @rmatveev Рік тому

    А не рассматривали вариант PWM выход + двойной (или даже тройной) RC фильтр?
    Линейность лучше, компонентов меньше.

  • @gimeron-db
    @gimeron-db Рік тому

    Из ардуинки напрашивается сделать синтезатор. Вместо потенциометра прикрутить линейку резисторов, под капотом частоту вычислить как 440 * 2^(K*R/12), а "инструменты" зашить в виде таблиц для синтеза сигнала.
    Для поддержки одновременного нажатия клавиш придётся усложнять клавиатуру и процедуру синтеза (считать сумму всех сигналов для каждой клавиши).
    Клавиатуру можно сделать матричную, только для каждой кнопке добавить по диоду, чтобы не было ложных срабатываний.

    • @SIM31r
      @SIM31r Рік тому +1

      Уже есть такой музыкальный синтезатор, он очень сложный. Так как оптимизирован каждый бит и такт микроконтроллера, малейшая правка кода рушит всю программу вызывая непонятные глюки. Лучше такое делать на более мощных МК с математическим сопроцессором. Там останется место и для оптимизации и результат будет лучше.

    • @MbsElectronics
      @MbsElectronics  Рік тому +3

      Есть проект AVRSynth, на 16-й меге. В одном из след. роликов выложу про DDS генератор на mega8 там до 300 кгц, но DDS функция на ассемблере а компилятор не ардуино, другой. Ассемблерные вставки в GCC на кортом основан Ардуино - это вынос мозга. Для проектов на самостоятельных контроллерах я юзаю другой (платный) компилятор. Там можно писать на обычном ассемблере без этих двоеточий, амперсандов и пустых точек...

  • @AtlantisRouTou
    @AtlantisRouTou 11 місяців тому

    Офигеть, МБС перестал паузить между словами )

  • @goldirus
    @goldirus Рік тому

    работа алгоритма понятно. Но из неё следует, что чем выше частота, тем ниже сигнал становиться похож на оригинал (синусоиду). Тоже собственно и при снижении частоты ниже исходной

    • @SIM31r
      @SIM31r Рік тому

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

    • @MbsElectronics
      @MbsElectronics  Рік тому

      Естественно, так как при повышении частоты пропускаются отсчеты в таблице. Но это компенсируется ФНЧ на выходе.

  • @gimeron-db
    @gimeron-db Рік тому +1

    38:35 - Кажется, вместо goto можно было бы использовать простой бесконечный цикл for (;;) { ... }

    • @MbsElectronics
      @MbsElectronics  Рік тому

      можно попробовать по разному и сравнить быстродействие

  • @antisoveticus
    @antisoveticus Рік тому +1

    Простой хитроумный - это оксюморон.

  • @donatasf9496
    @donatasf9496 Рік тому

    Вместо потенциометра конечно, и проще и лучше энкодер влупить..... есть библиотека GyverEncoder, работает очень хорошо - проверено....

    • @MbsElectronics
      @MbsElectronics  Рік тому +1

      Конечно, но потенциометр бесплатно. И можно поупражняться в прерываниях от АЦП. Вообще можно хоть две кнопки использовать

  • @goldirus
    @goldirus Рік тому

    так и не понял как работает этот цап на делителя напряжения, и для чего использовать столько выходов

    • @MbsElectronics
      @MbsElectronics  Рік тому +1

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

    • @MbsElectronics
      @MbsElectronics  Рік тому

      Можете погуглить на тему "Цифроаналоговые преобразователи (ЦАП) с суммированием токов"

    • @goodwill7643
      @goodwill7643 Рік тому

      ua-cam.com/video/IDrWtgTb3D4/v-deo.html

    • @SIM31r
      @SIM31r Рік тому

      тут длинная лекция ua-cam.com/video/MQeK5ee8Zfk/v-deo.html

    • @SIM31r
      @SIM31r Рік тому

      @@MbsElectronics несколько часов назад вышел ролик, Ютуб в рекомендации вывел, сумматор на резисторах: ua-cam.com/video/TPLAJ5IVNEY/v-deo.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 реализации.