Найти в Дзене
ON/OFF

Генератор сигналов AD9833. Часть I

Всем привет. При разработке данного генератора для УМЗЧ исходил из следующих соображений. Генератор должен быть максимально практичным, удобным в использовании и не должен на себя отвлекать много внимания, кроме того я не силен в программировании что-бы рисовать минюшки и прочее). Возможности настройки УМЗЧ генератором высоки, начиная от проверки спада АЧХ до измерений КНИ и самовозбуждения усилителя, при чем *форс мажор* на частотах выше или ниже слышимости человеческого уха может в конечном итоге повлиять на качество и надежность УМЗЧ и увидеть это можно только генератором. Можно говорить о не заменимости этого прибора при работе с УМЗЧ. Модуль генератор AD9833 генерирует на выходе три вида сигналов с частотой до 12.5 МГц - меандр, треугольник и синус. Из наблюдений его работы могу сказать что тяжело справляется с меандром уже ближе МГц и нужна будет доп обвязка, но нам и не нужны такие частоты. И исходя из этого делал управление генератором. Схема: Основное управление энкодером: по

Всем привет. При разработке данного генератора для УМЗЧ исходил из следующих соображений. Генератор должен быть максимально практичным, удобным в использовании и не должен на себя отвлекать много внимания, кроме того я не силен в программировании что-бы рисовать минюшки и прочее). Возможности настройки УМЗЧ генератором высоки, начиная от проверки спада АЧХ до измерений КНИ и самовозбуждения усилителя, при чем *форс мажор* на частотах выше или ниже слышимости человеческого уха может в конечном итоге повлиять на качество и надежность УМЗЧ и увидеть это можно только генератором. Можно говорить о не заменимости этого прибора при работе с УМЗЧ. Модуль генератор AD9833 генерирует на выходе три вида сигналов с частотой до 12.5 МГц - меандр, треугольник и синус. Из наблюдений его работы могу сказать что тяжело справляется с меандром уже ближе МГц и нужна будет доп обвязка, но нам и не нужны такие частоты. И исходя из этого делал управление генератором. Схема:

Схема может поменяться с окончанием проекта.
Схема может поменяться с окончанием проекта.

Основное управление энкодером:

поворот - направо, налево - шаг + - 1 ГЦ.

быстрый поворот - шаг + - 100 Гц

одно нажатие на кнопку энкодера - шаг +1 КГЦ

удержание кнопки и поворот - шаг + - 10 КГц

двойное нажатие на кнопку энкодера - сброс = 1 Гц

Управление на кнопках:

1.Выбор сигнала, по умолчанию - синус и отображение на экране дисплея.

2. Кнопка выхода генератора, по умолчанию выключен. Информацию о выходе сделал на светодиоде, это позволит не отвлекать внимание лишний раз на экран.

И для удобства три кнопки памяти частоты М1-3, при этом на заданной частоте можно менять форму сигнала по усмотрению. EEPROM настроен на запись частоты. Запись - удержание кнопки, при этом на дисплее появиться отображение слова *remember* и вывод записи - одиночный клик по кнопке, отобразиться слово *Memory* с номером кнопки записи.

-2

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

Для реализации я взял простые к исполнению библиотеки от AlexGyver и необходимые для LCD 2IC и модуля AD9833.

-3

Далее завел необходимые переменные;

-4

Переменная unsigned long с диапазоном от 0 до 4 294 967 295 для энкодера, этим я ограничил частоту работы генератора до 4 МГц. Дело в том что генератор дает небольшую амплитуду напряжения на выходе и необходимо ставить усилитель сигнала, при этом от него многое зависит. В наличии у меня *музыкальный* только ОРА2134 с его частотой до 8 МГц и скоростью нарастания 20 В/мкс. Что-то искать - улучшать и т.д я не буду, тот же фильтр Баттерворта потребует емкости с минимальным тангенсом угла потерь, и задачи удорожать проект не стоит. Далее переменная для работы с генератором, флаги кнопок и переменная float , плавающей точкой для вывода данных на дисплей.

-5

В функции setup я инициализирую работу модуля генератора, экрана а также необходимые настройки энкодера и кнопок. В функции loop первым делом методами с библиотеки завожу необходимую логику работы энкодера. Далее методом hasClicks библиотеки кнопок счетчиком и переменной bool BTN_count делаю выбор сигнала и булевой переменной BTN_state включение генератора:

-6

Далее ограничиваю полосу частот и завожу блок EEPROM с записью переменной энкодера методом isHold - запись и isClick - вывод:

-7

Адреса я взял 0-4-8 и методы put и get для чтения и записи. Возможно еще доработка на первое включение - но как лучше это реализовать я не знаю. И в конце вывод данных и обновление заданной частоты генератора :

-8

И вот здесь у меня есть повторы, которые в силу своего опыта я убрать не смог. Также столкнулся с тем что при включении очистки экрана он начинает *дико* мерцать, что исправил только тем что вывел пустые кавычки после сообщения. Из явного косяка осталось убрать delay, но особо не мешает работе, можно завести таймер. Статью я разделил на две части, что бы не загружать *непутевой*) программной частью готовое изделие а больше уделить внимание практике реализации изделия. В конечном счете нас интересует больше итоговые характеристики получившегося генератора. Как говорил ранее, этому генератору нужен усилитель а отсюда и двуполярное питание, питание самой ардуинки, хорошо продуманной высокочастотной части схемы что и выложу во второй части. А пока :

Скетч и необходимые библиотеки здесь.

Всем Спасибо.