Usb генератор сигналов своими руками

Обновлено: 07.07.2024

Генератор сигналов был в лаборатории нашего института — это такой большой ящик с десятком ручек регулировки. Он был ламповый и грелся минуты три до выхода на нормальный режим работы. Может ли маленькая платка за 7 долларов выполнять основные его функции? Посмотрим.

Технические характеристики генератора из описания магазина:

Питание: 9-12 вольт
Форма сигналов: прямоугольная, треугольная, синус
Импеданс: 600 Ом ± 10%
Частота: 1 Гц — 1 Мгц
Настройка частоты и амплитуды
Разрешение сигнала: 5 бит
Возможность грубой и тонкой настройки.

Синус:
Амплитуда: 0-3 вольта при питании 9 вольт
Дисторшн: менее 1% при частоте 1 КГц.
Равномерность: +0.05dB в диапазоне 1Гц — 100КГц.

Прямоугольный сигнал:
Амплитуда без нагрузки: 8 Вольт при питании 9 Вольт.
Возрастание сигнала — менее 50нс (на частоте 1КГц)
Спад синала — менее 30нс (на частоте 1КГц)
Симметричность: менее 5% (на частоте 1КГц)

Треугольный сигнал:
Амплитуда: 0 — 3 вольта при питании 9 вольт.
Линейность: менее 1% в диапазоне до 100 КГц при токе 10 мА.

Там же красным по белому написано, что эта версия поставки не включает в комплект корпус. Но мне прислали с корпусом. Приятная неожиданность.

Итак, генератор сигнала поставляется в разобранном виде. Но собирается настолько быстро и приятно, что это пожалуй даже плюс.



В комплекте присутствует плата, набор комплектующих, микросхема XR-2206 (основа всего проекта), инструкция, детали корпуса из оргстекла и необходимые для сборки винтики и гаечки.


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


Деталей мало, установка очевидна, справится даже чайник. Белая полоска на электролитиках должна совпадать с заштрихованной стороной круга, нарисованного на плате. Резисторы лучше проверять мультиметром, прежде чем устанавливать. Пожалуй, и вся премудрость.



Детели установлены на свои места, можно приступать к пайке.

Но прежде чем паять, я заглянул в датшит и полистал в интернете. Там советуют заменить резистор R4, отвечающий за подстройку синуса, на реостат. Это даст возможности минимизировать ненужные гармоники и приблизить сигнал к идеальной синусоиде. Так что я решил сразу впаять реостат в 500 Ом.


Вот так получилось. Паяется все легко, только перед впаиванием разъема питания нужно примерить боковину корпуса, чтобы потом все нормально собралось. Снизу платы желательно длинные «хвосты» не оставлять, так как плата должна быть прижата к дну корпуса, иначе не хватит длины болтов, фиксирующих плату.

В конце собираем корпус. Детали хорошо подогнаны друг к другу. Винты вкручиваются в фигурные отверстия в форме звездочек. Они легко и с первого раза нарезают там резьбу, сидят потом плотно, не выпадают и не выкручиваются.


Длины штатных винтов, крепящих плату, мне не хватило, так что я подобрал свои, даже с дистанционными шайбочками.


Вот итог всех трудов:



Подсоединяем осциллограф, включаем.


Все работает. Попробуем повысить напряжение питания. По датшиту микросхемы, она питается напряжением от 10 до 26 вольт.


Синхронизация сбивается, при обследованиии синусодиы видно, что начинет сбиваться фаза.

В режиме прямоугольного сигнала та же история:


При снижении напряжения питания ниже 12 вольт сигнал восстанавливается, но амплитуда выходного сигнала ограничивается входным минус 2 — 3 вольта:


Ну нам и не обещали работу от 26 вольт. В описании генератора заявлена работа как раз от 12 вольт. Так что все по-честному.

Посмотрим на диапазон частот:

Минимально получилось порядка 0,6 Гц.


Не подумайте, что это такой затейливый сигнал, это просто осциллограф дуреет и считает, что мы имеем дело с постоянным напряжением. При переключении в режим постоянного напряжение получаем такую картину:


Вот так вот! Полка 1 вольт, размах сигнала от 1 до 9,8 вольт. Амплитуда, таким образом, 8,8 вольта. Такая же история и с другими сигналами — синусом и треугольником. Для некоторых применений это не критично, а вот для тестирования аппаратуры, где нет входного фильтра, полка ни к чему. Такой сигнал надо пропускать через конденсатор, чтобы лишить его постоянной составляющей.

Устанавливаем конденсатор 2,2мкФ:


Ну вот. Теперь красивая синусоида вокруг нуля и в режиме измерения постоянки!

Крупнее, в режиме переменного напряжения:


И тот же сигнал, в режиме постоянного напряжения, с фильтрующим конденсатором 2,2мкФ:


С треугольником что-то не задалось, форма получилась такая:


При замене конденсатора на 3,3 мкФ все пришло более-менее в норму:


Но, прямо скажем, 0,6 Гц — не самый актуальный режим работы. Вот как выглядит треугольник на частоте в 1 КГц. Без конденсатора, в режиме AC:


С конденсатором, в режиме DC:


Как видим, все совершенно одинаково.

Теперь выкручиваем ручки частоты на максимум:


Синус красивый, частота получилась даже больше заявленной: 1,339 МГц.


Ну а что вы хотели — на таких-то частотах! От синуса отличается чуть большей амплитудой. На самом деле, такая разница в амплитудных значениях характерна для всего диапазона частот: в микросхеме синус делается из треугольника, у которого сглаживаются вершины.


Прямоугольный сигнал идет с другого выхода микросхемы. Он не регулируется по амплитуде, хотя она у него зависит от входного напряжения. На самом деле, это еще большой вопрос, выдает ли генератор кривой сигнал, или это осциллограф не может его отобразить. Или вообще щупы виноваты.

Амплитуда синуса и треугольника, как я уже говорил, может тоже регулироваться в известных пределах: если перестараться, то треугольник может получиться таким:


Соответственно, заваливаются и вершины синуса, но это не так заметно. Поэтому в режиме синуса полезно иногда переключаться на треугольник и проверять, хорошо ли отображаются вершины. Уменьшаем амплитуду:



Ну вот, теперь и синус будет красивый:


Для того, чтобы понять, насколько хорош этот синус, есть проверенный способ: глянуть на преобразование Фурье от него. Вот что получилось:


У нас есть хороший пик на частоте 100 КГц, есть пики второй и третьей гармоники, но они вполне допустимых размеров, для такой техники. Установленным подстроечником можно их минимизировать. Удобно использовать прецизионный реостат, там от упора до упора много оборотов винта, так что удобно настроить буквально доли ома. Эта картинка — как раз результат моей подстройки. У меня получилось оптимальное значение резистора R4 — 243 Ома. К слову, в набор положили резистор 330 Ом.
Для сравнения, вот спектр треугольного сигнала:


Видим красивые пики на боковых гармониках, ну так это же треугольник, а не синусоида. Для комплекта, вот прямоугольный сигнал:


Тут и так все понятно. Как видим, прямоугольник на 100 КГц остается более-менее прямоугольным. Проверим, что делается на 1 МГц:




Меандр похож на клюв тукана.

Картинки у меня кончились, теперь пару слов общих впечатлений.

Регулировка амплитуды грубовата в области низких значений, кроме того, ее почему-то сделали обратной: по часовой стрелке — уменьшаем, против часовой — увеличиваем. Регулировка частоты, что грубая, что тонкая — почти одинаково влияют на результат. Тонкую я сделал бы реостатиком меньшего номинала. Но это придирки, конечно, можно привыкнуть за пару раз использования.
Резистор, который влияет на дисторшн синуса, можно было бы сделать подстроечником, как и предусмотрено в датшите микросхемы. Но если уж делать резистор, то 330 Ом — явно перебор, там нужно 200-250 Ом.

В остальном прибор порадовал: собирается легко, можно даже с ребенком собрать, как конструктор. Довольно хорошо генерирует сигналы до полумегагерца, дальше хорошо получается в основном синус. Но меандр таких частот обычно и не нужен. Вообще, прибор за 7 долларов, который помещается в карман и способный перекрыть 98% потребностей радиолюбителя в генерировании сигналов — вполне хороший выбор.
Порадовал и корпус — собирается хорошо, выглядит превосходно!

Ссылка на генератор сигналов в магазине: тыц. (цена сегодня $7.68)

Подстроечный реостатик на Али — набор 15 штук разных номиналов, на все случаи жизни. Цена около ста рублей. Пятьсот Ом там тоже есть.

Бывает так, что одного СВЧ генератора на рабочем месте не хватает, или же им кто-то пользуется, а проверить например смеситель (усилитель, АЦП…) очень нужно. А ещё стационарные СВЧ генераторы довольно большие и тяжёлые, лично мне часто лень их переносить и освобождать место на рабочем столе. По этим причинам два года назад я сделал свой маленький генератор, первую версию.

Первая версия USB генератора

Немного об элементной базе

Генератор построен на микросхеме HMC833 (или HMC830), ФАПЧ со встроенным ГУН и микросхеме HMC625, усилитель с переменным коэффициентом усиления. В качестве опорного генератора можно использовать генераторы ГК155-П или CB3LV с частотой 25…100 МГц. В первой версии генератора для управления HMC833 и HMC625 я решил использовать микросхему FT232RL в режиме bit bang, вдохновившись статьями про этот режим в интернете.

Характеристики


— Диапазон частот 25…6000 МГц, если используется микросхема HMC833;
— Диапазон частот 25…3000 МГц, если используется микросхема HMC830;
— Регулировка сигнала по мощности, 31.5 дБ, с шагом 0,5 дБ;
— Точность настройки частоты,

3 Гц;
— Максимальная измеренная мощность сигнала на частоте 1 ГГц – 17 дБм;
— Максимальная измеренная мощность сигнала на частоте 2 ГГц – 16 дБм;
— Максимальная измеренная мощность сигнала на частоте 3 ГГц – 12 дБм;
— Питание и управление от microUSB.

Все остальные характеристики можно узнать в документации на применённые мной микросхемы.

Немного о недостатках первой версии

Схема первой версии была не лишена недостатков:
— во первых, как я уже говорил, для управления синтезатором и усилителем по SPI использовалась микросхема FT232RL в режиме bit bang. Из-за этого управление было медленным. Я впервые использовал микросхему FT232RL и не знал о такой особенности.
— во вторых, я использовал комплектующие, которые у меня были в наличии. Из-за этого генератор получился дорогим, а некоторые элементы сложно достать.
Но в целом генератор себя оправдал, часто помогая мне в работе.

Исправление ошибок

Спустя два года я решил избавится от этих недостатков и сделал вторую версию генератора.
Микросхему FT232RL я заменил микроконтроллером STM32F103C8T6, вместо дорогого генератора ГК155-П-100 МГц можно установить CB3LV-3I-25M0000 (или другой), ну и по мелочи. Теперь все элементы для генератора можно купить у китайцев на алиэкспресс, что не может не радовать.




Печатную плату я проектировал в Altium Designer, программа для STM32 написана в IAR Embedded Workbench, программа управления для ЭВМ написана с использованием QT, Visual Studio и библиотеки HID API. Поскольку использован класс USB HID, то установка драйверов не требуется.

Собрать этот USB генератор можно самостоятельно, для этого я прикладываю все необходимые файлы. Без ошибок собранный генератор в регулировке и настройке не нуждается, только в прошивке.


Заключение

На данный момент программное обеспечение пока далеко от финального и обладает только базовыми настройками, такими как установка частоты и усиления. В ближайшем будущем я планирую добавить режимы ГКЧ и возможно (если получится) импульсного генератора.

Теперь немного картинок со спектроанализатора R&S FSL3 и в самом конце ссылки на исходные файлы. К сожалению спектроанализатор у меня на работе только до 3х ГГЦ:








Инструкция по прошивке микроконтроллера

Необходим программатор st-link v2

0) Желательно стереть микроконтроллер утилитой STM32 ST-LINK Utility (на всякий случай)

1) Надо скачать загрузчик, файл stm32_MyDfu.rar от сюда
распаковать HEX, прошить утилитой STM32 ST-LINK Utility
после этого должен появится в диспетчере устройств девайс stm32 dfu (не помню точно)

Наткнулся на интересную разработку функционального генератора на основе микросхемы AD9833, уже довольно не новую: function-gen [1]. Проект довольно простой, что делает возможным его сборку в домашних условиях, и в то же время обладает широкими возможностями в генерации сигналов. Формируемые частоты: 0..12.5 МГц, форма сигнала синусоидальная, прямоугольная и треугольная. Благодаря тому, что исходный код открыт и схема открыты, есть возможность применить составные части проекта в своих собственных разработках.

[Общее описание function-gen]

Синтез сигнала осуществляется микросхемой AD9833 [2] по методу прямого цифрового синтеза (DDS). Эта микросхема управляется через интерфейс SPI микроконтроллером AT90USB162. Этот же микроконтроллер формирует на своем интерфейсе USB устройство класса USB CDC (виртуальный COM-порт), позволяя управлять генератором обычными текстовыми командами (описание протокола см. далее). Таким образом, микроконтроллер служит мостом между компьютером и микросхемой AD9833, позволяя осуществить простой интерфейс управления генератором.

AT90USB162 AD9833 function gen sch

Рис. 1. Схема функционального генератора на AD9833 и AT90USB162.

Схема довольно простая, питается от напряжения 4.5..4.7V, которое приходит либо от USB (от коннектора J1), либо от стабилизатора напряжения U1, когда к коннектору P1 подано питание 8..12V. От конфликта по питанию (если одновременно подключен USB и внешний источник питания) спасают 2 диода Шоттки D1 и D2. Синтезатор DDS AD9833 получает тактирование либо от генератора X2 на 25 МГц, либо от внешнего генератора через коннектор P2, в зависимости от положения перемычки JP1. На выходе генератора стоит буферный операционный усилитель U4. Коннектор CON1 служит для перепрошивки программатором ISP, но его устанавливать не обязательно, так как есть возможность перешить программу микроконтроллера через USB (в память микроконтроллера AT90USB162 прошит загрузчик USB Flip DFU, как им пользоваться, см. [3]). Кварцевый резонатор X1 может быть на частоту либо 8 МГц, либо на 16 МГц, что должно быть учтено в firmware микроконтроллера. Светодиоды LED1 и LED2, показанные на схеме, в firmware микроконтроллера не используются. Вы можете использовать их по своему усмотрению, доработав исходный код. Как вариант их можно сконфигурировать в библиотеке LEFA для отображения различных событий USB.

[Как собрать аппаратную часть]

Эту схему проще всего собрать самому из двух готовых модулей - макетной платы AVR-USB162 [3] и китайского модуля на AD9833 [4].

at90usb162 04IMG 8330
AD9833 DDS board
Макетная плата AVR-USB162 AD9833 DDS Signal Generator Module

Скорее всего, через некоторое время эти ссылки устареют, поэтому вбейте в браузере строку поиска Google [4].

При выборе советую обращать в первую очередь на те платы с AD9833, где есть буферный операционный усилитель.

Купил я этот модуль за $8.48 с бесплатной доставкой.

Схема модуля снабжена сдвоенным цифровым резистором на микросхеме MCP41010 (номинал 10 кОм), которым можно регулировать амплитуду сигнала на выходе.

AD9833 DDS Signal Generator Module 0 12.5 MHz sch

Назначение выводов платы, как Вы их видите на 1 фотографии:

Таким образом, имея 2 такие платы, достаточно их просто соединить проводами (земля, питание, сигналы SPI_SCK, SPI_MOSI, AD_CS), залить прошивку через загрузчик USB, и сразу получите функциональный генератор, работающий в диапазоне частот 0..12.5 МГц.

[Firmware микроконтроллера]

Обработка протокола USB в программе микроконтроллера построена на основе библиотеки LUFA. Исходный код можно скачать в архиве по ссылке [6]. В таблице показаны модули программы и их краткое описание.

Примечание: проделывать шаги 1, 2, 3 проделывать необязательно, Вы можете взять готовую прошивку из каталога bin архива [6]. Там 2 прошивки, AT90USB162-function-gen-8MHz.hex и AT90USB162-function-gen-16MHz.hex, рассчитанные на частоту кварца 8 МГц и 16 МГц соответственно.

1. Убедитесь, что частота кварца на чипе AT90USB162 (кварц может быть на 8 МГц или на 16 МГц) точно соответствовала макропеременным F_CPU и F_USB, указанным в makefile. Например, если частота кварца 16 МГц, то в файле makefile должны присутствовать следующие 2 строки:

F_CPU = 16000000
F_USB = 16000000

2. Если Вы компилируете для другого чипа AVR USB, не для AT90USB162, то проверьте, правильно ли установлен тип микроконтроллера в макропеременной MCU того же makefile. Для чипа AT90USB162 макропеременная должна быть установлена так:

3. Чтобы скомпилировать проект, нужен установленный пакет WinAVR, который можно бесплатно скачать из сети Интернет. Проект компилируется команды make clean, make all, запущенными из корневой папки проекта (см. содержимое makefile, где приведена подсказка по командам компиляции).

4. Полученную прошивку (это будет файл main.hex) можно записать прямо через USB утилитой Flip DFU (как это делается, см. [3]).

[Первое подключение устройства к порту USB]

После того, как Вы залили полученную прошивку и переподключили плату через USB, Windows обнаружит новое устройство Function Generator и запросит для него драйвер. Укажите мастеру установки драйвера на файл windriver.inf, который находится в корневой папке проекта. Если в процессе установки драйвера Windows запросит подтверждение, то выберите "установить все равно". После успешной установки драйвера в Диспетчере Устройств, в его разделе Порты (COM и LPT) появится новое устройство "Function Generator (COMxx)" (вместо xx будут цифры номера COM-порта).

[Как управлять генератором]

Устройство генератора видится на Windows как обычный последовательный COM-порт (конечно, он виртуальный, работающий через USB). Поэтому управлять генератором можно простыми текстовыми командами, если вводить их в окне putty, SecureCRT, TerraTerm или любой другой программы терминала. Набор команд довольно простой, см. таблицу:

Такой способ управления генератором довольно неудобен. Автор проекта [1] сделал утилиту управления с графическим интерфейсом, написанную на Python. Она состоит из следующих файлов:

То, что программа управления основана на Phyton, означает её кроссплатформенность, т. е. теоретически можно запустить программу на любой операционной системе. Таким образом, если Вы на короткой ноге с Phyton, и он установлен у Вас на компьютере (программа может работать на операционных системах Linux, Mac OS, Windows), то никаких проблем не возникнет. Просто подключите устройство к компьютеру, убедитесь, что в модуле fgen.py правильно задано имя виртуального COM-порта (в зависимости от операционной системы это может быть, например, "/dev/ttyACM0" или "COM49"), запустите программу командой python fhen.py, и Вы получите графический интерфейс для управления генератором.

function gen python GUI

Однако, если у Вас не установлен интерпретатор Python и Вы не знаете, как им пользоваться, то с запуском утилиты возможно придется повозиться. Решение некоторых возможных проблем описано во врезке.

[Установка Python]

Если у Вас Windows XP, то устанавливайте версию Python 3.3.3 - 2013-11-17, более новые не установятся, так как в них Windows XP уже не поддерживается. Также Вам придется установить библиотеку pyserial (см. далее).

Если же у Вас при установке Python возникли проблемы, то ищите их решение в Интернете. Ниже описано решение некоторых подобных проблем.

1. Python 3.6 под Windows не устанавливается, инсталлер висит на процессе установки обновления C Runtime Update KB2999226. Как решить: скачайте это обновление с сайта Microsoft, и установите перед запуском инсталлятора Python.

[Проблемы в библиотеках Python и модулях программы]

3. Запуск fgen.py выдает ошибку "ImportError: No module named io". Настройте 2 переменных окружения PYTHONHOME и PYTHONPATH, указывающие на каталог установки Python. К примеру, если Python установлен у Вас в каталог C:\Python33, то эти переменные должны быть настроены следующим образом:

PYTHONHOME C:\Python33
PYTHONPATH C:\Python33\Lib

Если Вы не знаете, что такое переменные окружения Windows и как они настраиваются, то прогуглите, ничего сложного в этом нет.

4. Запуск fgen.py выдает ошибку "ImportError: No module named serial". Скачайте и установите модуль pyserial версии 2.7 или 3.3, или более свежий. Прогуглите слова pyserial download, и получите множество полезных ссылок. Установка заключается в простом копировании папки serial из скачанного архива в папку Lib каталога установки Python (например, это может быть каталог c:\Python33\Lib). Иногда есть exe-инсталляторы, упрощающие установку (например, pyserial-2.7.win32.exe).

Как вариант, можно использовать команду pip install serial (если у Вас установлена утилита pip).

5. Ошибки наподобие "Запуск программы невозможен, так как на компьютере отсутствует api-ms-win-crt-runtime-l1-1-0.dll. Попробуйте переустановить программу." или "Точка входа в процедуру ucrtbase.terminate не найдена в библиотеке DLL api-ms-win-crt-runtime-l1-1-0.dll". Решить проблему можно только корректной установкой Python. Правильно выберите дистрибутив для своей операционной системы, и установите.

6. При запуске Python выскакивает ошибка "Запуск программы невозможен, так как на компьютере отсутствует python33.dll. Попробуйте переустановить программу.". Скорее всего, Вы решили установить Python простым копированием, но забыли взять с собой копию файла python33.dll.

7. Запуск fgen.py выдает ошибку "function 'CancelIoEx' not found".

Скачал более старую версию pyserial-2.7.tar.gz, заменил папку serial в каталоге c:\Python33\Lib\.

8. В файле lib\serial\win32.py ругань на некоторые строчки с константами, заканчивающимися на L, например:

Удалил везде в файле win32.py такие константы, заменил на константы без L. Например:

Если вы решили всерьез заняться радиолюбительством, то вам в вашей мастерской никак не обойтись без генератора сигналов (функционального генератора, Function Generator). Промышленные образцы подобных генераторов могут стоить достаточно дорого, собственными силами генератор сигналов изготовить значительно дешевле.

Внешний вид генератора сигналов на Arduino и DDS модуле AD9833

В этой статье мы рассмотрим создание простейшего генератора сигналов на основе платы Arduino и DDS модуля AD9833, с помощью которого можно будет формировать синусоидальный, прямоугольный и треугольный сигналы с частотой до 12 МГц. Тестировать работу нашего генератора сигналов мы будем с помощью осциллографа, который можно также собрать на основе платы Arduino. Также на нашем сайте вы можете посмотреть проект генератора сигналов синусоидальной и прямоугольной формы только на основе платы Arduino, без использования дополнительных модулей.

Что такое генератор сигналов на основе прямого цифрового синтеза (DDS)

Как следует из названия, генератор сигналов может формировать различные виды сигналов заданной частоты. Аббревиатура DDS (Direct Digital Synthesis) означает прямой цифровой синтез. При этом способе любой сигнал можно сформировать в цифровом виде, а затем преобразовать его в аналоговый вид с помощью цифро-аналогового преобразователя (ЦАП). Чаще всего в современной электронике этот метод используется для формирования синусоидальных сигналов, но с его помощью можно формировать и прямоугольные, и треугольные сигналы, и вообще сигналы любой формы. Поскольку формирование сигналов происходит в цифровой форме в модуле DDS, то можно не только очень быстро переключаться между сигналами различной формы, но и также очень быстро изменять их частоту.

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

"Сердцем" нашего проекта будет микросхема AD9833, представляющая собой программируемый генератор сигналов и отличающаяся низким энергопотреблением. Микросхема (модуль) AD9833 способна формировать сигналы синусоидальной, прямоугольной и треугольной формы с максимальной частотой до 12 МГц. Таким образом, с помощью программы можно изменять частоту, фазу и форму сигналов на выходе данной микросхемы. Управляется данная микросхема по 3-х проводному интерфейсу SPI, что делает взаимодействие с ней достаточно простым. Функциональная схема микросхемы AD9833 приведена на следующем рисунке.

Функциональная схема микросхемы AD9833

Принцип работы данной микросхемы достаточно прост. Если мы посмотрим на ее функциональную схему, то мы обнаружим в ее составе аккумулятор фазы (Phase Accumulator), чья работа состоит в сохранении всех возможных значений синусоидальной волны, начиная от 0 to 2π. Также в ее схеме присутствуют SIN ROM, который преобразует информацию о фазе в амплитуду, и 10-битный ЦАП, который принимает данные от SIN ROM и преобразует их в соответствующие аналоговые значения напряжения, которые и подаются на выход микросхемы. На выходе микросхемы присутствует программно управляемый выключатель – его можно включать и выключать. Его роль мы рассмотрим далее в статье.

Основные особенности модуля AD9833:

  • цифровое программирование частоты и фазы;
  • потребляемая мощность 12.65 мВт при напряжении 3 В;
  • диапазон выходных частот от 0 МГц до 12.5 МГц;
  • разрешение 28 бит (0.1 Гц при частоте опорного сигнала 25 МГц);
  • синусоидальные, треугольные и прямоугольные выходные колебания;
  • напряжение питания от 2.3 В до 5.5 В;
  • трехпроводной интерфейс SPI;
  • расширенный температурный диапазон: от –40°C до +105°C;
  • опция пониженного энергопотребления.

Вкратце принцип работы данной микросхемы мы рассмотрели, более подробную информацию об этом вы можете посмотреть в даташите на микросхему AD9833.

Расположение выводов микросхемы AD9833 показано на следующем рисунке.

Расположение выводов микросхемы AD9833

Назначение выводов микросхемы:

VCC – плюс питания для цифровых и аналоговых цепей генератора.
DGND – цифровая земля.
SDATA – вход данных интерфейса SPI. Передача осуществляется 16-битными словами.
SCLK – вход тактового сигнала SPI. Используется второй режим работы: (CPOL = 1, CPHA = 0).
FSYNC – выбор микросхемы. Перед началом передачи данных должен быть установлен в 0, по завершении в 1.
AGND – аналоговая земля.
OUT – выход генератора.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. AD9833 DDS Function Generator (генератор сигналов AD9833) (купить на AliExpress).
  3. OLED дисплей 128х64 (купить на AliExpress - для данного проекта можно покупать модель с 4-мя контактами поскольку используется его подключение по интерфейсу I2C).
  4. Инкрементальный энкодер c кнопкой (Rotary Encoder) (купить на AliExpress - не уверен в том, что в нем есть кнопка, но она точно есть в этом лоте - купить на AliExpress № 2, но он продается, к сожалению, только по 5 штук).
  5. Регулятор напряжения LM7809 (купить на AliExpress).
  6. Конденсаторы 470 мкФ и 220 мкФ (купить на AliExpress).
  7. Конденсатор 104 пФ (купить на AliExpress).
  8. Резистор 10 кОм – 6 шт. (купить на AliExpress).
  9. Тактильный переключатель (Tactile Switches) – 4 шт. (купить на AliExpress).
  10. Зажимной контакт (Screw Terminal) 5.04mm (купить на AliExpress).
  11. Разъем типа "мама" (Female Header) и разъем типа DC Barrel Jack.
  12. Источник питания с напряжением 12 В.

Схема проекта

Схема генератора сигналов на основе платы Arduino и DDS модуле AD9833 представлена на следующем рисунке.

Схема генератора сигналов на основе платы Arduino и DDS модуле AD9833

"Сердцем" схемы является модуль AD9833, который подключен к плате Arduino. Для питания схемы используется регулятор напряжения LM7809 с подключенными к нему развязывающими конденсаторами, которые используются для фильтрации нежелательных шумов, способных оказать негативное воздействие на формируемые сигналы.

Управляет работой всей схемы плата Arduino. Для отображения информации используется OLED дисплей 128х64. Для изменения частоты формируемого сигнала мы используем три переключателя: первый устанавливает частоту в Гц, второй – в кГц, а третий – в МГц. Также мы используем кнопку для включения или отключения выхода схемы. И, наконец, в схеме используется инкрементальный энкодер (rotary encoder) вместе с подключенными к нему подтягивающими резисторами (чтобы правильно работали переключатели). Инкрементальный энкодер используется для изменения частоты, а тактильный переключатель внутри него используется для выбора формы сигнала.

Внешний вид собранной конструкции проекта генератора сигналов на Arduino

Объяснение программы для Arduino

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

Для написания кода программы нам прежде всего необходимо скачать необходимые библиотеки по следующим ссылкам:

Далее в программе мы подключим заголовочные файлы используемых библиотек. Библиотека AD9833.h используется для работы с DDS модулем AD9833, а библиотека math.h – для выполнения ряда математических операций.

Читайте также: