Генератор на DDS AD9851

автор: Pchelа5

 После того, как была проверена работоспособность модуля на AD9851, мною было принято решение попробовать уместить два генератора в одном: генератор синуса на основе AD9851 с частотой от 1 Гц до 90 МГц (теоретически, реально же, как заявлено, около 70 МГц) и НЧ-генератор DDS сигналов произвольной формы с частотой от 1 Гц до 100 кГц.  Кнопку Run/stop решено было перенести на тот же порт управления клавиатурой и в ту же часть программы – добавился один диод, но ушел один резистор. Светодиод и пьезокерамический буззер объединил на одну ногу (если применять другой тип буззера, то лучше использовать буферный транзистор через развязывающий конденсатор). Испытания показали, что для формирования сигнала Reset для AD9851 вполне подходит RC-цепочка – экономим еще одну ножку процессора. В итоге у нас остается порт D для формирования DDS 8-ми битного сигнала низкой частоты и три ноги порта С для последовательного управления модулем DDS AD9851. Схема приведена ниже:

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

 Плата разведена под корпус TQFP с шириной дорожек 0,32, резисторы для матрицы R-2R отобраны из ряда 10 кОм типоразмер 1206, остальные пассивные элементы в корпусах 1206 и 0805. Кварц на 12 МГц был найден в закромах – мелкий в корпусе SMD и на плате отмечен тремя круглыми контактными площадками с левой стороны:

 В принципе, подойдет любой из номинала от 8 МГц до 16 МГц – надо только в программе выставить нужную частоту. Резисторы номиналом на схеме 5 кОм (с левого края 7 шт. получены параллельным соединением резисторов по 10 кОм – запаяны бутербродом.) На плате присутствуют 4 перемычки 1206, переменный резистор для регулировки контрастности дисплея после замеров заменен двумя постоянными резисторами. Ввиду относительной простоты схемы на плате номера элементов и выводов не подписаны – разобраться несложно. С правой стороны микросхемы выведены три контактные площадки для аналоговых ножек – опорника и двух входов АЦП – на всякий случай. Плата получилась размером 45*36 мм., изготавливалась методом ЛУТ.  Фотография готовой платы приведена ниже:

 Теперь о программе. За исходник была применена программа итальянского коллеги, упоминавшаяся в части первой статьи про DDS. Я убрал большинство итальянских слов, поменяв их на более понятные английские аналоги, и изменил принцип вывода данных на дисплей. Основное тело программы (цикл DO LOOP) состоит из обращения к подпрограммам вывода на дисплей, опроса клавиатуры и навигации по дисплею). Для каждого раздела меню используется своя подпрограмма назначения кнопок, ну и при желании, пользователь может переделать их под свои пожелания. В качестве вывода данных на дисплей используется два строковых массива длиной по 16 знаков, в каждом из которых я меняю значения – цифры, буквы и т.п. Текущая позиция обозначается мигающим курсором.

  НЧ генератор DDS на данный момент формирует 8 сигналов: стандартных – синус, меандр, пила, треугольник и не очень – псевдошум, функцию типа cos(x) * sin(5x), затухающие волны синуса и прямоугольный сигнал с изменяющейся скважностью с шагом в ≈1%. Последние три таблицы были случайно найдены в недрах Интернета и вставлены для коллекции – при желании их можно поменять на что-то более полезное. Прямоугольный сигнал с изменяющейся скважностью – более полезная вещь и под него была написана подпрограмма. 

Как это работает.

Теоретический принцип работы DDS описан в статье http://www.compitech.ru/html.cgi/arhiv/01_07/stat_50.htm , но для нашего случая теорию можно опустить и довольствоваться следующими постулатами: выходная частота генератора AD9851 зависит от тактовой частоты, управляющего двоичного 32-х разрядного слова, задающего частоту, и 8-ми битовой посылки для конфигурации микросхемы прямого синтеза. Итого – 40-битная последовательная посылка DATA и CLOCK с защелкой данных по сигналу FQUD. Таким образом, задав нужную частоту для генератора AD9851, мы получаем на его выходах синусоидальный и прямоугольный сигналы, которые генерируются в дальнейшем самостоятельно до принудительной смены. Для генерации сигнала произвольной формы непосредственно микроконтроллером после нажатия кнопки Run/stop в его оперативную память загружается таблица данных и на порт D в замкнутом цикле выводятся значения формы сигнала. Выход из цикла осуществляется при повторном нажатии кнопки Run/stop.

 На приведенных ниже картинках показаны некоторые выходные результаты:

пила

синус

затухающий синус

прямоугольник

треугольник

Внимание:

 Так как у меня в корпусе TQFP были только Atmega88P, соответственно выходной файл скомпилирован под них же. Немножко был обескуражен отсутствием поддержки данного камня в Pony Prog под STK200, но проблему удалось решить программированием непосредственно из-под Васика. Версия 11.9.8 не поддерживает тип данных типа DWord. Для желающих перекомпилировать можно предложить следующее решение – поменять в строке данных Dta последние значения и тип переменной DWord поменять на Long. Или в принципе поменять алгоритм расчета на предложенный камрадом Aleks8383 – до частот 70 МГц он будет работать.

Печатная плата в формате Lay

Исходник программы и файл прошивки


Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 3 + 3

Добавить изображение

Последние статьи