Данный функциональный DDS-генератор сигналов собран на микроконтроллере AVR, обладает хорошей функциональностью и имеет амплитудный контроль.
Данный генератор базируется на алгоритме DDS-генератора Jesper, программа была модернизирована под AVR-GCC C со вставками кода на ассемблере. Прибор имеет два выходных сигнала: первый — DDS сигналы, второй — высокоскоростной (1–8МГц) «прямоугольный» выход, который может использоваться для оживления МК с неправильными фузами и для других целей.
Высокоскоростной сигнал HS (High Speed) берется напрямую с микроконтроллера Atmega16 OC1A (PD5). DDS-сигналы формируются с других выходов МК через резистивную R2R-матрицу и через микросхему LM358N, которая позволяет осуществить регулировку амплитуды (Amplitude) сигнала и смещение (Offset).
Смещение и амплитуда регулируются при помощи двух потенциометров. Смещение может регулироваться в диапазоне +5В…-5В, а амплитуда — 0–10В. Частота DDS-сигналов может регулироваться в пределах 0–65534 Гц, этого более чем достаточно для тестирования аудио-схем и других радиолюбительских задач.
Основные характеристики DDS-генератора сигналов и конструктивные особенности
простая схема с распространенными и недорогими радиоэлементами;
односторонняя печатная плата;
встроенный блок питания;
отдельный высокоскоростной выход (HS) до 8МГц;
DDS-сигналы с изменяемой амплитудой и смещением;
DDS-сигналы: синус, прямоугольник, пила и реверсивная пила, треугольник, ЭКГ-сигнал и сигнал шума;
2х16 LCD экран;
интуитивная 5-ти кнопочная клавиатура;
шаги для регулировки частоты: 1, 10, 100, 1000, 10000 Гц;
запоминание последнего состояния после включения питания.
На представленной ниже блок-схеме приведена логическая структура функционального генератора:
Как вы можете видеть, устройство требует наличия нескольких питающих напряжений: +5В, -12В, +12В. Напряжения +12В и -12В используются для регулирования амплитуды сигнала и смещения. Блок питания сконструирован с использованием трансформатора и нескольких микросхем стабилизаторов напряжения:
Блок питания собран на отдельной плате:
Если самому собирать блок питания нет желания, то можно использовать обычный ATX БП от компьютера, где уже присутствуют все необходимые напряжения.
Все действия отображаются через LCD-экранчик. Управление генератором осуществляется пятью клавишами.
Клавиши вверх/вниз используются для перемещения по меню, клавиши влево/вправо — для изменения значения частоты. Когда центральная клавиша нажата, начинается генерирование выбранного сигнала. Повторное нажатие клавиши останавливает генератор.
Система меню генератора:
Для установки шага изменения частоты предусмотрено отдельное значение. Это удобно, если вам необходимо менять частоту в широких пределах. Генератор шума не имеет каких-либо настроек. Для него используется обычная функция rand(). Высокоскоростной выход HS имеет 4 режима частоты: 1, 2, 4 и 8 МГц.
Функциональный генератор собран в пластиковом боксе:
Тестовый запуск:
Программное обеспечение DDS-генератора сигналов
Как уже говорилось выше, в основе своей программы использован алгоритм DDS-генератора Jesper. Было добавлено несколько строчек кода на ассемблере для реализации остановки генерирования. Теперь алгоритм содержит 10 ЦПУ циклов, вместо 9.
Таблица форм DDS-сигналов размещена во флэш памяти МК, адрес которой начинается с 0xXX00. Эти секции определены в makefile, в соответствующих местах в памяти:
#Define sections where to store signal tables LDFLAGS += -Wl,-section-start=.MySection1=0x3A00 LDFLAGS += -Wl,-section-start=.MySection2=0x3B00 LDFLAGS += -Wl,-section-start=.MySection3=0x3C00 LDFLAGS += -Wl,-section-start=.MySection4=0x3D00 LDFLAGS += -Wl,-section-start=.MySection5=0x3E00 LDFLAGS += -Wl,-section-start=.MySection6=0x3F00
Библиотеку для работы с LCD, а также последнюю версию ПО, файлы EagleCAD и Proteus можно скачать ниже.
Генератор был протестирован с осциллографом и частотомером. Все сигналы хорошо генерируются во всем диапазоне частот (1–65535 Гц). Регулирование амплитуды и смещения работает нормально.