Генератор сигналов на базе AD9833: схема, программа и применение

Как работает генератор сигналов на AD9833. Какие сигналы он может генерировать. Как подключить AD9833 к Arduino. Какие преимущества у DDS генераторов. Как использовать AD9833 в своих проектах.

Принцип работы генератора сигналов AD9833

AD9833 — это микросхема прямого цифрового синтеза (DDS), позволяющая генерировать сигналы различной формы с высокой точностью. Как работает этот генератор?

Основные компоненты AD9833:

  • 28-битный фазовый аккумулятор
  • Таблица синуса/косинуса
  • 10-битный ЦАП
  • Регистры управления

Принцип работы следующий:

  1. В фазовый аккумулятор загружается значение приращения фазы
  2. На каждом такте опорной частоты это значение добавляется к текущей фазе
  3. Полученная фаза преобразуется в амплитуду с помощью таблицы синуса
  4. ЦАП формирует аналоговый сигнал на выходе

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

Возможности генератора сигналов на 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:

«` Arduino AD9833 VCC GND D10 (FSYNC) SCK
MOSI «`

Для программного управления AD9833 можно использовать готовые библиотеки, например AD9833 от Мартина Лайнена. Она значительно упрощает настройку и управление генератором.

Преимущества DDS генераторов на базе AD9833

Генераторы на основе прямого цифрового синтеза, такие как AD9833, имеют ряд преимуществ по сравнению с аналоговыми генераторами:


  • Высокая точность и стабильность частоты
  • Быстрое переключение частоты без разрыва фазы
  • Цифровое управление всеми параметрами
  • Возможность генерации сложных сигналов
  • Низкое энергопотребление
  • Компактные размеры

Эти особенности делают DDS генераторы идеальными для применения в различных областях, от тестового оборудования до систем связи.

Применение генератора сигналов на AD9833

Благодаря своей универсальности, AD9833 может использоваться во многих приложениях:

  • Генерация тестовых сигналов для отладки схем
  • Источник тактовых сигналов в цифровых системах
  • Формирование сигналов в системах связи
  • Генерация звуковых эффектов
  • Управление шаговыми двигателями
  • Создание простых функциональных генераторов

Рассмотрим пример использования AD9833 для создания простого функционального генератора с Arduino:

«`cpp #include #include #define FNC_PIN 10 AD9833 gen(FNC_PIN); void setup() { Serial.begin(9600); gen.begin(); gen.setFrequency(1000); // Устанавливаем частоту 1 кГц gen.setWaveform(AD9833::SINE); // Синусоидальный сигнал } void loop() { if (Serial.available()) { char cmd = Serial.read(); switch (cmd) { case ‘f’: // Изменить частоту gen.setFrequency(Serial.parseFloat()); break; case ‘w’: // Изменить форму сигнала int wave = Serial.parseInt(); if (wave == 0) gen.setWaveform(AD9833::SINE); else if (wave == 1) gen.setWaveform(AD9833::TRIANGLE); else if (wave == 2) gen.setWaveform(AD9833::SQUARE); break; } } } «`

Этот код позволяет управлять частотой и формой сигнала через серийный порт. Например, отправка команды «f1000» установит частоту 1 кГц, а «w1» переключит форму сигнала на треугольную.


Ограничения и особенности работы с AD9833

При работе с AD9833 следует учитывать некоторые ограничения и особенности:

  • Максимальная частота ограничена половиной частоты опорного генератора
  • Качество синусоидального сигнала ухудшается на высоких частотах
  • Выходной сигнал требует фильтрации и усиления
  • Необходимо правильно настроить SPI интерфейс (режим 2 или 3)
  • Возможны паразитные выбросы при переключении частоты

Чтобы минимизировать эти проблемы, рекомендуется:

  1. Использовать качественный опорный генератор
  2. Применять фильтры нижних частот на выходе
  3. Использовать буферные усилители
  4. Правильно развести печатную плату
  5. Применять методы сглаживания при переключении частоты

Альтернативы 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-Odesa
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

1+ 34.5 UAH
10+ 30.8 UAH
Джойстик для 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

1+ 40 UAH
10+ 33.8 UAH
100+ 27.68 UAH
Кабель 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

1+ 42 UAH
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

100+ 0. 22 UAH
1000+ 0.16 UAH
10000+ 0.13 UAH
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

1+ 1.5 UAH
10+ 0.6 UAH
100+ 0.4 UAH
1000+ 0.3 UAH
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, генератор функций, тестовое оборудование, X9C104P

2 ноября 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.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *