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

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

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

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

Теги:

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

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

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

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

Комментарии (24) | Я собрал (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. Благодарю.
Ответить
0
Борис #
Для прошивки контроллера я использовал программу AVRDUDE_PROG 3.3 (отлична программа спасибо автору)
Для прошивки понадобится 2 файла располженныз в папке:
/Firmware
Я использовал 2 файла:
main.hex - собственно исполняемый код -> Flash память
main.epp - файл для записи в Eeprom контроллера.
После прошивки все заработало.
В качестве устройсва применил Китайский DDS генератор с Али экспресс
Ответить
0
Борис #
Да забыл: Программировал с помощью китайского программатора - USBasp через ICSP порт контроллера.
Ответить
0
andreas1-80 #
А фьюзы какие выставляли и какой конкретно DDS генератор? Их там на али много...
Ответить
+1
Boris_latysh #
Пиши в личку. Картинку с фьюзами отправлю. На форуме такое публиковать не дают.
Китайский генератор ищи по органам управления:
- Два выхода DDS + HS
- Две ручки настройки (крутилки)
- 5 кнопок управления (причем расположены также как в данной стье - крестом с центральной кнопкой)
От себя могу сказать что китайцы запитали выходной ОУ через DC-DC преобразователь 7660 - VCC. Получилось Г...но. По отрицательному питанию идет перменка 100 мВ. Плюс питается все от внешнего БП учитывая что 7660 иметт предел 10 в я ее как раз и спалил воткнув 12в БП.
НО контроллер и подключение полностью идентичны Atmega 16
Прикрепленный файл: DDS_fuses.jpg
Ответить
0
andreas1-80 #
У меня 6 кнопок.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Осциллограф DSO138
Осциллограф DSO138
Макетная плата для пайки (10 шт) Мультиметр Mastech MS8239C
вверх