Функциональный dds rенератор на плис. Генератор сигналов: функциональный генератор своими руками Многофункциональный генератор сигналов своими руками

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

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

Параметры устройства

  • Частотный диапазон: 10 Гц - 60 кГц
  • Цифровая регулировка частоты с 3 различными шагами
  • Формы сигнала: Sine, Triangle, Square, Saw, H-pulse, L-pulse, Burst, Sweep, Noise
  • Выходной диапазон: 15 В для синуса и треугольника, 0-5 В для других режимов
  • Имеется выход для синхронизации импульсов

Питание прибора осуществляется от 12 вольт переменки, что обеспечивает достаточно высокое (свыше 18 В) напряжение постоянного тока, необходимое для нормальной эксплуатации 78L15 и 79L15, формирующих двухполярку по 15 В. Это делается для того, чтобы микросхема LF353 могла вывести полный диапазон сигналов на нагрузке 1 кОм.

Регулятор уровня использован ALPS SRBM1L0800. В схеме следует использовать резисторы с погрешностью ±1% допуска или лучше. Ограничители тока светодиодов - резисторы 4306R серии. Яркость может быть увеличена в зависимости от предпочтений исполнителя. Генератор собран в пластиковом корпусе 178x154x36 мм с алюминиевой передней и задней панелями.

Многие контактные компоненты монтируются на передней и задней панелях (кнопки, ручки, разъемы RCA, светодиодные сборки, разъем питания). Печатные платы крепятся к корпусу болтами с пластиковыми прокладками. Все остальные элементы генератора смонтированы на печатных платах - блок питания отдельно. Левая кнопка по середине для изменения режима, правая - для выбора частоты режима.

Генератор вырабатывает различные сигналы и работает в трех режимах, которые выбираются с помощью клавиши "Select" и указываются тремя верхними (на схеме) светодиодами. Поворотный регулятор изменяет параметры сигнала в соответствии со следующей таблицей:

Сразу после настройки в режиме 1 идёт генерация синуса. Однако, начальная частота довольно низкая и по крайней мере один щелчок энкодера необходим, чтобы увеличить его. На плате есть контакт подключения прибора для программирования, что позволяет оперативно изменять функциональность генератора сигналов, если необходимо. Все файлы проекта - прошивки PIC16F870, рисунки плат, находятся

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

    У меня к генератору были основные требования:
  • 1. Частота в диапазоне от 0.01Гц – 50000Гц с шагом 0.01Гц
  • 2. Максимальная, по возможности, линейность на протяжении всего диапазона.
  • 3. Работа на низкоомную нагрузку(для проверки динамиков и УЗ магнитострикционных излучателей)
  • 4. Удобство и быстрота перестройки «на горячую».
  • 5. Сканирование заданного диапазона с заданным шагом (удобно для определения частоты резонанса чего угодно)
  • 6. Большое количество форм сигналов, и постоянное напряжение для калибровки.
  • 7. Информативность отображения.
Поскольку я часто сталкивался с написанием программ на контроллеры AVR и Microchip – я выбирал между ними… Но дешевле и функциональнее оказался AVR. По быстродействию и нужному количеству выводов подошел ATMega16. Теперь о расчетах…
F max = 16000000Hz(Частота атмеги)
15 циклов берем на изменение аккумулятора фазы, выборку из LUT и вывод.
Итого Fclk=16000000Hz/15=1066666,6667Hz
Для необходимой точности выбрал 32-битный аккумулятор фазы.
Теперь вычислим минимальный шаг:
Step(Hz)= 1066666,6667Hz/(2^32)= 0,0002483526865641276041667(Hz)
Код самого генератора:
while (1){ #asm ADD R1,R6 ADC R2,R7 ADC R3,R8 ADC R4,R9 #endasm PORTC=LUT_of_Signal;
При 50000Гц сигнал за период будет образовываться ~21 сменой напряжений на выходе ЦАПа.
В качестве ЦАП я выбрал обычную R-2R матрицу – она не требует стробов и 8 бит вполне удовлетворяют условиям. Т.е. (|12|+|-12|) / 2^8 = 0,09375~ 0,1V

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

Чтобы предотвратить ложные срабатывания от валкодера – контроллер несколько раз проверяет направления при шагах и только тогда фиксирует изменения.
Остальные параметры задаются 4-мя кнопками.

    Генератор имеет возможность воспроизводить следующие формы сигналов:
  • 1. Синусоида
  • 2. Меандр
  • 3. H-wave
  • 4. Лестница симметричная
  • 5. Трапеция
  • 6. Пила
  • 7. Прямоугольник симметричный
  • 8. Лестница асимметричная
  • 9. Прямоугольник асимметричный
  • 10. Постоянный "+"
  • 11. Постоянный "-"
Видео с работой
Так же добавил функцию сканирования заданного диапазона частот с регулируемым шагом.
Шаг устанавливается 0,01Гц-0.1Гц-1Гц-10Гц-100Гц и обратно. Для удобства отображения и простоты написания программы использовал LCD от Nokia 3310(84x48). В качестве самого валкодера использовал биполярный шаговый двигатель от старого винчестера. Все устройство и программу просимулировал в Proteus.
Аналоговая часть генератора


Поскольку ЦАП выдает сигнал однополярный а задумка была зделать именно двухполярный генератор то необходимо использовать смещение на усилителе. В качестве источника опорного напряжения я выбрал TL431. Сам усилитель я реализовал на 2-х каскадах. Для усиления нагрузочной способности я применил повторитель напряжения на микросхеме TDA2030A.

Сигнал на выходе устройства U3 повторяет по форме и амплитуде входной, но имеет большую мощность, т.е. схема может работать на низкоомную нагрузку. Повторитель использован для увеличения выходной мощности низкочастотного генератора (чтобы можно было непосредственно испытывать головки громкоговорителей или акустические системы). Полоса рабочих частот повторителя линейна от постоянного тока до 0,5...1 МГц, что более чем достаточно для генератора НЧ.

Источник питания - любой(импульсный или линейный), желательно стабилизированный с питаниями +5,+12/-12V.

О сборке
При сборке проблем особых не возникло, настройка заключается в подстройке аналоговой части симметричности и амплитуды выходного сигнала. Смещение настраивается резистором R1 и R6.Амплитуда первого каскада R5, второго R8.

Данный 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

Максимальная частота - 65534 Гц (и до 8 МГц HS выход с меандром). И тут я подумал, что генератор - отличная задача, где ПЛИС сможет показать себя в лучшем виде. В качестве спортивного интереса я решил повторить проект на ПЛИС, при этом по срокам уложиться в два выходных дня, а параметры получить не строго определенные, а максимально возможные. Что из этого получилось, можно узнать под катом

День нулевой

До того, как наступят выходные, у меня было немного времени подумать над реализацией. Чтобы упростить себе задачу, решил сделать генератор не в виде отдельного устройства с кнопками и LCD экраном, а в виде устройства, которое подключается к ПК через USB. Для этого у меня есть плата USB2RS232 . Плата драйверов не требует (CDC), поэтому, я думаю, что и под Linux будет работать (для кого-то это важно). Так же, не буду скрывать, что с приемом сообщений по RS232 я уже работал. Модули для работы с RS232 буду брать готовые c opencores.com .

Для генерации синусоидального сигнала потребуется ЦАП. Тип ЦАП я выбрал, как и в исходном проекте - R2R на 8 бит. Он позволит работать на высоких частотах, порядка мегагерц. Убежден, что ПЛИС с этим должна справиться

По поводу того, на чем написать программу для передачи данных через COM порт я задумался. С одной стороны, можно написать на Delphi7, опыт написания такой программы уже есть, к тому же размер исполняемого файла будет не большим. Еще попробовал набросать что-то для работы с Serial в виде java скрипта в html страничке, но более менее заработало только через Chrome serial API, но для этого надо устанавливать плагин… в общем тоже отпадает. В качестве новшества для себя попробовал PyQt5, но при распространении такого проекта, нужно тащить кучу библиотек. Попробовав собрать PyQt проект в exe файл, получилось больше 10 мб. То есть, будет ничем не лучше приложения, написанного на c++\Qt5. Стоит еще учесть, что опыта разработки на python у меня нет, а вот на Qt5 - есть. Поэтому выбор пал на Qt5. С пятой версии там появился модуль для работы с serial и я с ним уже работал. А еще приложение на Qt5 может быть перенесено на Linux и Mac (для кого-то это важно), а с 5.2 версии, приложения на QWidgets может быть перенесено даже на смартфон!

Что еще нужно? Естественно плата с ПЛИС. У меня их две (Cyclone iv EP4CE10E22C8N на 10 тыс. ячеек, и Cyclone ii EP2C5 на 5 тыс. ячеек). Я выберу ту, что слева, исключительно по причине более удобного разъема. В плане объема проект не предполагает быть большим, поэтому уместится в любую из двух. По скорости работы они не отличаются. Обе платы имеют «на борту» генераторы 50 МГц, а внутри ПЛИС есть PLL , с помощью которого я смогу увеличить частоту до запланированных 200 МГц.

День первый

В связи с тем, что модуль DDS я уже делал в своем синтезаторном проекте, то я сразу взялся за паяльник и начал паять ЦАП на резисторах. Плату взял макетную. Монтаж делал с применением накрутки . Единственное изменение, которое коснулось технологии - я отказался от кислоты Ф38Н для лужения стоек в пользу индикаторного флюс-геля ТТ . Суть технологии проста: в печатную плату впаиваю стойки, на них со стороны печатного монтажа припаиваю резисторы. Недостающие соединения выполняю накруткой. Еще, стойки удобны тем, что я их могу вставить прямо в плату ПЛИС.

К сожалению, дома в наличии не оказалось резисторов 1 и 2 килоома. Ехать в магазин было некогда. Пришлось поступиться одним из своих правил, и выпаять резисторы из старой не нужной платы. Там применялись резисторы 15К и 30К. Получился вот такой франкенштейн:


После создания проекта нужно задать целевое устройство: Меню Assigments -> Device


В проекте я «нахадркодил» неуправляемый главный модуль DDS на фиксированную частоту.

Модуль генератора на 1000 Гц

module signal_generator(clk50M, signal_out); input wire clk50M; output wire signal_out; wire clk200M; osc osc_200M reg accumulator; assign signal_out = accumulator; //пробуем генерировать 1000 Гц //50 000 000 Hz - тактовая частота внешнего генератора //2^32 = 4 294 967 296 - разрядность DDS - 32 бита //делим 1000Hz / 50 000 000 Hz / 2 * 4294967296 => 42949,67296 always @(posedge clk50M) begin accumulator <= accumulator + 32"d42949; end endmodule


После этого нажал «Start Compilation», чтобы среда разработки задалась вопросом, какие у нас линии ввода вывода есть в главном модуле проекта и к каким физическим PIN"s они подключены. Подключить можно практически к любому. После компиляции назначаем появившиеся линии к реальным PIN микросхемы ПЛИС:

Пункт меню Assigments -> Pin Planner

На линии HS_OUT, key0 и key1 прошу пока не обращать внимание, они появляются в проекте потом, но скрин в самом начале я сделать не успел.

В принципе, достаточно «прописать» только PIN_nn в столбце Location, а остальные параметры (I/O standart, Current Strench и Slew Rate) можно оставить по умолчанию, либо выбрать такие же, что предлагаются по умолчанию (default), чтобы не было warning"ов.

Как узнать какому PIN соответствует номер разъема на плате?

Номера контактов разъема подписаны на плате


А пины ПЛИС, к которым подключены контакты разъема, описаны в документации, которая идет в комплекте с платой ПЛИС.




После того, как пины назначены, компилирую проект еще раз и прошиваю с помощью USB программатора. Если у вас не установлены драйверы для программатора USB Byte blaster, то укажите Windows, что они находятся в папке, куда у вас установлен Quartus. Дальше она сама найдет.

Подключать программатор нужно к разъему JTAG. А пункт меню для программирования «Tools -> Programmer» (либо нажать значек на панели инструментов). Кнопка «Start», радостное «Success» и прошивка уже внутри ПЛИС и уже работает. Только не выключайте ПЛИС, а то она все забудет.

Tools -> Programmer


ЦАП подключен к разъему платы ПЛИС. К выходу ЦАП подключаю осциллограф С1-112А. В результате должна получиться «пила» потому что на выход 8 бит выводится старшая часть слова DDS аккумулятора фазы. А оно всегда увеличивается, пока не переполнится.

Каких-то 1.5 часа и для частоты в 1000 Гц я вижу следующую осциллограмму:

Хочу заметить, что «пила» по середине имеет небольшой перелом. Он связан с тем, что резисторы имеют разброс значений.

Еще один важный момент, который нужно было выяснить - это максимально возможная частота, с которой будет работать DDS генератор. При правильно настроенных параметрах TimeQuest, после компиляции в «Compilation Report» можно увидеть, что скорость работы схемы выше 200 МГц с запасом. А это значит, что частоту генератора 50 МГц я буду умножать с помощью PLL на 4. Увеличивать значение аккумулятора фазы DDS буду с частотой 200 МГц. Итоговый диапазон частот, который можно получить в наших условиях 0 - 100 МГц. Точность установки частоты:

200 000 000 Гц (clk) / 2^32 (DDS) = 0,047 Гц
То есть, это лучше, чем ~0.05 Гц. Точность в доли герца для генератора с таким диапазоном рабочих частот (0...100 МГц) считаю достаточной. Если кому-то потребуется повысить точность, то для этого можно увеличить разрядность DDS (при этом не забыть проверить TimeQuest Timing Analyzer, что скорость работы логической схемы укладывалась в CLK=200 МГц, ведь это сумматор), либо просто снизить тактовую частоту, если такой широкий диапазон частот не требуется.

TimeQuest Timing Analyzer


После того, как я увидел на экране «пилу», семейные дела заставили меня ехать на дачу (выходной же). Там я косил, варил, жарил шашлык и не подозревал о том сюрпризе, что ждал меня вечером. Уже ближе к ночи, перед сном, я решил посмотреть форму сигнала для других частот.

Для частоты 100 КГц

Для частоты 250 КГц

Для частоты 500 КГц

Для частоты 1 МГц

День второй

В связи с тем, что было интересно, как будет работать ЦАП на резисторах 100 и 200 Ом, я сразу взялся за паяльник. На этот раз ЦАП получился более аккуратным, а времени на его монтаж ушло меньше.

Ставим ЦАП на плату ПЛИС и подключаем к осциллографу

Проверяем 1 МГц - ВО! Совсем другое дело!

Пила 10 МГц

Пила 25 МГц


Форма пилы на 10 МГц еще похожа на правильную. Но на 25 МГц она уже совсем «не красивая». Однако, у С1-112а полоса пропускания - 10 МГц, так что в данном случае причина может быть уже в осциллографе.

В принципе, на этом вопрос с ЦАП можно считать закрытым. Теперь снимем осциллограммы высокоскоростного выхода. Для этого, выведем старший бит на отдельный PIN ПЛИС. Данные для этой линии будем брать со старшего бита аккумулятора DDS.

Assign hs_out = accumulator;

Меандр 1 МГц

Меандр 5 МГц

Меандр 25 МГц

Меандр 50 МГц уже практически не виден


Но считаю, что выход ПЛИС стоило бы нагрузить на сопротивление. Возможно, фронты были бы круче.

Синус делается по таблице. Размер таблицы 256 значений по 8 бит. Можно было бы взять и больше, но у меня уже был готовый mif файл. С помощью мастера создаем элемент ROM с данными таблицы синуса из mif-файла.

Создание ROM - Tools -> Mega Wizard Plugin manager


Выбираем 1 портовую ROM и задаем название модулю

Соглашаемся

Тут тоже соглашаемся

С помощью browse находим наш mif файл с таблицей синуса

Тут тоже ничего не меняем

Снимаем галочку с модуля sine_rom_bb.v - он не нужен. Дальше finish. Квартус спросит добавить модуль в проект - соглашаемся. После этого, модуль можно использовать так же, как любой другой модуль в Verilog.


Старшие 8 бит слова аккумулятора DDS будут использоваться в качестве адреса ROM, а выход данных - значение синуса.

Код

//sine rom wire sine_out; sine_rom sine1(.clock(clk200M), .address(accumulator), .q(sine_out));


Осциллограмма синуса на разных частотах выглядит… одинаково.

При желании, можно рассмотреть проблемы ЦАП, связанные с разбросом резисторов:

Чтож, на этом выходные кончились. А ведь еще не написано ПО для управления с ПК. Вынужден констатировать факт, что в запланированные сроки я не уложился.

День третий

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

Интерфейс

Ссылки с аналогами

Далеко не полный список
Функциональный DDS генератор. Создан базе AVR. Частоты 0… 65534 Гц.
Обзор DDS-генератора GK101. Создан с применением ПЛИС Altera MAX240. Частоты до 10 МГц.
Многофункциональный генератор на PIC16F870. Частотный диапазон: 11 Гц - 60 кГц.
генераторы Добавить метки

В статье использованы материалы канала Ютуб Паяльник 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 ШИМ контроллере сигнал получается в разы лучше. Также хочется дополнить, что производитель всё-таки сделал описание своего набора на сайте, который будет размещён в описании к видео. Здесь есть расположение компонентов всех, настройка переменного резистора для нормальной работы дисплея, шаги частот, принципиальная работа, принципиальная схема для нашего генератора, и также сама принципиальная схема.

Что еще почитать