Главная » Измерения
Призовой фонд
на июль 2019 г.
1. 1000 руб
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 100 руб.
От пользователей

Функциональный DDS генератор

Данный DDS функциональный генератор (версия 2.0) сигналов собран на микроконтроллере AVR, обладает хорошей функциональностью, имеет амплитудный контроль, а также собран на односторонней печатной плате.

Внешний вид DDS-генератора

Данный генератор базируется на алгоритме 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-генератора V2.0:
- простая схема с распространенными и недорогими радиоэлементами;
- односторонняя печатная плата;
- встроенный блок питания;
- отдельный высокоскоростной выход (HS) до 8МГц;
- DDS-сигналы с изменяемой амплитудой и смещением;
- DDS-сигналы: синус, прямоугольник, пила и реверсивная пила, треугольник, ЭКГ-сигнал и сигнал шума;
- 2×16 LCD экран;
- интуитивная 5-ти кнопочная клавиатура;
- шаги для регулировки частоты: 1, 10, 100, 1000, 10000 Гц;
- запоминание последнего состояния после включения питания.

На представленной ниже блок-схеме, приведена логическая структура функционального генератора:

Логическая структура функционального генератора

Как вы можете видеть, устройство требует наличие нескольких питающих напряжений: +5В, -12В, +12В. Напряжения +12В и -12В используются для регулирования амплитуды сигнала и смещения. Блок питания сконструирован с использованием трансформатора и нескольких микросхем стабилизаторов напряжения:

Схема блока питания DDS-генератора

Блок питания собран на отдельной плате:

Блок питания DDS-генератора

Если самому собирать блок питания нет желания, то можно использовать обычный ATX блок питания от компьютера, где уже присутствуют все необходимые напряжения. Разводка ATX разъема.

LCD-экран

Все действия отображаются через LCD-экранчик. Управление генератором осуществляется пятью клавишами

LCD-меню

Клавиши вверх/вниз используются для перемещения по меню, клавиши влево/вправо для изменения значения частоты. Когда центральная клавиша нажата - начинается генерирование выбранного сигнала. Повторное нажатие клавиши останавливает генератор.

Система меню генератора:
Система меню генератора

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

Генератор шума не имеет каких-либо настроек. Для него используется обычная функция rand() непрерывно подающиеся на выход DDS-генератора.

Высокоскоростной выход HS имеет 4 режима частоты: 1, 2, 4 и 8 МГц.

Принципиальная схема

Схема функционального генератора простая и содержит легкодоступные элементы:
- микроконтроллер AVR Atmega16, с внешним кварцем на 16 МГц;
- стандартный HD44780-типа LCD-экранчик 2×16;
- R2R-матрица ЦАП из обычных резисторов;
- операционный усилитель LM358N (отечественный аналог КР1040УД1);
- два потенциометра;
- пять клавиш;
- несколько разъемов.

Принципиальная схема DDS-генератора

Плата:
Плата генератора

Функциональный генератор собран в пластиковом боксе:
Собранный генератор

Тестовый запуск:
Тестовый запуск

Программное обеспечение

Как я уже говорил выше, в основе своей программы я использовал алгоритм DDS-генератора Jesper. Я добавил несколько строчек кода на ассемблере для реализации останова генерирования. Теперь алгоритм содержит 10 ЦПУ циклов, вместо 9.

void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0){
asm volatile( "eor r18, r18 ;r18<-0″ "\n\t"
"eor r19, r19 ;r19<-0″ "\n\t"
"1:" "\n\t"
"add r18, %0 ;1 cycle" "\n\t"
"adc r19, %1 ;1 cycle" "\n\t"
"adc %A3, %2 ;1 cycle" "\n\t"
"lpm ;3 cycles" "\n\t"
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"sbis %5, 2 ;1 cycle if no skip" "\n\t"
"rjmp 1b ;2 cycles. Total 10 cycles" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
:"r18″, "r19″
);}

Таблица форм 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 можно взять здесь.

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

Тестирование

Я тестировал генератор с осциллографом и частотомером. Все сигналы хорошо генерируются во всем диапазоне частот (1...65535 Гц). Регулирование амплитуды и смещения работает нормально.

Сигналы DDS-генератора

В следующей версии генератора думаю реализовать сигнал нарастающей синусоиды.

Последнюю версию ПО (WinAVR), исходник, файлы EagleCAD и Proteus можете скачать ниже.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Блок питания
Линейный регулятор
LM7805
1 Поиск в Utsource В блокнот
Линейный регулятор
LM7812
1 Поиск в Utsource В блокнот
Линейный регулятор
LM7912
1 Поиск в Utsource В блокнот
B1 Диодный мост1 Поиск в Utsource В блокнот
C1, C7 Электролитический конденсатор2000 мкФ2 Поиск в Utsource В блокнот
C3, C5, C9 Электролитический конденсатор100 мкФ3 Поиск в Utsource В блокнот
C4, C6, C10 Конденсатор0.1 мкФ3 Поиск в Utsource В блокнот
TR1 Трансформатор220В - 2x15В1 Поиск в Utsource В блокнот
F1 Плавкий предохранитель1 Поиск в Utsource В блокнот
S1 Переключатель220В1 Поиск в Utsource В блокнот
X1 РазъёмСеть 220В1 Поиск в Utsource В блокнот
JP1 Разъём4 контакта1 Выход БППоиск в Utsource В блокнот
Основная плата
IC1 МК AVR 8-бит
ATmega16
1 Поиск в Utsource В блокнот
IC2 Операционный усилитель
LM358N
1 КР1040УД1Поиск в Utsource В блокнот
C2, C3 Конденсатор0.1 мкФ2 Поиск в Utsource В блокнот
C6, C7 Конденсатор18 пФ2 Поиск в Utsource В блокнот
R1 Резистор
500 Ом
1 Поиск в Utsource В блокнот
R2, R6, R8, R10, R12, R14, R16, R18 Резистор
10 кОм
8 Поиск в Utsource В блокнот
R3, R21 Резистор
100 кОм
2 Поиск в Utsource В блокнот
R20 Резистор
100 Ом
1 Поиск в Utsource В блокнот
R22 Резистор
12 кОм
1 Поиск в Utsource В блокнот
POT Подстроечный резистор10 кОм1 Поиск в Utsource В блокнот
POT1 Подстроечный резистор1 кОм1 Поиск в Utsource В блокнот
POT2 Подстроечный резистор47 кОм1 Поиск в Utsource В блокнот
LCD LCD-дисплейHD44780 2x161 Поиск в Utsource В блокнот
Q1 Кварц16 МГц1 Поиск в Utsource В блокнот
BUTTONS, RESET Кнопка6 Поиск в Utsource В блокнот
HS, DDS Разъём2 контакта1 BNCПоиск в Utsource В блокнот
ISP РазъёмPLD-61 Разъём ISPПоиск в Utsource В блокнот
JP1 Разъём4 контакта1 Разъём питанияПоиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

Теги:

Колтыков А.В. Опубликована: 2010 г. 0 2
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (19) | Я собрал (0) | Подписаться

0
Андрей #
Подскажите пожалуйста какие битфузы выставить при прошивке ATMEGA16?
Ответить
0
talibanich #
Фьюзы
Если не подойдет, попробуйте убрать галочку JTAGEN.
Ответить
0
Андрей #
Собрал я данный генератор, прошил микроконтроллер, запустил его, подсоединил его к осциллографу, и начал испытывать его. Столкнулся я с такой проблемой - при частотах выше 20кГц идут какие то всплески, т.е. нарушается правильная форма выходного сигнала, подскажите пожалуйста из за чего это могло произойти - неужели при таких частотах микроконтроллер дает искажения?
Ответить
0
Vit_is #
Надо увеличить глубину ООС. Уменьшить сопротивление R21 (50кОм) и POT2 (30кОм). Значение сопротивлений приблизительное.
Ответить
0
Антон #
Возможно ли добавить следующую модификацию: вместо ЭКГ (который редко нужен) залить туда трапецеидальный сигнал?
Ответить
0
smack #
Думаю, можно что угодно. Чуть ниже "//define signals" находятся массивы констант, которые как раз и формируют для ЦАП положенную форму сигнала
Ответить
0
Андрей #
Собрал генератор - генерирует всё чётко кроме прямоугольника. Что нужно изменить в программе чтобы он менял частоту в процессе работы (непрерывное регулирование частоты). Если можно кусок кода и куда его вставить.
Ответить
0
queit #
Печатной платой блока питания поделитесь, пожалуйста
Ответить
0
Родион #
Возможно ли реализовать генератор пилы и треугольника с частотой до 3 МГц?
Ответить
0
Сергей #
Собрал я данный генератор, прошил микроконтроллер. Подал питание, на экране квадратики в верхней строчке и все..
Выше прочел "Если не подойдет, попробуйте убрать галочку JTAGEN." Сделал так и все завелось! Спасибо за информацию.
Ответить
0
San #
Собрал на макетке. CKOPT я бы поставил, генератор стабильнее работать будет. Осцилл показывает постоянную ошибку в +10Гц на 20 и 40 кГц синуса, пока еще не перепроверял калиброванным частотомером.
Ответить
0
Кристоф #
Добрый день! Столкнулся вот с такой проблемой. Купил на Али вот такой DDS генератор сигналов, схема точь-в-точь как и здесь. Мало того что при подаче питания, прибор как бы начинает глючить, вроде как работает, но бывает что сразу или спустя 5-10 секунд "зависает" и не реагирует на кнопки меню, помогает только ресет, а иногда только по питанию. Даже когда он успешно запустится, выставляю частоту и запускаю, то частота в 2 раза ниже, даже четь больше и как-то плавает, видно даже по форме синуса. Думал что проблема с питанием, подключил сперва БП от старого сканера эпсон, атм как раз были все нужные питания, потом подключал от ПК, потом подключал 3 отдельных аккумулятора с установкой стабилизаторов. Везде проблема одинаковая. Залил прошивку отсюда, проблема не ушла, прошивка которая стояла, один в один как и ваша и все те же проблемы. Резисторы соответствуют номиналу, конденсаторы тоже. Проверил кварц, прибор показал точно 16 МГц. Операционник менял тоже, МК другую устанавливал... Это видать какая-то плохая энергетика тут у меня.... Обидно что закуплена была партия таких приборов, а не один!
Ответить
0
Юра #
Собрал сие чудо. И вроде бы все нормально, но как только начинаю листать верх-вниз дисплей фигню начинает показывать. У кого то еще такие проблемы возникали? И как с этим бороться?
Ответить
0
Иван #
JTAGEN выключать обязательно, на его порту висит дисплей, и Jtag вносит искажения в работу дисплея!
Ответить
0
Александр #
Тоже такая же ерунда с дисплеем, как у Юры. После недолгой работы и листания меню вылазят какие-то кракозябры. Подскажите в чем может быть дело?
Ответить
0
Иван #
И вам тоже JTAGEN выключать обязательно!
Ответить
0
andro #
Какие изменения нужны для атмега8?
Ответить
0
Clor #
Интересно как автор подбирал резисторы и чем их измерял для r-2r цап, погрешность последнего разряда не должна превышать 1/256.
Ответить
0
Андрей #
Подскажите пожалуйста, каким конкретно из прикреплённых файлов нужно прошивать, у меня в арсенале есть программатор MiniPro TL866A. Благодарю.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Конструктор: DDS генератор сигналов
Конструктор: DDS генератор сигналов
USB осциллограф DSO-2090 USB-реле (2 канала)
вверх