Как работает генератор сигналов на AD9833. Какие сигналы он может генерировать. Как подключить AD9833 к Arduino. Какие преимущества у DDS генераторов. Как использовать AD9833 в своих проектах.
Принцип работы генератора сигналов AD9833
AD9833 — это микросхема прямого цифрового синтеза (DDS), позволяющая генерировать сигналы различной формы с высокой точностью. Как работает этот генератор?
Основные компоненты AD9833:
- 28-битный фазовый аккумулятор
- Таблица синуса/косинуса
- 10-битный ЦАП
- Регистры управления
Принцип работы следующий:
- В фазовый аккумулятор загружается значение приращения фазы
- На каждом такте опорной частоты это значение добавляется к текущей фазе
- Полученная фаза преобразуется в амплитуду с помощью таблицы синуса
- ЦАП формирует аналоговый сигнал на выходе
Такой метод позволяет получить очень точную и стабильную частоту выходного сигнала. Причем форму сигнала можно менять программно.
Возможности генератора сигналов на AD9833
AD9833 позволяет генерировать следующие типы сигналов:
- Синусоидальный
- Треугольный
- Прямоугольный
Основные характеристики:
- Диапазон частот: от 0 до 12,5 МГц
- Разрешение по частоте: 0,1 Гц при опорной частоте 25 МГц
- Программируемый сдвиг фазы
- Управление через SPI интерфейс
- Напряжение питания: 2,3-5,5 В
- Потребляемая мощность: 12,65 мВт при 3 В
Такие характеристики делают AD9833 отличным выбором для создания недорогих прецизионных генераторов сигналов.
Подключение AD9833 к Arduino
Для управления AD9833 с помощью Arduino потребуется всего несколько соединений:
- FSYNC — к любому цифровому пину Arduino (например, D10)
- CLK — к пину SCK Arduino
- DAT — к пину MOSI Arduino
- VCC — к 3,3В или 5В Arduino
- GND — к GND Arduino
Схема подключения AD9833 к Arduino:
«` «`Для программного управления AD9833 можно использовать готовые библиотеки, например AD9833 от Мартина Лайнена. Она значительно упрощает настройку и управление генератором.
Преимущества DDS генераторов на базе AD9833
Генераторы на основе прямого цифрового синтеза, такие как AD9833, имеют ряд преимуществ по сравнению с аналоговыми генераторами:
- Высокая точность и стабильность частоты
- Быстрое переключение частоты без разрыва фазы
- Цифровое управление всеми параметрами
- Возможность генерации сложных сигналов
- Низкое энергопотребление
- Компактные размеры
Эти особенности делают DDS генераторы идеальными для применения в различных областях, от тестового оборудования до систем связи.
Применение генератора сигналов на AD9833
Благодаря своей универсальности, AD9833 может использоваться во многих приложениях:
- Генерация тестовых сигналов для отладки схем
- Источник тактовых сигналов в цифровых системах
- Формирование сигналов в системах связи
- Генерация звуковых эффектов
- Управление шаговыми двигателями
- Создание простых функциональных генераторов
Рассмотрим пример использования AD9833 для создания простого функционального генератора с Arduino:
«`cpp #includeОграничения и особенности работы с AD9833
При работе с AD9833 следует учитывать некоторые ограничения и особенности:
- Максимальная частота ограничена половиной частоты опорного генератора
- Качество синусоидального сигнала ухудшается на высоких частотах
- Выходной сигнал требует фильтрации и усиления
- Необходимо правильно настроить SPI интерфейс (режим 2 или 3)
- Возможны паразитные выбросы при переключении частоты
Чтобы минимизировать эти проблемы, рекомендуется:
- Использовать качественный опорный генератор
- Применять фильтры нижних частот на выходе
- Использовать буферные усилители
- Правильно развести печатную плату
- Применять методы сглаживания при переключении частоты
Альтернативы AD9833 для генерации сигналов
Хотя AD9833 является отличным выбором для многих приложений, существуют и другие варианты DDS генераторов:
- AD9850 — более высокая частота и разрешение, но выше энергопотребление
- AD9834 — улучшенная версия AD9833 с большим разрешением ЦАП
- Si5351 — генератор тактовых сигналов с несколькими выходами
- MAX038 — аналоговый генератор сигналов с широкими возможностями
Выбор конкретного генератора зависит от требований проекта: необходимой частоты, точности, энергопотребления и стоимости.
Генераторы сигналов на базе AD9833 предоставляют широкие возможности для создания различных устройств — от простых функциональных генераторов до сложных систем связи. Их простота использования, низкая стоимость и хорошие характеристики делают их отличным выбором для многих проектов.
DDS Генератор сигналов, модуль на AD9833 From 164.98 UAH
Production > Constructors and kits > Arduino > DDS Генератор сигналов, модуль на AD9833
Product id: 165074
Manufacturer:
Описание: Цифровое программирование частоты и фазы. Диапазон выходных частот от 0 МГц до 12,5 МГц. Разрешение 28 бит (0.1 Гц при частоте опорного сигнала 25 МГц). Синусоидальные, треугольные и прямоугольные выходные колебания. Напряжение питания от 2,3 В до 5,5 В. Трехпроводной интерфейс SPI
Тип: Шилд
on stock: 83 pcs
75 pcs — stock Kyiv
2 pcs — RADIOMAG-Kyiv
3 pcs — RADIOMAG-Lviv
1 pcs — RADIOMAG-Kharkiv
1 pcs — RADIOMAG-Dnipro
1+ | 200 UAH |
10+ | 185.6 UAH |
100+ | 164. 98 UAH |
Technical description DDS Генератор сигналов, модуль на AD9833
With this product buy
Отсек для батарей 1*18650 Product id: 89096 |
Manufacturer: China
Batteries, Batteries Rechargeable > Battery Holders, Clips
Описание: Отсек для одной батарейки размера 18650
Назначение: 18650
Количество элементов: 1
1000 pcs — waiting 08.05.2023
|
Джойстик для Arduino Product id: 104003 |
Manufacturer: Arduino
Constructors and kits > Arduino
Описание: Джойстик 2х осевой X/Y для создания различных интерфейсов управления, 2 аналоговых выхода и 1 цифровой (кнопка). Питание: 5V
Тип: Шилд кнопки
46 pcs — stock Kyiv
5 pcs — RADIOMAG-Kyiv
7 pcs — RADIOMAG-Lviv
5 pcs — RADIOMAG-Odesa
|
Кабель USB для arduino Nano Product id: 126436 |
Constructors and kits > Arduino
Описание: USB mini кабель для прошивки и питания Arduino Nano
30 pcs — stock Kyiv
10 pcs — RADIOMAG-Kyiv
5 pcs — RADIOMAG-Lviv
8 pcs — RADIOMAG-Kharkiv
40 pcs — RADIOMAG-Dnipro
|
10 kOhm 1% 0,25W 200V 1206 (RC1206FR-10KR-Hitano) (резистор SMD) Product id: 387 |
Manufacturer: Yageo
Resistors SMD > 1206
Номинал: 10 kOhm
Точность: ±1% F
Рном,W: 0,25 W
Uраб,V: 200 V
Типоразмер: 1206
2295 pcs — RADIOMAG-Kyiv
2600 pcs — RADIOMAG-Lviv
2100 pcs — RADIOMAG-Odesa
2500 pcs — RADIOMAG-Dnipro
30000 pcs — waiting
|
1N4148 Product id: 7711 |
Manufacturer: Yangjie
Diodes, Bridge Rectifiers > Superfast Diodes
Корпус: DO-35 (DO-204AH, SOD27)
Vrr, V: 100 V
Iav, A: 0,2 A
Время обратного восстановления Trr, ns: 8 ns
Примечание: 1N4448
Монтаж: THT
1 pcs — RADIOMAG-Kharkiv
available 2502073 pcs — show price and lead time
|
Possible replacement |
1N4448 (DO-35, Yangjie) Product id: 20338 |
Possible replacement |
1N4148 Product id: 176824 |
Плата DDS модуль AD9833
Плата с DDS генератором частоты на базе микросхемы AD9833. Приобретена в качестве источника тактового сигнала, перестраиваемого по частоте. На плате установлен генератор на 25 МГц. Может генерировать сигналы от 0 до 12.5 МГц (но не во всем диапазоне вас устроит форма сигнала). Можно переключать форму сигнала: синус, пила, меандр. Всё, что нужно, выведено на штыревые контакты. Управляется по SPI. Архитектурно содержит один 28-битный регистр аккумулятора, два регистра приращения, два регистра фазы. В один момент времени может быть выбрана только одна из двух пар. Это позволит, если необходимо, сформировать частотную модуляцию сигнала без разрыва фазы или фазовую модуляцию. Однако, отдельного входа выбора пары нет, переключение возможно только командами по SPI.
Далее осциллограммы
Стенд
Для управления DDS нужно подавать команды по SPI. Использую STM8 (STM8S105K4T6) и его аппаратный SPI. Очень важно было найти правильный режим работы SPI. Для STM8 (и наверняка для STM32) это будет mode 2 (CPOL = 1 and CPHA = 0). Подробнее, см. документацию(RM0016 — STM8S Series and STM8AF Series 8-bit microcontrollers (20.4 SPI registers)). Осциллограф С1-112А полоса 10 МГц, щуп китайский на 100 китайских МГц (P6100). Мультиметр Aneng M20 в качестве частотомера.
Осциллограммы
Синус 1 КГц
10 КГц, 50 КГц, 100 КГц, 500 КГц, 2 МГц, 4 МГц, 8 МГц
10 КГц
50 КГц
100 КГц
500 КГц
2 МГц
4 МГц
8 МГц
Пила 1 КГц
10 КГц, 50 КГц, 100 КГц, 500 КГц, 2 МГц, 4 МГц, 8 МГц
10 КГц
50 КГц
100 КГц
500 КГц
2 МГц
4 МГц
8 МГц
На 2 МГц уже видно плавающие пики пилы. На 4 МГц видно уже очень отчетливо. Ну и на 8 МГц у нас получается 25/8 = 3,125 отсчета на период.
Исключительно ради изучения своего осциллографа и щупов, попробовал меандр. Правда сетку частот пересчитывать было лень. В режиме меандра, период в 2 раза длиннее, поэтому частоты получились другие.
5 КГц
25 КГц, 250 КГц, 1 МГц, 2 МГц, 4 МГц
25 КГц
250 КГц
1 МГц
2 МГц
4 МГц
4 МГц более развернуто
Начиная с 1 МГц ясное дело джиттер, на 2 МГц его видно на осциллограмме.
Кстати (для тех, кто не в курсе), важно, что на высоких частотах, чтобы не портить фронты, нужно использовать щуп в режиме 1:10, чтобы он меньше влиял на схему (а еще лучше не использовать крокодил). Но потребуется усилить сигнал в 10 раз уже на осциллографе.
Так же, не стоит забывать подстраивать делитель для правильного отображения, диэлектрической отверточкой.
Для сравнения, фото, как выглядит один и тот же сигнал — меандр 2 МГц, но 1Х или 10Х
2 МГц — 1х
2 МГц — 10х
Кстати, родной щуп от С1-112А тоже неплох
2 МГц — 10х
Ну и в конце, самое главное:
AD9833 | Хакадей
5 марта 2022 г. Крис Лотт
Помешанный на микроконтроллерах [Debraj] решил сделать свой собственный программируемый генератор синусоидальных колебаний и смог собрать его менее чем за 40 долларов США. Помимо низкой стоимости, его список требований был следующим:
- Двойной синусоидальный выход, синхронизированный
- Управление частотой, амплитудой и фазой
- Низкие гармоники ниже 1 МГц
- Возможность создания сценариев через Python
Сердцем проекта является Analog Devices AD9833, полная система генератора сигналов прямого цифрового синтеза (DDS) на кристалле. Если вы когда-либо собирали свою собственную DDS с использованием дискретных ИС или FPGA, вы можете оценить преимущества объединения фазового аккумулятора, таблицы поиска синусов, ЦАП и логики управления в одном десятивыводном корпусе. [Debraj] использует модули AD9833 от обычных интернет-магазинов по несколько долларов каждый. Он синхронизирует генераторы, отключая эталонный кристалл на втором модуле и управляя им от первого. Остальные спецификации соответствуют внутренним характеристикам системы DDS, а интерфейс с поддержкой сценариев реализуется с помощью Arduino, управляющего AD9.833 микросхемы и два усилителя с программируемым коэффициентом усиления (MCP6S31). Нам нравится уверенность, которую [Debraj] демонстрирует, делая набросок начальной схемы шариковой ручкой — посмотрите эскиз и окончательную иллюстрированную схему в видео ниже разрыва.
Это хороший пример объединения готовых модулей для быстрого создания проекта. Этот подход отлично подходит для разовых сборок или в качестве испытательного стенда для проверки концепции, который позже можно будет использовать на пользовательской печатной плате. Еще одна причина использовать модули в наши дни заключается в том, что модули часто есть на складе, но чипы недоступны. Хотя кажется, что [Debraj] нужен только один из этих генераторов, его было бы легко разметить и построить — если вы можете купить детали.
Продолжить чтение «Недорогой двухканальный генератор сигналов с поддержкой сценариев» →
Posted in Цифровые аудио хаки, Взломы инструментовTagged AD9833, dds, генератор функций, низкая стоимость3 сентября 2018 г. Том Нарди
Вероятно, не будет большим преувеличением сказать, что многие из нас взялись за проект или два, которые были не более чем тонко завуалированными предлогами, чтобы добавить новый инструмент или часть снаряжения в наш арсенал. Есть кое-что, что можно сказать о скамейке, полной мерцающего испытательного оборудования с пуговицами, это похоже на побрякушки для ботаников. Но так же, как если бы ваше имя было написано бриллиантами, это может быстро дорого обойтись.
К счастью, в наши дни в распоряжении хакеров достаточно технологий, чтобы самодельное испытательное оборудование могло заполнить ваш стол, не опустошая кошелек. [Фаранский] создал очень впечатляющий генератор функций Arduino, который не скупится на функции. Способный генерировать синусоидальные, треугольные и прямоугольные волны с частотой до 10 МГц благодаря своей полностью цифровой схеме. Это устройство стоит 30 долларов США или около того, чтобы создать собственную версию.
Для тех, кто беспокоится о том, что [Фарански] полагается на функциональность ШИМ Arduino Nano для генерации сигналов, не бойтесь. В основе устройства AD9.генератор сигналов 833; с Arduino, поворотным энкодером и ЖК-дисплеем 16 × 2, обеспечивающим интерфейс для управления им через SPI.
К сожалению, AD9833 не имеет способа управления амплитудой, что очень важно для функционального генератора. Поэтому [Фаранский] использует 8-битный цифровой потенциометр X9C104P 100 кОм в качестве делителя напряжения на выходе микросхемы.
В завершение сборки он добавил литий-ионный аккумулятор емкостью 2000 мАч 3,7 В и зарядное устройство TP4056 с повышающим преобразователем постоянного тока для получения 5 В для Arduino. Хотя, если вы хотите создать настольную версию этого устройства, вы можете отказаться от этих компонентов в пользу адаптера переменного/постоянного тока 5 В.
Мы видели довольно много самодельных генераторов функций, начиная от минималистичных сборок и заканчивая оборудованием, которое могло бы сойти за коммерческое предложение. Мы даже видели несколько дешевых генераторов функций «под ключ», хотя к ним применимы обычные предупреждения о том, что вы получаете то, за что платите.
Читать далее «Портативный функциональный генератор на базе Arduino» →
Опубликовано в Взломы Arduino, Взломы инструментовпомеченный AD9833, arduino nano, генератор функций, тестовое оборудование, X9C104P2 ноября 2013 г., Брайан Бенчофф
Из-за отсутствия нового тестового оборудования или просто проекта [Энцо] решил попробовать создать свой собственный генератор сигналов*. Это не только отличный проект, но и достойное тестовое оборудование с надлежащим преобразованием сигнала, красивой передней панелью и встроенным настенным трансформатором.
Сердцем генератора сигналов [Enzo] является программируемый генератор сигналов AD9833, аккуратный маленький чип, который может выводить прямоугольные и треугольные волны в диапазоне от 0,1 Гц до 3,2 МГц и синусоидальные волны в диапазоне от 0,1 Гц до 1,6 МГц. [Enzo] управляет этим чипом с помощью микроконтроллера PIC16 с целым набором аналоговых схем между цифровым доменом и разъемом BNC на передней панели.
Генератор сигналов управляется набором циферблатов и переключателей на передней панели, что дает [Энцо] полный контроль над своим новым инструментом.
* Вот гугл-перевод, но удачи с этим. Просто… купите Chrome или что-то в этом роде.
Posted in Взломы инструментовTagged AD9833, dds, тестовое оборудование, Генератор сигналов Блок DDS(AD9833) | m5stack-магазин
ДОМ > МАГАЗИН > Блок DDS (AD9833)
{% конец%}
- {% для продукта в продуктах %}
{% присвоить first_available_variant = false %}
{% для варианта в product.variants %}
{% if first_available_variant == false and variant.available %}{% assign first_available_variant = variant %}{% endif %}
{% конец для %}
{% if first_available_variant == false %}{% assign first_available_variant = product. variants[0] %}{% endif %}
{% если product.images[0] %}
{% assign feature_image = product.images[0] | img_url: ‘350x’ %}
{% еще %}
{% присвоить Featured_image = no_image_url | img_url: ‘350x’ %}
{% конец%}
- {%, если box.template.elements содержит ‘saleLabel’ и first_available_variant.compare_at_price > first_available_variant.price %}
{{перевод.продажа}}
{% конец%}
{% если только продукт.доступен %}
{{translation.sold_out}}
{% бесконечный %}
{{продукт.название}}
{% присвоить варианты_размера = продукт.варианты | размер %}
{% для варианта в product.variants %} {{variant.title}}{%, если только вариант.доступен %} — {{translation.sold_out}}{% endunless %} {% конец для %}
{%, если box. template.elements содержит ‘цену’ %} first_available_variant.price %} ga-product_have_oldprice {% endif %}»>{{first_available_variant.price | деньги}} {% if first_available_variant.compare_at_price > first_available_variant.price %}{{first_available_variant.compare_at_price | деньги}}{% конец%} {% конец%} {%, если box.template.elements содержит ‘addToCartBtn’ %} {% конец%} {% конец для %}
{% elsif box.template.id == 2 или box.template.id == ‘2’ %}
{% if box.title и box.title.text и box.title.text != » %}
{{box.title.text}}
{% endif %} {% if box.subtitle и box.subtitle.text и box.subtitle.text != » %}
{{box.subtitle.text}}
{% endif %} {% присвоить total_price = 0 %}
{% для продукта в продуктах %} {% присвоить first_available_variant = false %} {% для варианта в product. variants %} {% if first_available_variant == false and variant.available %}{% assign first_available_variant = variant %}{% endif %} {% конец для %} {% if first_available_variant == false %}{% assign first_available_variant = product.variants[0] %}{% endif %} {%, если first_available_variant.available и box.template.selected %} {% присвоить total_price = total_price | плюс: first_available_variant.price %} {% конец%} {% если product.images[0] %} {% assign feature_image = product.images[0] | img_url: ‘350x’ %} {% еще %} {% присвоить Featured_image = no_image_url | img_url: ‘350x’ %} {% конец%}
{% если только продукт.доступен %} {{translation.sold_out}} {% бесконечный %}
{% конец для %}
{%, если box. template.elements содержит ‘цену’ %}
{{translation.total_price}} {{total_price | деньги}}
{% конец%} {%, если box.template.elements содержит ‘addToCartBtn’ %} {% конец%}
- {% для продукта в продуктах %}
{% присвоить first_available_variant = false %}
{% для варианта в product.variants %}
{% if first_available_variant == false and variant.available %}{% assign first_available_variant = variant %}{% endif %}
{% конец для %}
{% if first_available_variant == false %}{% assign first_available_variant = product.variants[0] %}{% endif %}
{% если product.images[0] %}
{% assign feature_image = product.images[0] | img_url: ‘350x’ %}
{% еще %}
{% присвоить Featured_image = no_image_url | img_url: ‘350x’ %}
{% конец%}
- {% if product.id == cur_product_id %} {{translation. this_item}} {% endif %}{{product.title}}{%, если только product.available %} — {{translation.sold_out}}{% бесконечный %}
{% присвоить варианты_размера = продукт.варианты | размер %}
{% для варианта в product.variants %} {{variant.title}}{%, если только вариант.доступен %} — {{translation.sold_out}}{% endunless %} {% конец для %}
{%, если box.template.elements содержит ‘цену’ %} first_available_variant.price %} ga-product_have_oldprice {% endif %}»>{{first_available_variant.price | деньги}} {% if first_available_variant.compare_at_price > first_available_variant.price %}{{первый_доступный_вариант.compare_at_price | деньги}}{% конец%} {% конец%} {% конец для %}
{% elsif box.template.id == 3 или box.template.id == ‘3’ %}
{% if box. title и box.title.text и box.title.text != » %}
{{box.title.text}}
{% endif %} {% if box.subtitle и box.subtitle.text и box.subtitle.text != » %}
{{box.subtitle.text}}
{% endif %} {% присвоить total_price = 0 %}
- {% для продукта в продуктах %}
{% присвоить first_available_variant = false %}
{% для варианта в product.variants %}
{% if first_available_variant == false and variant.available %}{% assign first_available_variant = variant %}{% endif %}
{% конец для %}
{% if first_available_variant == false %}{% assign first_available_variant = product.variants[0] %}{% endif %}
{%, если first_available_variant.available и box.template.selected %}
{% присвоить total_price = total_price | плюс: first_available_variant.price %}
{% конец%}
{% если product.images[0] %}
{% assign feature_image = product. images[0] | img_url: ‘100x’ %}
{% еще %}
{% присвоить Featured_image = no_image_url | img_url: ‘100x’ %}
{% конец%}
{% если только продукт.доступен %} {{translation.sold_out}} {% бесконечный %}
{% if product.id == cur_product_id %} {{translation.this_item}} {% endif %}{{product.title}}{%, если product.available %} — {{translation.sold_out}} {% бесконечный%}
{% присвоить варианты_размера = продукт.варианты | размер %}{% для варианта в product.variants %} {{variant.title}}{%, если только вариант.доступен %} — {{translation.sold_out}}{% endunless %} {% конец для %}
{%, если box.template.elements содержит ‘цену’ %} first_available_variant.price %} ga-product_have_oldprice {% endif %}»>{{first_available_variant.