Функциональный dds rенератор на плис. Цифровой функциональный генератор DDS Подробное описание программы dds генератора

Максимальная частота - 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 кГц.
генераторы
  • Qt5
  • Добавить метки

    DDS генератор, или генератор Прямого Цифрового Синтеза в настоящее время уже далеко не новинка. На просторах интернета представлено большое количество схем, преимущественно на микроконтроллерах AVR. В качестве ЦАП-а в основном выступает R-2R матрица, но присутствуют конструкции и на микросхеме AD9850 (к слову, низкой стоимостью они не отличаются). Но к сожалению (или у счастью?), в них не было нужного мне: небольшие размеры и низкая стоимость. Как итог, была разработана данная схема.

    В данной статье я хочу представить DDS генератор, выполненный на микроконтроллере ATmega8. Для отображения информации используется графический LCD LPH8731-3C. Данное устройство позволяет получить периодичный сигнал с произвольной формой (разрешение 100 точек) и заданной амплитудой.

    Технические характеристики:

    • Напряжение питания: 5В
    • Потребляемый ток: <100мА
    • Мин. выходное напряжение: 0.5В
    • Макс. выходное напряжение: 2,5В
    • Шаг установки напряжения: 0,5В
    • Мин. частота сигнала: 10Гц
    • Макс. частота сигнала: 2кГц (10кГц)
    • Шаг установки частоты: 10Гц (100Гц)
    • Количество предустановленных сигналов: 8
    • Отображение данных: графический ЖКИ
    • Возможность добавления формы сигнала "на ходу" (без перепрошивки): отсутствует
    • Яркость подсветки: регулируется, необходима перепрошивка
    • Макс. количество форм в памяти: не менее 20

    Схема устройства представлена ниже:

    Основа схемы, как уже упоминалось, микроконтроллер ATmega8-16AU. Индекс "...16" необходим, так как в схеме применен кварцевый резонатор на 16МГц. ЦАП выполнен на R-2R матрице. Данный ход позволяет избежать применения специальных микросхем, но к сожалению, не позволяет добиться реального разрешения ЦАП выше 10 .. 12бит (в любительских условиях). К выходу матрицы через резистивный делитель напряжения (R17, RV1) подключен операционный усилитель, включенный по схеме повторителя и служит для усиления тока.

    Управление устройством осуществляется посредством кнопок. На переднюю панель целесообразно выносить только кнопки SB1-SB4. Кнопка SB5 играет роль "функциональной", и позволяет использовать отличные от "основных" действия для кнопок SB1-SB4. Переключатель SA1 включает/выключает "генерацию" и кнопки управления соответственно. В первом его положении включено управление и отключено генерирование сигнала, а в другом ситуация диаметрально противоположна первому. Разъем J2 можно не разводить на плате, так как он предназначен лишь для подачи на плату питания на время программирования микроконтроллера (но придется цепляться напрямую к дорожкам).

    Печатная плата устройства выполнена на двухстороннем фольгированном материале и имеет размеры (_ х _). Основная сложность при ее изготовлении - разводка дорожек для посадки микроконтроллера, но если у вас есть опыт изготовления подобных плат и/или возможность использовать фоторезист/ЛУТ, то проблем при изготовлении быть не должно.

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

    Прошивка

    Прошивка для микроконтроллера была написана в . Для заливки.hex файла использовался программатор и софт . Скриншот с примером выставления fuse-битов представлен ниже. Так как на печатной плате специальный разъем для программирования не предусматривался, то для прошивки микроконтроллера придется временно припаяться к соответствующим дорожкам (пины микроконтроллера "MISO", "MOSI", "SCK", "RESET").

    Сборка и компоновка устройства

    При помещении устройства в корпус, желательно установить кнопку SB5 на боковой его грани. Выключатель SA1 в моем варианте находился на нижнем торце, как и разъем для подключения нагрузки. Разъем USB установлен в верхней части корпуса потому, что в планах было использование DC-DC преобразователя 3.7 -> 5В. Но так как хотелось универсальности, решил сделать этот блок съемным.

    Возможная замена элементов

    Микроконтроллер можно использовать только ATmega8-16AU. Операционный усилитель LM358 аналогичным (к примеру, NE532, OP04, OP221, OP290, ...) в корпусе SO-8, и про возможное несоответствие выводов забывать не стоит. Транзистор Q1 можно взять любой маломощный n-p-n, к примеру отечественный КТ315 или КТ3102. Резисторы R1-R16 желательно брать с минимальный допуском (0,5...1%), но пойдут и более распространенные 2...5% (но тут форма сигнала может быть немного хуже). Причем, желательно взять резисторы одного номинала (пусть будет 10кОм), и потом там где требуется 2R ставить 10кОм, а где R - 2х10кОм параллельно. Конденсаторы C1, C2 желательно брать в диапазоне 22...33пФ. Кварцевый резонатор использован низкопрофильный, на частоту 16МГц. Резистор RV1 - многооборотный. Стабилитрон можно ставить только на 3.3В.

    LCD дисплей можно использовать только с желтой подложкой и надписью "LPH8731-3C". Он встречается в мобильных телефонах Siemens A60, A65 и др. и имеет разрешение 101x80 пикселей.

    Настройка

    Правильно собранное устройство в наладке не нуждается, и должно работать сразу после сборки и прошивки контроллера. Если этого не произошло, то проверьте на короткое дорожки на печатной плате, правильность подключения LCD дисплея, целостность проводов от переключателя SA1 а так же исправность стабилитрона и источника питания/кабеля USB.

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

    Назначение кнопок: SB1 - "Влево" (Вых. напряжение меньше), SB2 - "Вправо" (Вых. напряжение больше), SB3 - "Частота +10" (Частота +100), SB4 - "Частота -10" (Частота -100) <-- SB5 - Отжата (Нажата).

    Фото и видео устройства:


    На двух фото ниже видно, как можно получить большую частоту, нежели 2кГц. Но приходится качеством сигнала (для прямоугольных не принципиально).



    Осциллограммы сигналов, полученных с помощью данного устройства:





    Внешний вид собранного устройства:


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

    Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
    U1 МК AVR 8-бит

    ATmega8A-AU

    1 В блокнот
    U2 Операционный усилитель

    LM358

    1 Корпус SO-8 (LM358D)) В блокнот
    Q1 Биполярный транзистор

    BC547

    1 В блокнот
    D1 Стабилитрон

    BZX55C3V3

    1 В блокнот
    RV1 Подстроечный резистор 220 кОм 1 В блокнот
    R1-R9 Резистор

    2.2 кОм

    9 0805, 1% В блокнот
    R10-R16, R32 Резистор

    1.1 кОм

    8 0805, 1% В блокнот
    R17 Резистор

    100 кОм

    1 0805 В блокнот
    R19-R23 Резистор

    5.6 кОм

    5 0805 В блокнот
    R24-28, R18 Резистор

    10 кОм

    5 0805 В блокнот
    R29, R30 Резистор

    220 Ом

    2 0805 В блокнот
    R31 Резистор

    75 Ом

    1 0805 В блокнот
    R33 Резистор

    510 Ом

    1 0805 В блокнот
    C1, C2 Конденсатор 27 пФ 2 0805

    В первой части статьи рассматривается схемотехническое решение, устройство и конструкция 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 джампера -когда его включить и когда снять..... благодарю
    • Нормальное состояние джампера - разомкнут.И это скорее всего не джампер, а имелось ввиду разъем для возможности подключения кнопки, с помощью которой можно будет сбрасывать мк, если вдруг чего...

    Уже давно пользуюсь генератором сигналов UDB1005S , построенном по DDS технологии, куплен он был на али за 30$.

    Если кратко, то серия UDB100 x включает в себя 3 модели UDB1002, UDB1005, UDB1008, последняя цифра определяет максимальную рабочую частоту, а буква S на конце, если она есть, говорит о том, что генератор поддерживает sweep_mode . В основе генератора лежит связка плис + мк, мк обслуживает периферию(кнопки, энкодер, дисплей), а плис занимается генерацией сигнала.

    Генератор имеет один аналоговый выход с возможностью регулировки амплитуды и смещения по постоянному напряжению, один цифровой с TTL уровнями, может работать в режиме счётчика импульсов и в режиме частотомера.

    Теперь давайте рассмотрим основные особенности.

    Аналоговый выход:

    • Форма выходного сигнала: синусоидальный, прямоугольный, пилообразный
    • Амплитуда выходного сигнала ≤9Vp-p(без нагрузки)
    • Выходное сопротивление 50Ω±10%
    • Смещение по постоянному напряжению ±2.5V(без нагрузки)
    • Частотный диапазон

      0.01Hz~2MHz(UDB1002S)
      0.01Hz~5MHz(UDB1005S)
      0.01Hz~8MHz(UDB1008S)

    • Точность частоты ±5×10-6
    • Стабильность частоты ±1×10-6
    • Время нарастания и спада прямоугольного сигнала ≤100ns
    • Коэффициент заполнения прямоугольного сигнала 1%-99%
    TTL выход:
    • Частотный диапазон

      0.01Hz~2MHz(UDB1002S)
      0.01Hz ~5MHz(UDB1005S)
      0.01Hz ~8MHz(UDB1008S)

    • Амплитуда >3Vp-p
    • Нагрузочная способность >20TTL
    Функция счётчика:
    • Диапазон счётчика импульсов 0~4294967295
    • Диапазон частотомера 1Hz~60MHz
    • Диапазон входных напряжений 0.5Vp-p~20Vp-p
    Генератор качающей частоты (sweep_mode ):
    • Частотный диапазон fM1~fM2 (частоты предварительно устанавливаются)
    • Временной диапазон 1s~99s
    Дополнительная возможность: сохранять и загружать конфигурации M0~M9 (по умолчанию M0)

    Что касается генератора качающей частоты , для его настройки необходимо задать два значения частоты и время, за которое частота генератора изменится от fM1 до fM2 . Это очень удобно если надо узнать как реагирует схема на разные частоты, например, с помощью генератора качающей частоты можно легко найти резонансную частоту контура с неизвестными элементами. Для этого через последовательно включённый резистор номиналом несколько сотен Ом подключаем генератор к контуру, а щупом осциллографа к выводам контура. Если контур последовательный, то на резонансной частоте амплитуда колебаний будет максимальна, а если параллельный - минимальна. Фиксируя амплитуду на экране осциллографа можно узнать резонансную частоту контура.

    Но не буду отходить от темы, ниже приведу несколько осциллограмм для разных видов колебаний и разных частот.
    Синус 1КHz


    Синус 10КHz


    Синус 100КHz


    Синус 1МHz


    Синус 5МHz

    Пила 1КHz


    Пила 10КHz


    Пила 100КHz


    Пила 1МHz


    Пила 5МHz


    Еще можно изменять наклон пилы


    Меандр 1КHz


    Меандр 10КHz


    Меандр 100КHz


    Меандр 1МHz


    Меандр 5МHz

    Меандр 100KHz с TTL выхода


    Меандр 1МHz с TTL выхода


    Меандр 5МHz с TTL выхода

    На осциллограммах видно, что стабильность частоты сильно отличается от заявленной, также хотелось отметить, что если частота прямоугольного сигнала превышает 1MHz, сигнал начинает сильно дрожать.
    Сигнал для проверки частотомера взял с калибратора осциллографа, по паспортным данным на его выходе должен быть меандр с частотой 1KHz, частотомер показал ровно 1KHz. Режим счётчика импульсов не тестировал.

    Всё вышеперечисленное можно отнести к плюсам, ну а чего можно хотеть от генератора сигналов за 30$? А теперь минусы, их всего два за то какие.....
    В общем, в этом генераторе присутствует импульсная система питания, которая очень шумит. На осциллограмме ниже видно, что происходит на выходе генератора в отсутсвие сигнала.


    но это мелочь по сравнению с регулировкой амплитуды, при вращении ручки регулировки амплитуды, последняя изменяется скачками, поэтому выставить нужную амплитуду с погрешность 100mV очень сложно .

    Быстрый поиск на ютубе по запросу «генератор сигналов с али» показал, что генератора сигналов, у которого можно точно выставить амплитуду стоит, гораздо дороже, поэтому по соотношению цена-возможности этот генератор вне конкуренции.
    Генератор покупал .

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

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

    Собираем генератор сигналов – функциональный генератор. Часть 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.

    Похожие статьи

    © 2024 karkywa.ru. Программы. Интернет. Безопасность. Компьютеры. Windows.