Низкочастотный DDS генератор на ATmega8. Функциональный DDS генератор Dds генератор что

Собираем простой функциональный генератор для лаборатории начинающего радиолюбителя

Доброго дня уважаемые радиолюбители! Приветствую вас на сайте “ “

Собираем генератор сигналов – функциональный генератор. Часть 3.

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

И так, представляю вам окончательный вариант моей печатной платы выполненной в программе, которую мы рассматривали на втором занятии – Sprint Layout :

Если вы не смогли сделать свой вариант платы (что-то не получилось, или было просто лень, к сожалению), то можете воспользоваться моим “шедевром”. Плата получилась размером 9х5,5 см и содержит две перемычки (две линии синего цвета). Здесь вы можете скачать этот вариант платы в формате Sprint Laiout^

(63.6 KiB, 3,488 hits)

После применения лазерно-утюжной технологии и травления, получилась такая заготовка:

Дорожки на этой плате выполнены шириной 0,8 мм, почти все контактные площадки диаметром 1,5 мм и почти все отверстия – сверлом 0,7 мм. Я думаю, что вам будет не очень сложно разобраться в этой плате, и так-же, в зависимости от используемых деталей (особенно подстроечные сопротивления), внести свои изменения. Сразу хочу сказать, что эта плата проверенна и при правильной пайке деталей схема начинает работать сразу.

Немного о функциональности и красоте платы. Беря в руки плату, изготовленную в заводских условиях, вы наверняка замечали как она удобно подготовлена для пайки деталей – и сверху и снизу нанесена белым цветом так называемая “шелкография”, на которой сразу видны и наименование деталей и их посадочные места, что очень облегчает жизнь при пайке радиоэлементов. Видя посадочное место радиоэлемента, никогда не ошибешься в какие отверстия его вставлять, остается только глянуть на схему, выбрать нужную деталь, вставить ее и припаять. Поэтому мы сегодня сделаем плату приближенную к заводской, т.е. нанесем шелкографию на слой со стороны деталей. Единственное, эта “шелкография” будет черного цвета. Процесс очень прост. Если, к примеру, мы пользуемся программой Sprint Layout, то выбираем при печати слой К1 (слой со стороны деталей), распечатываем его как и для самой платы (но только в зеркальном отображении), накладываем отпечаток на сторону платы, где нет фольги (со стороны деталей), центрируем его (а на просвет протравленной платы рисунок виден прилично) и применяя способ ЛУТ переносим тонер на текстолит. Процесс – как и при переносе тонера на медь, и любуемся результатом:

После высверливания отверстий, вы реально будете видеть схему расположения деталей на плате. А самое главное, что это не только для красоты платы (хотя, как я уже говорил, красивая плата – это залог хорошей и долгой работы собранной вами схемы), а главное – для облегчения дальнейшей пайки схемы. Затраченные десять минут на нанесение “шелкографии” заметно окупаются по времени при сборке схемы. Некоторые радиолюбители, после подготовки платы к пайке и нанесения такой “шелкографии”, покрывают слой со стороны деталей лаком, тем самым защищая “шелкографию” от стирания. Хочу отметить, что тонер на текстолите держится очень хорошо, а после пайки деталей вам придется растворителем удалять остатки канифоли с платы. Попадание растворителя на “шелкографию”, покрытую лаком, приводит к появлению белого налета, при удалении которого сходит и сама “шелкография” (это хорошо видно на фотографии, именно так я и делал), поэтому, я считаю, что использовать лак не обязательно. Кстати, все надписи, контура деталей выполнены при толщине линий 0,2 мм, и как видите, все это прекрасно переноситься на текстолит.

А вот так выглядит моя плата (без перемычек и навесных деталей):

Эта плата выглядела бы намного лучше, если бы я не покрывал ее лаком. Но а вы можете как всегда поэкспериментировать, и естественно, сделать лучше. Кроме того, у меня на плате установлены два конденсатора С4, нужного номинала (0,22 мкФ) у меня не оказалось и я заменил его двумя конденсаторами номиналом 0,1 мкФ соединив их параллельно.

Продолжаем. После того, как мы припаяли все детали на плату, припаиваем две перемычки, припаиваем с помощью отрезков монтажных проводов резисторы R7 и R10, переключатель S2. Переключатель S1 пока не припаиваем а делаем перемычку из провода, соединяя выводы 10 микросхемы ICL8038 и конденсатора С3 (т.е. подключаем диапазон 0,7 – 7 кГц), подаем питание с нашего (я надеюсь собранного) лабораторного блока питания на входы микросхемных стабилизаторов около 15 вольт постоянного напряжения

Теперь мы готовы к проверке и настройке нашего генератора. Как проверить работоспособность генератора. Очень просто. Подпаиваем к к выходам Х1 (1:1) и “общий” любой обыкновенный или пьезокерамический динамик (к примеру от китайских часов в будильнике). При подключении питания мы услышим звуковой сигнал. При изменении сопротивления R10 мы услышим как изменяется тональность сигнала на выходе, а при изменении сопротивления R7 – как изменяется громкость сигнала. Если у вас этого нет, то единственная причина в неправильной пайке радиоэлементов. Обязательно пройдитесь еще раз по схеме, устраните недостатки и все будет о,кей!

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

Продолжаем. Вот так выглядит плата, подготовленная к настройке:

Что мы видим на этой картинке. Питание – черный “крокодил” на общий провод, красный “крокодил” на положительный вход стабилизатора, желтый “крокодил” – на отрицательный вход стабилизатора отрицательного напряжения. Припаянные переменные сопротивления R7 и R10, а также переключатель S2. С нашего лабораторного блока питания (вот где пригодился двухполярный источник питания) мы подаем на схему напряжение около 15-16 вольт, для того, чтобы нормально работали микросхемные стабилизаторы на 12 вольт.

Подключив питание на входы стабилизаторов (15-16 вольт) с помощью тестера проверяем напряжение на выходах стабилизаторов (±12 вольт). В зависимости от используемых стабилизаторов напряжения будет отличаться от ± 12 вольт, но близки к нему. Если у вас напряжения на выходах стабилизаторов несуразные (не соответствуют тому, что надо), то причина одна – плохой контакт с “массой”. Самое интересное, что даже отсутствие надежного контакта с “землей” не мешает работе генератора на динамик.

Ну а теперь нам осталось настроить наш генератор. Настройку мы будем проводить с помощью специальной программы – виртуальный осциллограф . В сети можно найти много программ имитирующих работу осциллографа на экране компьютера. Специально для этого занятия я проверил множество таких программ и остановил свой выбор на одной, которая, как мне кажется, наиболее лучше симулирует осциллограф – Virtins Multi-Instrument . Данная программа имеет в своем составе несколько подпрограмм – это и осциллограф, частотомер, анализатор спектра, генератор, и кроме того имеется русский интерфейс:

Здесь вы можете скачать данную программу:

(41.7 MiB, 5,238 hits)

Программа проста в использовании, а для настройки нашего генератора потребуется лищь минимальное знание ее функций:

Для того чтобы настроить наш генератор нам необходимо подключиться к компьютеру через звуковую карту. Подсоединиться можно через линейный вход (есть не у всех компьютеров) или к разъему “микрофон” (есть на всех компьютерах). Для этого нам необходимо взять какие-либо старые, ненужные наушники от телефона или другого устройства, со штекером диаметром 3,5 мм, и разобрать их. После разборки припаиваем к штекеру два провода – как показано на фотографии:

После этого белый провод подпаиваем к “земле” а красный к контакту Х2 (1:10). Регулятор уровня сигнала R7 ставим в минимальное положение (обязательно, что-бы не спалить звуковую карту) и подключаем штекер к компьютеру. Запускаем программу, при этом в рабочем окне мы увидим две запущенные программы – осциллограф и анализатор спектра. Анализатор спектра отключаем, выбираем на верхней панели “мультиметр” и запускаем его. Появится окошко, которое будет показывать частоту нашего сигнала. С помощью резистора R10 устанавливаем частоту около 1 кГц, переключатель S2 ставим в положение “1” (синусоидальный сигнал). А затем, с помощью подстроечных резисторов R2, R4 и R5 настраиваем наш генератор. Сначала форму синусоидального сигнала резисторами R5 и R4, добиваясь на экране формы сигнала в виде синусоиды, а затем, переключив S2 в положение “3” (прямоугольный сигнал), резистором R2 добиваемся симметрии сигнала. Как это реально выглядит, вы можете посмотреть на коротком видео:

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

Будем считать, что мы успешно со всем справились, и в нашем радиолюбительском хозяйстве появился новый прибор – функциональный генератор . Оснащать его частотомером мы пока не будем (нет подходящей схемы) а будем его использовать в таком виде, учитывая, что нужную нам частоту мы можем выставить с помощью программы Virtins Multi-Instrument . Частотомер для генератора мы будем собирать на микроконтроллере, в разделе “Микроконтроллеры”.

Следующим нашим этапом в познании и практическом претворении в жизнь радиолюбительских устройств будет сборка светомузыкальной установки на светодиодах.

При повторении данной конструкции был случай, когда не удалось добиться правильной формы прямоугольных импульсов. Почему возникла такая проблема сказать трудно, возможно из-за такой работы микросхемы. Решить проблему очень легко. Для этого необходимо применить триггер Шмитта на микросхеме К561(КР1561)ТЛ1 по нижеприведенной схеме. Данная схема позволяет преобразовывать напряжение любой формы в прямоугольные импульсы с очень хорошей формы. Схема включается в разрыв проводника, идущего от вывода 9 микросхемы, вместо конденсатора С6.

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

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

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

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

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

LCD-экран

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

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

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

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

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

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

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

Плата:

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


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

Как я уже говорил выше, в основе своей программы я использовал алгоритм 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 Гц). Регулирование амплитуды и смещения работает нормально.

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

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

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

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Линейный регулятор

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

В статье использованы материалы канала Ютуб Паяльник TV. В практике радиолюбителя бывают ситуации, когда необходим генератор частот. Так, например, при настройке усилителя низких частот и при конструировании импульсных источников питания. В различных интернет-магазинах можно приобрести готовые генераторы или конструкторы. Например, цифровой конструктор, генератор частот синуса, меандра и пилы. Ориентировочная стоимость такого набора от 800 до 1000 рублей. Куплен он в китайском интернет-магазине , идет под наименованием “DDS Function Signal Generator Module DIY “.

Поставляется такой набор в антистатическом пакетике. Что же у нас внутри? Итак, видим печатную плату, довольно высокого качества. Стеклотекстолит довольно толстый. На печатной плате изображены все номиналы необходимых компонентов. Дальше – пассивные компоненты, резисторы различные, непосредственно сама микросхема ATmega 16. Можно поближе её рассмотреть. Также панелька для неё. И ещё одна микросхемка восьминогая LN358. Жидкокристаллический дисплей, 16-разрядный, кажется. Штекеры для подключения выходов, разъёмы. Болтики для крепления дисплея на плату. Также стойки под болтики. Штыревые разъёмы. Ещё панелька. Переменные резисторы; один, уже можно по плате понять, для регулировки амплитуды; второй… разберёмся, для чего. И микропереключатели. Ещё один переменный резистор. К сожалению, в комплекте не хватает, а может, производитель просто решил, что радиолюбитель не нуждается в подробной инструкции…

Сборка конструктора генератора сигналов.

Собственно говоря, нет подробной инструкции, как собирать, как запускать, как пользоваться, и прочее. Но попробуем сами разобраться. В сборке, я думаю, проблем не будет, так как все номиналы подписаны. Также у конструктора нет никакого наименования, кроме как названия «DDS сигнал генератор», и некоторые маркировки TB207809. Не знаю, что это такое, номер модели или сама маркировка нашего конструктора. Не имею понятия.

Давайте приступим к пайке компонентов. Начнём с пассивных. С резисторов. Проверим номиналы их. Это резисторы на 10 кОм, это на, видимо, кОм. С большим разбросом… Да, это на 20 кОм. Как видно по плате, у нас очень много одинаковых резисторов. Вот ряд из 10-килоомных, вот ряд из 20. Проблем с пайкой не будет. Начнём с 10-килоомных. Теперь впаяем 20-килоомные резисторы. Для надёжности также можно пропаять все резисторы с лицевой стороны дорожки. Так как все отверстия металлизированы, если вы вдруг где-то что-то не пропаяли, можно здесь эту проблему компенсировать. Паяем оставшиеся резисторы, предварительно проверив номинал. Это резистор на 100 Ом, вот он на плате. Итак, все постоянные резисторы на плате запаяны.

Теперь впаяем конденсаторы, их у нас не так много. Кажется, всего 4 штучки… Так и есть. Итак, первый конденсатор, маркировка 104 – это 100 нФ. Также два конденсатора, мелких оранжевых, на 22 пФ. Они находятся справа и слева от кварцевого резонатора. Итак, все конденсаторы впаяны.

Теперь впаяем наш кварц, он на 16 МГц. Стоит между двумя конденсаторами на 22 пФ. Полярность не важно какая. Ставим его ровненько, здесь подогнём ножки. Кварцевый резонатор впаян.

Теперь впаяем панельки под микросхемы. Их у нас две. Начнём с большой. Одна панелька впаяна. Теперь впаяем маленькую панельку, LM358. Теперь впаяем два штыревых разъёмов на плате. Один из них – разъём «мама», он входит в плату в натяг в отверстие, поэтому его нигде фиксировать не нужно. И второй разъём – «папа», это входной разъём по питанию. Он тоже входит внатяг, фиксировать ничего не нужно.

Теперь можно впаять наши кнопочки, или микропереключатели, кому как удобнее. Они тоже втыкаются в натяг. Всё переключается, всё прекрасно. Теперь впаяем три переменных резистора. Один у нас с маркировкой 102, это значит 10 и ещё два нолика, то есть 1 кОм. Он встанет вот на это место. Встаёт не совсем в натяг, поэтому придётся его придерживать. И первую пайку сделать немножко неаккуратно. Осталось впаять на этой плате два разъёма выходного сигнала. После пайки они держатся очень-очень крепко. Для того, чтобы микросхема плотно встала в свою панельку, нужно немножко подогнуть конденсаторы на 22 пФ, вот так. Теперь микросхемка встанет точно. Ключ должен располагаться, как по маркировке нарисовано. Теперь вставим вторую микросхемку. Также вставляем в соответствии с маркировкой. Ключ должен располагаться снизу. Вот так. Микросхема вставлена. Теперь можно впаять штыревой разъём на печатную плату дисплея. Предварительно нужно зафиксировать штыревой разъём, и выровнять его, чтобы вставал не криво. Для этого припаяем одну ножку. Так. С этой стороны тоже желательно. Смотрим, как он встал. Встаёт ровненько. Можно впаивать теперь полностью его. Теперь, для того, чтобы дисплей находился на своём месте, необходимо поставить стойки под болтики. Они устанавливаются в два места сюда и, соответственно, вот сюда. Для этого нам понадобится отвёрточка, можно крестовую, можно плоскую. Удобнее всё-таки крестовую. И следующим образом делаем ставим болтик, ставим стоечку, закручиваем. Одна. Вторая. Вот так.

Теперь устанавливаем наш дисплей точно на свою позицию, то есть совмещаем отверстия, штыревой разъём «мама-папа», и втыкаем его сюда. Таким образом, наш дисплей должен находиться чуть-чуть выше микросхемы. Чуть-чуть выше нашего микроконтроллера, чтобы он не касался его. И вкручиваем два болтика стойки. Вот так. На этом сборку нашего генератора можно считать завершённой. Итак, перед тем, как тестировать наш генератор, настоятельно рекомендую вам промыть плату от остатков флюса, на всякий случай. Для того, чтобы запустить генератор, ему необходимо три напряжения. То есть, это 5 В, +12 В, -12 В, и, соответственно, земляной. Для этого можно собрать блок питания на двух трансформаторах, и сделать двуполярный выход, а по плюсовому плечу сделать стабилизацию на 5 В. Либо можно взять блок питания от компьютера, у него уже имеется выход и 5 В, и 12 В, и -12 В. Для того, чтобы его запустить, достаточно зелёный и чёрный провод закоротить перемычкой. Я воспользуюсь как раз блоком питания от компьютера. Отвёл от него уже необходимые провода. Синий – это -12 В, чёрный – земляной, жёлтый +12 В, и красный +5 В. Втыкаем его в наш штыревой разъём каким-то образом…

Теперь можно включить наш блок питания в сеть. Итак, видим, что у нас загорелся экран. Ничего больше пока не видим. Но не пугайтесь, это не значит, что вы неправильно собрали. На сайте производителя я всё-таки нашёл необходимые инструкции по регулировке, и для того, чтобы у нас что-то начало показывать, нужно отрегулировать этот маленький переменный резистор 10 кОм. Крутим его в разных направлениях, и смотрим, что на экране появляется. То есть, крутим его вот так, против часовой стрелки, – у нас не происходит ничего. Крутим по часовой стрелке, и видим, что у нас начинают прорисовываться буковки. Ещё сильнее – у нас пиксели все начинают гореть. Отрегулируем так, чтобы был чистый текст. Вот так. Видим текст, надпись синусоиды SIN, 30 Гц, выключено. И для того, чтобы ещё лучше видеть, снимем защитную плёночку. Вот так. Теперь видим, что наш генератор окончательно заработал.

Тест режимов работы генератора после сборки.

Смотрим, какие у него есть режимы работы. Щёлкаем вниз, кнопочка DOWN. Здесь надпись SQUARE, это значит «прямоугольник». TRIANGLE, это значит «треугольник». SAWTOOTH, это значит «пила». REW SAWTOOTH, это «обратная пила». ECG, это один из видов сигнала тоже. И шаг частоты. А также есть шум, и высокочастотный сигнал. Влево-вправо мы меняем частоту нашу. Если зажать, он начнёт быстро менять. Кнопочкой «START» мы запускаем его. Кнопочкой «RESET» мы сбрасываем наши настройки. Можем изменять шаг частоты от 10 Гц… от 1 Гц, дальше 100, дальше 1000, дальше 10 000. То есть, допустим, выберем шаг 1 Гц. Выберем синусоиду. И можем менять по одному герцу сигнал. Не всегда будет удобно, это удобно только на низких частотах. Выберем, допустим, шаг 1000, выберем синусоиду, и посмотрим, какая максимальная. Итак, видим, что максимальная генерируемая частота обычным DDS выходом, это 65535 Гц на всех видах сигналов. То есть, смотрим, на прямоугольнике то же самое, прибавить не можем. Это закономерно, так на всех частотах. А минимальная частота, соответственно… Давайте посмотрим. Видим, от нуля. От нуля, и далее пошло, 1, 2, 3, 4, 5, 6, 7… И так далее. Ну что ж. Наш генератор заработал.

Забыл сказать, что включение можете производить с любым положением резисторов переменных, это никак не отразится. Кроме, соответственно, этого, а этот вы подрегулируете когда включите. Теперь перейдём к проверке непосредственно качества сигнала нашего. Для тестов мне понадобится ноутбук с осциллографом USB, и осциллографический пробник вот такой, чтобы подключать его к осциллографу и генератору одновременно. Подключим сперва к DDS выходу, то есть, к выходу с низкочастотным сигналом. Поставим частому синуса от 1 Гц, и попробуем включить. Пока ничего… А ничего, потому что мы не подключили осциллограф. Видим, что у нас что-то появилось. Изменим развёртку осциллографа на, допустим, 200 мс. Вот. Видим синусоиду, низкочастотную очень. Частота по осциллографу 0, 95 Гц. Для хороших тестов прибавим немножко частоту. Допустим, 20 Гц. Теперь изменим развёртку снова на 10 мс. Видим очень чистую синусоиду частотой 19, 9 Гц. Попробуем поменять амплитуду сигнала. Касаться до платы лучше не нужно с обратной стороны, происходят такие нехорошие помехи. Поэтому касаться не будем. Как видим, амплитуда очень хорошо регулируется у нас вплоть от нуля и до… Амплитуда сигнала 18, 8, то есть, от нижнего пика до верхнего пика 18, 8 В. Соответственно, от нуля и до верхнего пика у нас получается чуть меньше 10 В. Для чего же нам нужен второй резистор переменный? Посмотрим. Синусоида поползла, скажем так, вверх. А теперь поползла вниз. Так вот, для чего же он нужен? Этот резистор у нас изменяет смещение сигнала. То есть, если нам нужна синусоида от нуля до какого-то значения напряжения, мы просто перетаскиваем её вверх, уменьшаем амплитуду сигнала, и вот у нас синусоида от нуля до 10 В. А если нам нужна синусоида переменная, то есть, от напряжения питания до минус напряжения питания, мы ползунок вращаем в другую сторону, потенциометр. Вот так вот. Меняем значение амплитуды у напряжения. И как видим, у нас синусоида от -9 до +9 В. То же самое со всеми остальными. Выберем, допустим, прямоугольник. Видим прямоугольник переменный, то есть, он также от минус напряжения питания до плюс, от -10 до +10 В. Изменяя ползунок, изменяя его положение, мы меняем нижнюю составляющую нашего сигнала. То есть, сейчас у нас прямоугольник чисто импульсный, от нуля до напряжения питания. Или же наоборот, от нуля до минус напряжения питания. Синхронизацию нужно поставить… Давайте прибавим немножко частоты, чтобы у нас быстрее всё шло. То есть, выберем сейчас шаг, FREQUENCU STEP, 100 Гц, допустим. Вот так. Так будет замечательно, 500 Гц. Включаем, видим 500 Гц прямоугольник, изменим развёртку. Фронт спад довольно пологий почему-то здесь, на 500 Гц. Посмотрим, что будет происходить на дальнейших частотах, поэтому пока не будем задаваться… Ставим развёртку пока 200… Нет, 1 мс. Выставим переменное положение, как-то так… Вот у нас прямоугольник, меняется у нас амплитуда. Выберем теперь дальше что у нас идёт… Треугольник. Смотрим треугольник то же самое, амплитуда спокойно у нас меняется, без всяких проблем. То же самое меняется и положение его относительно нуля. Вот можем видеть. Выставим обратно теперь. Далее у нас идёт пила. Смотрим на пилу. То же самое, всё прекрасно меняется, и туда, и сюда. И амплитудка также у неё меняется. Всё прекрасно. Хороший качественный сигнал. Дальше идёт обратная пила. Так же, амплитуда, положение относительно нуля. Дальше идёт ECG сигнал, такой он вид имеет. И также у него меняется положение относительно нуля, и амплитуда. Последний у нас идёт шум. У шума также у нас меняется положение относительно нуля, и также меняется амплитуда. Это мы проверяли низкие частоты. Теперь шаг изменим, пускай 10 000 будет. Поставим самую высокую частоту, практически самую высокую. Запускаем. Ух ты, что это? Очень печально, на самом деле. Прямоугольника здесь соответственно никакого нет. Хорошо, поставим частому в два раза меньшую. SQUARE… Пускай будет 25 кГц. должен быть прямоугольник, но у нас почему-то треугольник здесь. Почему-то у нас здесь треугольник. Интересно… А если менять амплитуду? Теперь у нас какая-то двухполупериодная выпрямленная синусоида какая-то получается. Прямоугольника здесь также нет. Хорошо… Ещё уменьшим частоту. Допустим, до 15 кГц. Вот уже хотя бы внешний вид какой-то есть. Вот так вот. Да, не совсем радужно всё, как я думал. Какие-то у нас полки дед-тайма появляются, эти вот. Откуда они – неизвестно. Ну что ж. До 5 кГц, в принципе, ещё юзабельный наш генератор, а после, судя по всему, уже видим, траектория у нас очень пологая. Я собирал генератор на обыкновенной логике, и она вплоть до 0 кГц выдавала стабильный прямоугольник, в отличие от этого. Посмотрим, как пила себя ведёт на таких же частотах… Не пила, а треугольник. С треугольником у нас проблем особо нет, то же самое, всё регулируется. Всё хорошо. А, допустим, пила? Спад очень пологий стал, нерезкий. Характеристики сильно меняются. И то же самое у обратной пилы. ECG, тут тоже непонятное что-то. Какие-то пирамиды Хеопса. И шум… Какой-то набор гармоник из прямоугольников. Тоже, судя по всему, уже плохо используемый… Ну что можно сказать? До 5 кГц ещё генератор справляется со своей задачей почти хорошо. То есть, на низких частотах до 500 Гц всё прекрасно, после начинаются уже какие-то уходы параметров, более пологие траектории. И от 5 кГц и выше очень сильное изменение характеристик, и на самой высокой частоте 65 кГц происходит какая-то ерунда, если откровенно. Совершенно невозможно использовать такой синус и остальные виды сигнала. Ну что ж, нужно посмотреть, что у нас с высокочастотным выходом. Переключаемся на HIGH-SPEED OUT. Здесь выбираем HIGH-SPEED. И посмотрим. Развёртку сразу поменяем до 100 нс. И посмотрим, что у нас получится. Видите, регулировка здесь уже… Положением уровней ничего не меняется. Соответственно, это уже совсем другой выход. Это выход непосредственно с микросхемы. Непосредственно с микроконтроллера. Видим здесь прямоугольник, довольно-таки хороший причём. То есть, то, что было на 65 кГц, невозможно даже сравнить с этим. Здесь уже очень качественный такой мегагерцовый прямоуголиничек. Чуть-чуть похуже у меня как раз выдавал сигнал на логике. Единственное что, амплитуда здесь, смотрю, не меняется. Сигнал стабильный будет амплитудой 5 В. Теперь посмотрим, что же будет, когда мы увеличим частоту, то есть поставим, допустим, 2 МГц. Включаем. Прямоугольник почти хороший. Амплитуда также не поменялась, 5 В осталась. Смотрим дальше. 4 МГц. На 4 МГц уже прямоугольник больше походит на синус; хотя у него осталась небольшая постоянная составляющая, но уже немножко не то. Очень пологий фронт и спад получаются. И амплитуда, кстати, тоже не поменялась, 5 В. И смотрим на 8 МГц. Амплитуда поменялась, 4, 5 В, и здесь у нас уже не прямоугольник, а явный синус. Увеличивая развёртку, видим уже явно здесь что-то похожее на синус. В розетке как раз такой синус, только 50 Гц. Такие же у него кривые характеристики. Не знаю, в какой аппаратуре можно использовать такой синус. Ну что ж, 1 и 2 МГц вполне юзабельные. Выключаем.

Выводы.

Что можно сказать в целом? В целом, наборчик неплохой. Процентов на 50 оправдал ожидания. Но, конечно, сильное изменение характеристик от 5 кГц – очень плохо. Не ожидал я, что будет такой плохой сигнал выдавать. Но до 5 кГц вполне можно использовать. Допустим, для тестов усилителей низкой частоты, звуковой частоты, вполне можно использовать этот набор. На 40 кГц, то есть, это частоты работы импульсных преобразователей, где-то от 25 и до 100 кГц, здесь уже ловить нечего, тут уже никакой хороший сигнал не получишь. На той же самой TL494 ШИМ контроллере сигнал получается в разы лучше. Также хочется дополнить, что производитель всё-таки сделал описание своего набора на сайте, который будет размещён в описании к видео. Здесь есть расположение компонентов всех, настройка переменного резистора для нормальной работы дисплея, шаги частот, принципиальная работа, принципиальная схема для нашего генератора, и также сама принципиальная схема.

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

Основные характеристики прибора:

  • простое схемотехническое решение, доступные компоненты;
  • односторонняя печатная плата;
  • сетевой источник питания;
  • специализированный выход частоты от 1 МГц до 8 МГц;
  • DDS выход с регулировкой амплитуды и смещения;
  • форма выходного DDS сигнала: синусоида, прямоугольные импульсы, пилообразные импульсы, треугольные импульсы, ЭКГ, шум;
  • для отображения текущих параметров используется двухстрочный ЖК дисплей;
  • пятикнопочная клавиатура;
  • шаг перестройки частоты: 1, 10, 10, 1000, 10000 Гц;
  • восстановление последней конфигурации при включении;
  • регулировка смещения: -5 В … +5 В;
  • регулировка амплитуды: 0 … 10 В;
  • регулировка частоты: 0 … 65534 Гц.

За основу прибора, а точнее алгоритм работы микроконтроллера, была взята разработка DDS генератора Jesper Hansen . Предложенный алгоритм был немного переработан и адаптирован под компилятор WinAVR-GCC

Сигнальный генератор имеет два выхода: выход DDS сигнала и выход высокочастотного сигнала (1 - 8 МГц) прямоугольной формы, который может использоваться для «оживления» микроконтроллеров с неправильными установками Fuse-битов или для других целей.

Высокочастотный сигнал поступает непосредственно с микроконтроллера, с вывода OC1A (PD5). DDS сигнал формируется микроконтроллером с использованием цепочки резисторов R2R (ЦАП), регулировка смещения и амплитуды возможна благодаря использованию низкопотребляющего операционного усилителя LM358N .

Блок-схема DDS генератора

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

Принципиальная схема источника питания изображена на рисунке ниже.

В источнике питания используются стабилизаторы напряжения LM7812 , LM7805 , LM7912 (стабилизатор отрицательного напряжения -12 В).

Внешний вид источника питания для генератора

Возможно использование компьютерного блока питания форм-фактора ATX, для этого необходимо распаять переходник в соответствии со схемой:

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

Для сборки прибора потребуется:

  • микроконтроллер ATmega16;
  • кварцевый резонатор 16 МГц;
  • стандартный двухстрочный ЖК индикатор на базе контроллера HD44780 ;
  • R2R ЦАП выполненный в виде цепочки резисторов;
  • сдвоенный операционный усилитель LM358;
  • два потенциометра;
  • пять кнопок;
  • несколько коннекторов и разъемов.

Рисунок печатной платы

Примененные компоненты, за исключением микроконтроллера и разъемов, в корпусах для поверхностного монтажа (smd).

Прибор смонтированный в корпусе

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

Загрузки

Принципиальная схема и печатная плата (формат Eagle) -
Проект для симуляции в среде Proteus -

  • Кто пробовал сваять?
  • Смотрите ветку Функцинальный генератор, начиная с 4 поста идет обсуждение этой конструкции, и пользователи QED и куко собрали этот генератор. И в протеусе был проверен - работает.
  • скажите кто-нибудь, пожалуйста, перечень компонентов для блока питания используемые в первом(http://www..html?di=69926) варианте генератора. в частности интересует какой модель трансформатора и выпрямитель использовал автор. или хотя бы полные аналоги. из просьбы ясно, что я в электротехнике не силён, но думаю собрать осилю без углубления в дебри предмета. Просто форс-мажор. С конденсаторами и 3-мя стабилизаторами всё понятно. Собственно вот эта схема прикреплена.
  • Трансформатор любой маломощный с двумя вторичными обмотками с выходным напряжением 15 В (переменка). В частности автор использовал трансформатор TS6/47 (2х15 В/2х0.25 А) Диодный мостик тоже любой маломощный сгодится. На фотке в статье виден и трансформатор и диодный мостик.
  • а подскажите пожалуйста, какая связь должна быть между вторичным выходом трансформатора и выпрямителем, учитывая схему БП автора?:confused: ну имею ввиду, если на выходе трансформатора 15в (вроде нашел вот такой -ТПС-7.2(2х15В)сим.(7.2Вт)15Вх2_7.2Вт_сим.(0.24А)х2 - 160,00руб) , то какой выпрямитель к нему? и на случай, если 12в на выходе трансформатора?
  • Не совсем понял вопрос, честно говоря... Трансформатор указанный вами вроде подходит... Мостик вполне, думаю подойдет к примеру DB106
  • Vadzz, спасибо огромное за подсказку. если DB106 подходит, значит и имеющий аналогичные параметры W08 подойдет. это так? просто, именно его имеется возможность(желание) купить. и ещё не смог разобраться с номиналами конденсаторов на схеме автора, подскажите, пожалуйста. они в все в nF(нанофарад-нФ)?
  • W08 - вполне подойдет. Конденсаторы в схеме блока питания или в схеме самого генератора? Если блок питания - то там все кондеры в микрофарадах (2000 мкф, 100 мкф, 0.1 мкф). В схеме генератора - по-моему только два кондера в обвязке кварца 18 пикофарад.
  • Vadzz, безгранично благодарю. вроде все вопросы сняты. Со схемой самого генератора вроде немного проще(есть файл EAGLE). Буду воплощать в реальность. Если всё будет путём, то попробую выложить печатную плату (формат Eagle) Блока питания.
  • Обязательно должно все получиться у вас... Рисунок печатной платы выкладывайте, кому-то обязательно пригодится...
  • Я спаял и пользуюсь. Честно говоря по ходу возникли несколько проблем: 1) недостаток - невозможна перестройка частоты при включенном генераторе. Т.е. если нужно менять частоту, то сначала выключаем генерацию сигнала, потом перестраиваем частоту, потом снова включаем генерацию сигнала. Это зачастую неудобно, когда нужно следить за реакцией налаживаемого устройства на плавное изменение частоты. Например для управления оборотами шаговика перестраивать частоту нужно только плавно. 2) недостаток - дважды слетал EEPROM. Автор предусмотрел запоминание установленных режимов в EEPROM, но это совсем не обязательно. Уж лучше бы ничего не запоминал и не использовал его совсем. Или в крайнем случае при повреждении EEPROM грузил установки "по умолчанию" из FLASH. Зато был бы надежнее. В целом в остальном работой я доволен. Просьба к тем, кто смыслит в написании программ для AVR исправить эти два недостатка.
  • По поводу перестройки частоты "налету" тут скорее всего нужно использовть DMA, чего в подобных микроконтроллерах нет. Может я ошибаюсь... надо глянуть исходники генератора... Насчет "слетает EEPROM" - интересно конечно причину узнать, но два раза я думаю еще не показатель.
  • Готовые генераторы на ad9850(51) есть здесь: http://radiokit.tiu.ru/product_list/group_802113
  • Готовые генераторы на AD9850 это хорошие девайсы, но другое дело когда собираешь и налаживаешь сам...
  • Разрушение данных в EEPROM приводит к полной неработоспособности генератора. Очень неприятная проблема в самый неподходящий момент. Я обычно внутри корпуса генератора держу запасной запрограммированый контроллер. Но это же не выход из положения. Почему не предусмотреть сохранение только текущих данных, которые не повлияют в целом на работоспособность, если будет разрушение EEPROM? При потере данных из Flash грузим установки по умолчанию. Все остальное, что касается работоспособности программы хранится во Flash. Так надежнее будет работать. ПРЕДЛАГАЮ разместить список ссылок с другими проектами генераторов на AVR.
  • Тут несколько людей собирали этот генератор (с их слов конечно же), они ничего не говорили по этому поводу, есть ли такая проблема у них или нет...
  • Подскажите,в данном генераторе есть возможность менять только частоту или скважность тоже?
  • В характеристика генератора указано, что можно менять частоту, к сожалению возможности менять скованность нет...
  • парни подскажите по поводу RESET джампера -когда его включить и когда снять..... благодарю
  • Нормальное состояние джампера - разомкнут.И это скорее всего не джампер, а имелось ввиду разъем для возможности подключения кнопки, с помощью которой можно будет сбрасывать мк, если вдруг чего...

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

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

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

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

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

LCD-экран

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

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

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

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

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

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

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

Плата:

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


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

Как я уже говорил выше, в основе своей программы я использовал алгоритм 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